找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2390|回复: 2
打印 上一主题 下一主题
收起左侧

单片机楼层单元门禁系统程序设计 楼宇对讲

[复制链接]
跳转到指定楼层
楼主
设计一楼层单元门禁系统,能实现楼层住户密码开锁或其它身份识别开锁,能显示操作状态,阻止陌生人进入,能输出报警。设计完整的电路原理图和编写相关程序。
    用MCS-51系列单片机或其它CPU作为控制器设计完整的控制系统,包括以下内容:
  用LCD1602显示或其它点阵液晶或用LED显示;
  实现磁卡、IC卡、射频卡或其它方式任意1种输入;
  有密码输入按键;
  有声音及报警输出;   
  当断电时能维持24小时正常工作。
  外部220V电源(开关电源)供电;
  用PROTEUS仿真其中一个功能。



单片机源程序如下:
  1. #include "reg52.h"
  2. #include "LCD1602.h"
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. unsigned char k;

  6. uchar pic;
  7. uchar k;
  8. uchar X;                            
  9. uchar keycount;
  10. //uchar keyprocesstime;
  11. uint Key_Time;
  12. uchar flashtime;
  13. uint  PLcount;
  14. uchar table11[4]={0};
  15. uchar table1count;
  16. bit keyflag;
  17. bit gonengflag;
  18. bit pic3flag;
  19. bit pic4flag;
  20. bit pic5flag;
  21. bit pic11flag;
  22. bit pic55flag;
  23. uint pic3count;
  24. uint pic4count;
  25. uint pic5count;

  26. sbit JDQ = P2^3;
  27. sbit BEEP = P2^4;
  28. sbit LED =  P2^5;

  29. void delay(uint n) //延时程序
  30. {   
  31.     uchar i,j;
  32.     for(i=n;i>0;i--)
  33.        for(j=112;j>0;j--);
  34. }

  35. void Display(void)
  36. {
  37.     uchar i;
  38.         switch(pic)
  39.         {
  40.             case 1:        //显示正常界面,时间
  41.                      LCDDispString(0,1,"    TANLIJUAN  ");
  42.                      LCDDispString(0,2,"Please input num");
  43.                
  44.                 break;
  45.                 case 2:        //显示第一段波形调整界面
  46.                                 LCDDispString(0,1,"Please Input  ");//显示字符串
  47.                                 LCDDispString(0,2,"num                ");  

  48.                 break;

  49.                 case 3:        //显示第二段波形调整界面
  50.                              LCDDispString(0,1,"  Please wait  ");
  51.                      LCDDispString(0,2,"  ...........  ");
  52.                                  pic3flag = 1;
  53.                 break;

  54.                 case 4:         //显示第三段波形调整界面
  55.                              LCDDispString(0,1,"  Sorry           ");
  56.                      LCDDispString(0,2,"  num    error  ");
  57.                                  pic4flag = 1;
  58.                 break;

  59.                 case 5:        //显示第四段波形调整界面
  60.                                  LCDDispString(0,1,"     Right       ");
  61.                      LCDDispString(0,2,"  You are welcome  ");
  62.                                  pic5flag = 1;
  63.                 break;
  64.         }
  65. }
  66. /****************************************************/
  67. /*                4*4键盘读取程序                         */
  68. /****************************************************/
  69. uchar GetKey ( )//键盘扫描函数,用于识别哪一个键按下,并读取键值
  70. {  
  71.     uchar X,Y,Z;
  72.     P1 = 0xf0;    //先对P1置数 行扫描
  73.         if(P1!=0xf0) //判断是否有键按下
  74.     {
  75.         delay(50); //延时,软件去干扰
  76.         if(P1!=0xf0) //确认按键按下X = P1;
  77.         {
  78.             X=P1&0xf0; //保存行扫描时有键按下时状态
  79.                         P1=0x0f; //列扫描
  80.                         Y=P1&0x0f; //保存列扫描时有键按下时状态
  81.                         Z=X|Y; //取出键值
  82.                         switch ( Z ) //判断键值(那一个键按下)
  83.                         {                               
  84.                                 case 0x7e: k=1; break;
  85.                                 case 0xbe: k=2; break;
  86.                                 case 0xde: k=3; break;       
  87.                                    case 0x7d: k=4; break;
  88.                                 case 0xbd: k=5; break;
  89.                                 case 0xdd: k=6; break;
  90.                                 //case 0xed: k=8; break;
  91.                                 case 0x7b: k=7; break;
  92.                                 case 0xbb: k=8; break;
  93.                                 case 0xdb: k=9; break;
  94.                                 //case 0xeb: k=12; break;                                          
  95.                                 case 0x77: k=0; break;
  96.                                 case 0xee: k=13; break;//DEL
  97.                                 case 0xb7: k=14; break;//CALL
  98.                                 case 0xd7: k=15; break;//CANCEL
  99.                                 case 0xe7: k=16; break;//ENTER                                  
  100.                         }
  101.                         if(k<=9)
  102.                         {
  103.                             keyflag = 1;
  104.                         }
  105.                         else
  106.                         {
  107.                             gonengflag = 1;
  108.                         }
  109.                 }
  110.         }
  111. }

  112. void Keyprocess(void)                           //键盘处理
  113. {
  114.     switch (pic) //判断键值(那一个键按下)
  115.         {                               
  116.                 case 1:        //开机界面
  117.                       switch(k)
  118.                           {
  119.                               case 14:
  120.                                       pic = 2;
  121.                                           Display();
  122.                                           keycount = 0;
  123.                                   break;
  124.                           }
  125.                 break;
  126.                 case 2://第一段波形设置界面
  127.                      if((keyflag==1)&(table1count<4))
  128.                          {
  129.                                  LCDDispNum(8+table1count,2,k);
  130.                                  table11[table1count] = k;
  131.                                  table1count++;
  132.                          }
  133.                           switch(k)
  134.                           {                                  
  135.                                   case 13://删除
  136.                                                 table1count--;
  137.                                                 if(table1count>=0)
  138.                                                 {
  139.                                                     LCDDispChar(8+table1count,2,0x04);
  140.                                                 }

  141.                                   break;

  142.                                   case 15:
  143.                                          pic = 1;
  144.                                                  Display();
  145.                                                  keycount = 0;
  146.                                                  table1count = 0;
  147.                                   break;
  148.                   
  149.                                   case 16:
  150.                                          if(1<=table11[0]<=4)
  151.                                                  {
  152.                                                            if(table11[1]==0)
  153.                                                           {
  154.                                                                    if(1<=table11[2]<=4)
  155.                                                                  {
  156.                                                                           pic = 3;
  157.                                                                          pic3flag = 1;
  158.                                                              Display();
  159.                                                              keycount = 0;
  160.                                                              table1count = 0;
  161.                                                                  }
  162.                                                                  else
  163.                                                                  {
  164.                                                                           pic = 4;
  165.                                                                          pic4flag = 1;
  166.                                                                  Display();
  167.                                                                  keycount = 0;
  168.                                                                  table1count = 0;
  169.                                                                  BEEP = 1;
  170.                                                              LED = 1;
  171.                                                                  }
  172.                                                           }
  173.                                                           else
  174.                                                           {
  175.                                                              pic = 4;
  176.                                                                  pic4flag = 1;
  177.                                                              Display();
  178.                                                              keycount = 0;
  179.                                                              table1count = 0;
  180.                                                              BEEP = 1;
  181.                                                          LED = 1;
  182.                                                           }
  183.                                                  }
  184.                                                  else
  185.                                                  {
  186.                                                      pic = 4;
  187.                                                          pic4flag = 1;
  188.                                                          Display();
  189.                                                          keycount = 0;
  190.                                                          table1count = 0;
  191.                                                          BEEP = 1;
  192.                                                      LED = 1;
  193.                                                  }

  194.                                                  //JDQ = 1;

  195.                                   break;                                                       
  196.                           }
  197.             break;
  198.                 case 3:
  199.                       switch(k)
  200.                           {
  201.                               case 14:
  202.                                       pic = 2;
  203.                                           Display();
  204.                                           keycount = 0;
  205.                                   break;
  206.                                   case 15:
  207.                                          pic = 1;
  208.                                                  Display();
  209.                                                  keycount = 0;
  210.                                                  table1count = 0;
  211.                                   break;

  212.                           }
  213.                 break;       
  214.                 case 4:
  215.                       switch(k)
  216.                           {
  217.                               case 14:
  218.                                       pic = 2;
  219.                                           Display();
  220.                                           keycount = 0;
  221.                                   break;
  222.                                   case 15:
  223.                                          pic = 1;
  224.                                                  Display();
  225.                                                  keycount = 0;
  226.                                                  table1count = 0;
  227.                                   break;

  228.                           }
  229.                 break;       
  230.                 case 5:
  231.                       switch(k)
  232.                           {
  233.                               case 14:
  234.                                       pic = 2;
  235.                                           Display();
  236.                                           keycount = 0;
  237.                                   break;
  238.                                   case 15:
  239.                                          pic = 1;
  240.                                                  Display();
  241.                                                  keycount = 0;
  242.                                                  table1count = 0;
  243.                                   break;

  244.                           }
  245.                 break;                         
  246.         }
  247. }


  248. //
  249. void main(void)
  250. {
  251.         pic = 1;
  252.         LCDInit();//lcd初始化
  253.         TMOD = 0x11;
  254.     TH1 = 0xf8;
  255.     TL1 = 0xcc;
  256.         P0 = 0xff;
  257.     TR1 = 1;
  258.     ET1 = 1;  
  259.         EA=1;
  260.         JDQ = 0;
  261.         BEEP = 0;
  262.         LED = 0;
  263.         Display();  
  264.         while(1)
  265.         {
  266.                         //Display();
  267.                         if(keyflag|gonengflag)
  268.                     {
  269.                             Keyprocess();
  270.                                 keyflag = 0;
  271.                                 gonengflag = 0;
  272.                         }
  273.                         if(pic11flag==1)
  274.                         {
  275.                             pic11flag = 0;
  276.                                 pic = 1;
  277.                                 Display();
  278.                         }
  279.                         if(pic55flag==1)
  280.                         {
  281.                             pic55flag = 0;
  282.                                 pic = 5;
  283.                                 Display();
  284.                         }
  285.                         if(pic3flag==1)
  286.                         {
  287.                             delay(5000);
  288.                                 pic = 5;
  289.                                 Display();
  290.                         }
  291.         }
  292. }       

  293. void T1_time (void) interrupt 3 using 2
  294. {
  295.      TH1 = 0xf8;
  296.      TL1 = 0xcc;
  297.      Key_Time++;
  298.      if(Key_Time == 250)
  299. ……………………

  300. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
门禁设计系统.rar (101.64 KB, 下载次数: 62)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩1
回复

使用道具 举报

沙发
ID:549222 发表于 2019-5-28 13:30 | 只看该作者
完美!
回复

使用道具 举报

板凳
ID:580968 发表于 2019-7-9 15:47 | 只看该作者
什么东西啊,打都打不开,程序只有俩,图也被破坏。垃圾东西
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表