找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机实现电子密码锁仿真+代码

[复制链接]
跳转到指定楼层
楼主
51单片机实现的智能门禁系统仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>
  2. #include<string.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int  
  5. sbit RS=P3^5;
  6. sbit RW=P3^6;
  7. sbit EN=P3^4;
  8. sbit LED=P0^1;
  9. sbit BEN=P3^2;
  10. uchar code table1[]="Input username:";
  11. uchar code table2[]="Enter password:";
  12. uchar code table3[]="error!try again";
  13. uchar code table4[]="welcome!!!";
  14. uchar code username[]="620";
  15. uchar code password[]="615";
  16. uchar i=-1,flag=0,KeyNumber,KeyCount=-1,keyword[16]={0};
  17. bit temp=0;
  18. void delay(uint z){
  19.         uint x,y;
  20.         for(x=z;x>0;x--)
  21.                 for(y=110;y>0;y--);
  22. }
  23. void lcd_wcmd(uchar cmd){
  24.         RS=0;
  25.         RW=0;
  26.         P2=cmd;
  27.         delay(5);
  28.         EN=1;
  29.         delay(5);
  30.         EN=0;
  31. }
  32. void lcd_wdat(uchar date){
  33.         RS=1;
  34.         RW=0;
  35.         P2=date;
  36.         delay(5);
  37.         EN=1;
  38.         delay(5);
  39.         EN=0;
  40. }
  41. void lcd_init(){
  42.         EN=0;
  43.         lcd_wcmd(0x06);
  44.         lcd_wcmd(0x0c);
  45.         lcd_wcmd(0x38);
  46.         lcd_wcmd(0x01);
  47.         lcd_wcmd(0x02);
  48. }
  49. void display1(uchar a[]){
  50.         for(i=0;i<strlen(a);i++){
  51.                 lcd_wdat(a[i]);
  52.         }
  53. }
  54. uchar keyscan(void)  
  55. {
  56.         uchar cord_h=0,cord_l=0;
  57.         P1=0x0f;            
  58.         cord_h=P1&0x0f;     
  59.         if(cord_h!=0x0f)   
  60.         {
  61.                 delay(100);        
  62.                 if(cord_h!=0x0f)
  63.                 {
  64.                         cord_h=P1&0x0f;  
  65.                         P1=cord_h|0xf0;  
  66.                         cord_l=P1&0xf0;  
  67.                                                                                                 while((P1&0Xf0)!=0xf0);
  68.                         return(cord_h+cord_l);
  69.                 }
  70.         }
  71.         return(0);     
  72. }
  73. //void lcd_pos(uchar pos)
  74. //{                          
  75. //  lcd_wcmd(0x80+0x40+pos);  
  76. //}
  77. void key_word(uint key)
  78. {
  79.         switch(key)
  80.         {
  81.            case 0xee:                     
  82.                        KeyCount++;         
  83.                        keyword[KeyCount]='0';         
  84.                        //lcd_pos(KeyCount);
  85.                                                                                                 if(flag==1)
  86.                                                                                                 lcd_wdat('*');
  87.                                                                                                 else
  88.                        lcd_wdat('0');
  89.                        break;      
  90.              case 0xde:  
  91.                        KeyCount++;         
  92.                        keyword[KeyCount]='1';                                         
  93.                        //lcd_pos(KeyCount);
  94.                                                                                          if(flag==1){
  95.                                                                                                  if(temp==1)
  96.                                                                                                          lcd_wdat('1');
  97.                                                                                                  else
  98.                                                                                                          lcd_wdat('*');
  99.                                                                                          }
  100.                                                                                          else                                                                                         
  101.                        lcd_wdat('1');     
  102.                        break;
  103.              case 0xbe:                     
  104.                        KeyCount++;         
  105.                        keyword[KeyCount]='2';         
  106.                        //lcd_pos(KeyCount);
  107.                                                                                          if(flag==1){
  108.                                                                                                  if(temp==1)
  109.                                                                                                          lcd_wdat('2');
  110.                                                                                                  else
  111.                                                                                                          lcd_wdat('*');
  112.                                                                                          }
  113.                                                                                          else
  114.                        lcd_wdat('2');     
  115.                        break;
  116.              case 0x7e:
  117.                                                                                          
  118.                        KeyCount++;         
  119.                        keyword[KeyCount]='3';         
  120.                        //lcd_pos(KeyCount);
  121.                                                                                                 if(flag==1){
  122.                                                                                                         if(temp==1)
  123.                                                                                                          lcd_wdat('3');
  124.                                                                                                  else
  125.                                                                                                                 lcd_wdat('*');
  126.                                                                                          }
  127.                                                                                          else
  128.                        lcd_wdat('3');
  129.                        break;
  130.              case 0xed:                     
  131.                        KeyCount++;         
  132.                        keyword[KeyCount]='4';         
  133.                        //lcd_pos(KeyCount);
  134.                                                                                                 if(flag==1){
  135.                                                                                                         if(temp==1)
  136.                                                                                                          lcd_wdat('4');
  137.                                                                                                  else
  138.                                                                                                          lcd_wdat('*');
  139.                                                                                          }
  140.                                                                                          else
  141.                        lcd_wdat('4');   
  142.                        break;
  143.              case 0xdd:                     
  144.                        KeyCount++;         
  145.                        keyword[KeyCount]='5';         
  146.                        //lcd_pos(KeyCount);
  147.                                                                                                 if(flag==1){
  148.                                                                                                         if(temp==1)
  149.                                                                                                          lcd_wdat('5');
  150.                                                                                                  else
  151.                                                                                                          lcd_wdat('*');
  152.                                                                                          }
  153.                                                                                          else
  154.                        lcd_wdat('5');   
  155.                        break;
  156.              case 0xbd:                     
  157.                        KeyCount++;         
  158.                        keyword[KeyCount]='6';         
  159.                        //lcd_pos(KeyCount);
  160.                                                                                                 if(flag==1){
  161.                                                                                                         if(temp==1)
  162.                                                                                                          lcd_wdat('6');
  163.                                                                                                  else
  164.                                                                                                          lcd_wdat('*');
  165.                                                                                          }
  166.                                                                                          else
  167.                        lcd_wdat('6');     
  168.                        break;
  169.              case 0x7d:                     
  170.                        KeyCount++;         
  171.                        keyword[KeyCount]='7';        
  172.                        //lcd_pos(KeyCount);
  173.                                                                                                 if(flag==1){
  174.                                                                                                         if(temp==1)
  175.                                                                                                          lcd_wdat('7');
  176.                                                                                                  else
  177.                                                                                                          lcd_wdat('*');
  178.                                                                                          }
  179.                                                                                          else
  180.                        lcd_wdat('7');     
  181.                        break;
  182.              case 0xeb:                     
  183.                        KeyCount++;         
  184.                        keyword[KeyCount]='8';         
  185.                        //lcd_pos(KeyCount);
  186.                                                                                                 if(flag==1){
  187.                                                                                                         if(temp==1)
  188.                                                                                                          lcd_wdat('8');
  189.                                                                                                  else
  190.                                                                                                          lcd_wdat('*');
  191.                                                                                          }
  192.                                                                                          else
  193.                        lcd_wdat('8');   
  194.                        break;        
  195.              case 0xdb:                     
  196.                        KeyCount++;        
  197.                        keyword[KeyCount]='9';         
  198.                        //lcd_pos(KeyCount);
  199.                                                                                                 if(flag==1){
  200.                                                                                                         if(temp==1)
  201.                                                                                                          lcd_wdat('9');
  202.                                                                                                  else
  203.                                                                                                          lcd_wdat('*');
  204.                                                                                          }
  205.                                                                                          else
  206.                        lcd_wdat('9');   
  207.                        break;
  208.              case 0xbb:                     
  209.                        KeyCount++;         
  210.                        keyword[KeyCount]='A';         
  211.                        //lcd_pos(KeyCount);
  212.                                                                                                 if(flag==1){
  213.                                                                                                         if(temp==1)
  214.                                                                                                          lcd_wdat('A');
  215.                                                                                                  else
  216.                                                                                                          lcd_wdat('*');
  217.                                                                                          }
  218.                                                                                          else
  219.                        lcd_wdat('A');     
  220.                        break;
  221.              case 0x7b:                     
  222.                        KeyCount++;         
  223.                        keyword[KeyCount]='B';         
  224.                        //lcd_pos(KeyCount);
  225.                                                                                                 if(flag==1){
  226.                                                                                                         if(temp==1)
  227.                                                                                                          lcd_wdat('B');
  228.                                                                                                  else
  229.                                                                                                          lcd_wdat('*');
  230.                                                                                          }
  231.                                                                                          else
  232.                        lcd_wdat('B');     
  233.                        break;
  234.                                                  case 0xe7:                     
  235.                                                                                         keyword[KeyCount--]='\0';
  236.                                                                                         lcd_wcmd(0x80+0x40+KeyCount+1);
  237.                                                                                         lcd_wdat(' ');
  238.                                                                                         lcd_wcmd(0x80+0x40+KeyCount+1);
  239.                        break;
  240.                                                  case 0xd7:
  241.                                                                                                 if(flag==1){
  242.                                                                                                         if(strcmp(keyword,password)==0){
  243.                                                                                                                 lcd_wcmd(0x01);
  244.                                                                                                                 delay(5);
  245.                                                                                                                 display1(table4);
  246.                                                                                                                 P0=0X00;
  247.                                                                                                                 BEN=~BEN;
  248.                                                                                                                
  249.                                                                                                                 }
  250.                                                                                                                 else{
  251.                                                                                                                         lcd_wcmd(0x01);
  252.                                                                                                                         display1(table3);
  253.                                                                                                                         lcd_wcmd(0xc0);
  254.                                                                                                                        
  255.                                                                                                                         for(i=0;i<=KeyCount;i++)
  256.                                                                                                                         keyword[i]=0;
  257.                                                                                                                         KeyCount=-1;
  258.                                                                                                                 }
  259.                                                                                                         }
  260.                                                                                                         else{
  261.                                                                                                                 if(strcmp(keyword,username)==0){
  262.                                                                                                                         lcd_wcmd(0x01);
  263.                                                                                                                         delay(5);
  264.                                                                                                                         display1(table2);
  265.                                                                                                                         lcd_wcmd(0xc0);
  266.                                                                                                                         flag=1;
  267.                                                                                                                         for(i=0;i<=16;i++)
  268.                                                                                                                         keyword[i]=0;
  269.                                                                                                                         KeyCount=-1;
  270.                                                                                        
  271.                                                                                                                 }
  272.                                                                                                                 else{
  273.                                                                                                                         lcd_wcmd(0x01);
  274.                                                                                                                         display1(table3);
  275.                                                                                                                         lcd_wcmd(0xc0);
  276.                                                                                                                         KeyCount=-1;
  277.                                                                                                                        
  278.                                                                                                                 }
  279.                                                                                                         }
  280.                        break;
  281.                                                  case 0xb7:                     
  282.                                                          if(flag==1){
  283.                                                                  lcd_wcmd(0xc0);
  284.                                                                         temp=~temp;
  285.                                                                  for(i=0;i<strlen(keyword);i++)
  286.                                                                  {
  287.                                                                          if(temp)
  288.                                                                                 lcd_wdat(keyword[i]);
  289.                                                                          else
  290.                                                                                  lcd_wdat('*');
  291.                                                                  }
  292.                                                                  
  293.                                                          }
  294.                        break;
  295.                                                  case 0x77:                                         
  296.                        KeyCount++;         
  297.                        keyword[KeyCount]='@';         
  298.                        //lcd_pos(KeyCount);
  299.                                                                                                 if(flag==1){
  300.                                                                                                         if(temp==1)
  301.                                                                                                          lcd_wdat('@');
  302.                                                                                                  else
  303.                                                                                                          lcd_wdat('*');
  304.                                                                                          }
  305.                                                                                          else
  306.                        lcd_wdat('@');     
  307.                        break;
  308.              default:
  309.                      break;
  310.                                          }
  311.                                          
  312. }

  313. void main(){
  314.         P1=0x0f;
  315.         P0=0xff;
  316.         lcd_init();
  317.         display1(table1);
  318.         lcd_wcmd(0x80+0x40);
  319.         while(1){
  320.                 key_word(keyscan());
  321.         }
  322. }
复制代码

所有资料51hei提供下载:
门禁系统.rar (69.82 KB, 下载次数: 41)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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