找回密码
 立即注册

QQ登录

只需一步,快速开始

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

电子密码锁Proteus仿真+单片机代码

[复制链接]
跳转到指定楼层
楼主
ID:418072 发表于 2019-4-28 11:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
电子密码锁仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include"lcd.h"

  2. //--定义使用的IO口--//
  3. #define KEY P3

  4. sbit BEEP=P2^6;           //接蜂鸣器        
  5. unsigned char mima[6]={1,2,3,4,5,6};        
  6. unsigned char mima3[6]={6,5,4,3,2,1};        
  7. unsigned char mima4[6]={7,7,7,7,7,7};        
  8. unsigned char mima2[6];

  9. unsigned char state=0;
  10. unsigned char cuowu=0;
  11. unsigned char KeyValue;                 
  12. unsigned char KeyState;        //记录按键的状态,0没有,1有

  13. void TimerConfiguration();
  14. unsigned char Time=0;
  15. unsigned char sec=60;

  16. void KeyDown();                 //检测按键函数

  17. void Delay10ms(unsigned int c)   //误差 0us
  18. {
  19.     unsigned char a,b;
  20.     for(;c>0;c--)
  21.         for(b=38;b>0;b--)
  22.             for(a=130;a>0;a--);
  23. }

  24. void BZ()
  25. {
  26.         BEEP= 0;
  27.         Delay10ms(100);
  28.         BEEP= 1;
  29. }

  30. void BZ2()
  31. {
  32.         BEEP= 0;
  33.         Delay10ms(30);
  34.         BEEP= 1;
  35.         Delay10ms(30);

  36.         BEEP= 0;
  37.         Delay10ms(30);
  38.         BEEP= 1;
  39.         Delay10ms(30);

  40.         BEEP= 0;
  41.         Delay10ms(30);
  42.         BEEP= 1;
  43. }




  44. void main(void)
  45. {
  46.         unsigned char i=0;
  47.         unsigned char j=0;

  48.         KeyState=0;
  49.         TimerConfiguration();
  50.         
  51.         LcdInit();
  52.         while(1)
  53.         {
  54.                 if(state==0)
  55.                 {
  56.                 LcdWriteCom(0x01);
  57.                 LCDWrite_String(0, 0, 16, "Shu ru mi ma:");
  58.                 LCDWrite_String(4, 1, 6, "      ");
  59.                 while(state==0)
  60.                 {
  61.                 KeyDown();
  62.                 if((KeyState==1))
  63.                 {
  64.                         if((KeyValue<10)&&(i<6))
  65.                         {
  66.                                 LcdWriteCom(0xc4+i);
  67.                                 LcdWriteData('*');
  68.                                 mima2[i]=KeyValue;
  69.                                 i++;
  70.                         }

  71.                         if((i==6)&&(KeyValue==15))
  72.                         {
  73.                                 if(
  74.                                          ((mima2[0]==mima[0])
  75.                                         &&(mima2[1]==mima[1])
  76.                                         &&(mima2[2]==mima[2])
  77.                                         &&(mima2[3]==mima[3])
  78.                                         &&(mima2[4]==mima[4])
  79.                                         &&(mima2[5]==mima[5]))
  80.                                         ||((mima2[0]==mima3[0])
  81.                                         &&(mima2[1]==mima3[1])
  82.                                         &&(mima2[2]==mima3[2])
  83.                                         &&(mima2[3]==mima3[3])
  84.                                         &&(mima2[4]==mima3[4])
  85.                                         &&(mima2[5]==mima3[5]))
  86.                                         ||((mima2[0]==mima4[0])
  87.                                         &&(mima2[1]==mima4[1])
  88.                                         &&(mima2[2]==mima4[2])
  89.                                         &&(mima2[3]==mima4[3])
  90.                                         &&(mima2[4]==mima4[4])
  91.                                         &&(mima2[5]==mima4[5]))
  92.                                         )
  93.                                         {
  94.                                                 LCDWrite_String(4, 1, 6, " Kai!");
  95.                                                 BZ();
  96.                                                 LCDWrite_String(4, 1, 6, "      ");
  97.                                         }
  98.                                 else
  99.                                 {
  100.                                        
  101.                                         LCDWrite_String(4, 1, 6, "Cuowu!");
  102.                                         BZ2();
  103.                                         cuowu++;
  104.                                         if(cuowu>=3)
  105.                                         {
  106.                                                 state=1;
  107.                                                 cuowu=0;
  108.                                                 ET0 = 1;TR0 = 1;                 //打开定时器0中断//启动定时器0  
  109.                                         }
  110.                                         LCDWrite_String(4, 1, 6, "      ");
  111.                                 }

  112.                                 for(i=0;i<6;i++)
  113.                                 {
  114.                                         mima2[i]=0;        
  115.                                 }
  116.                                 i=0;        
  117.                         }
  118.                         
  119.                                 if(KeyValue==14)
  120.                         {
  121.                                 LCDWrite_String(4, 1, 6, "      ");
  122.                                 for(i=0;i<6;i++)
  123.                                 {
  124.                                         mima2[i]=0;        
  125.                                 }
  126.                                 i=0;
  127.                         }        

  128.                         if(KeyValue==13)                //qingling
  129.                         {
  130.                                 LCDWrite_String(4, 1, 6, "      ");
  131.                                 for(i=0;i<6;i++)
  132.                                 {
  133.                                         mima2[i]=0;        
  134.                                 }
  135.                                 i=0;
  136.                         }

  137.                         if(KeyValue==12)                //shemoima
  138.                         {
  139.                                 state=2;
  140.                         }

  141.                         KeyState=0;
  142.                 }
  143.                 }
  144.                 }

  145.                 if(state==1)
  146.                 {
  147.                 LcdWriteCom(0x01);
  148.                 LCDWrite_String(0, 0, 16, "Please wait!... ");
  149.                 while(state==1)
  150.                 {
  151.                         BZ2();
  152.                         LcdWriteCom(0xc4);
  153.                         LcdWriteData('0'+sec/10%10);
  154.                         LcdWriteData('0'+sec%10);
  155.                 }
  156.                 }

  157.                 if(state==3)
  158.                 {
  159.                         LcdWriteCom(0x01);
  160.                         LCDWrite_String(3, 0, 16, "WARRING... ");
  161.         
  162.                         while(state==3);
  163.                 }



  164.                 if(state==2)
  165.                 {
  166.                 LcdWriteCom(0x01);
  167.                 LCDWrite_String(0, 0, 16, "Jiu mima :");
  168.                 while(state==2)
  169.                 {
  170.                 KeyDown();
  171.                 if((KeyState==1))
  172.                 {
  173.                         if((KeyValue<10)&&(i<6))
  174.                         {
  175.                                 LcdWriteCom(0xc4+i);
  176.                                 LcdWriteData('*');
  177.                                 mima2[i]=KeyValue;
  178.                                 i++;
  179.                         }
  180.                

  181.                         if(KeyValue==14)        
  182.                         {
  183.                                 if(i>0)
  184.                                 {
  185.                                         i--;
  186.                                         LcdWriteCom(0xc4+i);
  187.                                         LcdWriteData(' ');
  188.                                 }                                
  189.                         }        

  190.                         if(KeyValue==13)//qingling        
  191.                         {
  192.                                 LCDWrite_String(4, 1, 6, "      ");
  193.                                 for(i=0;i<6;i++)
  194.                                 {
  195.                                         mima2[i]=0;        
  196.                                 }
  197.                                 i=0;
  198.                         }

  199.                         if((i==6)&&(KeyValue==15)) //queding
  200.                         {
  201.                                  if(
  202.                                          ((mima2[0]==mima[0])
  203.                                         &&(mima2[1]==mima[1])
  204.                                         &&(mima2[2]==mima[2])
  205.                                         &&(mima2[3]==mima[3])
  206.                                         &&(mima2[4]==mima[4])
  207.                                         &&(mima2[5]==mima[5]))
  208.                                         ||((mima2[0]==mima3[0])
  209.                                         &&(mima2[1]==mima3[1])
  210.                                         &&(mima2[2]==mima3[2])
  211.                                         &&(mima2[3]==mima3[3])
  212.                                         &&(mima2[4]==mima3[4])
  213.                                         &&(mima2[5]==mima3[5]))
  214.                                         ||((mima2[0]==mima4[0])
  215.                                         &&(mima2[1]==mima4[1])
  216.                                         &&(mima2[2]==mima4[2])
  217.                                         &&(mima2[3]==mima4[3])
  218.                                         &&(mima2[4]==mima4[4])
  219.                                         &&(mima2[5]==mima4[5]))
  220.                                         )
  221.                                         {
  222.                                                 state=3;
  223.                                         }
  224.                                 else
  225.                                 {
  226.                                        
  227.                                         LCDWrite_String(4, 1, 6, "Cuowu!");
  228.                                         BZ2();
  229.                                         state=0;
  230.                                         LCDWrite_String(4, 1, 6, "      ");
  231.                                 }

  232.                                 for(i=0;i<6;i++)
  233.                                 {
  234.                                         mima2[i]=0;        
  235.                                 }
  236.                                 i=0;        
  237.                         }

  238.                         KeyState=0;
  239.                 }
  240.                 }
  241.                 }



  242.                 if(state==3)
  243.                 {
  244.                 LcdWriteCom(0x01);
  245.                 LCDWrite_String(0, 0, 16, "Xin mi ma:");
  246.                 while(state==3)
  247.                 {
  248.                 KeyDown();
  249.                 if((KeyState==1))
  250.                 {
  251.                         if((KeyValue<10)&&(i<6))
  252.                         {
  253.                                 LcdWriteCom(0xc4+i);
  254.                
  255.                                 LcdWriteData('*');
  256.                                 mima2[i]=KeyValue;
  257.                                 i++;
  258.                         }

  259.                                 if(KeyValue==14)        
  260.                         {
  261.                                 if(i>0)
  262.                                 {
  263.                                         i--;
  264.                                         LcdWriteCom(0xc4+i);
  265.                                         LcdWriteData(' ');
  266.                                 }                                
  267.                         }        

  268.                         if(KeyValue==13)                //清零
  269.                         {
  270.                                 LCDWrite_String(4, 1, 6, "      ");
  271.                                 for(i=0;i<6;i++)
  272.                                 {
  273.                                         mima2[i]=0;        
  274.                                 }
  275.                                 i=0;
  276.                         }

  277.                         if((i==6)&&(KeyValue==15))
  278.                         {
  279.                                 for(i=0;i<6;i++)
  280.                                 {
  281.                                         mima[i]=mima2[i];        
  282.                                 }
  283.                                 i=0;
  284.                                 state=0;

  285.                                 for(i=0;i<6;i++)
  286.                                 {
  287.                                         mima2[i]=0;        
  288.                                 }
  289.                                 i=0;        
  290.                         }

  291.                         KeyState=0;
  292.                 }
  293.                 }
  294.                 }


  295.         }                                
  296. }


  297. void KeyDown(void)
  298. {
  299.         unsigned int a=0;
  300.         KEY=0x0f;
  301.         if(KEY!=0x0f)
  302.   {
  303.                 Delay10ms(1);
  304.                 a++;        
  305.                 a=0;
  306.                 if(KEY!=0x0f)
  307.                 {
  308.                         KeyState=1;//有按键按下
  309.                         //测试列
  310.                         KEY=0X0F;
  311.                         switch(KEY)
  312.                         {
  313.                                 case(0X07):        KeyValue=0;break;
  314.                                 case(0X0b):        KeyValue=1;break;
  315.                                 case(0X0d): KeyValue=2;break;
  316.                                 case(0X0e):        KeyValue=3;break;

  317.                         }
  318.                         //测试行
  319.                         KEY=0XF0;
  320. ……………………

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

所有资料51hei提供下载:
电子密码锁.zip (3.13 MB, 下载次数: 81)


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

使用道具 举报

沙发
ID:522346 发表于 2019-5-1 19:52 | 只看该作者
请问一下,还需要修改密码方式为串口通信的话,要怎么修改呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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