找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机的电子密码锁设计

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char  
  4. #define uint unsigned int        
  5. uchar code number[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  6. uchar code start[4]={0xbf,0x8e,0x8e,0xbf};               
  7. uchar code initial[4]={0xc0,0xc0,0xc0,0xc0};
  8. uchar code bell[4]={0x83,0x84,0xc7,0xc7};        
  9. uchar code open[4]={0xc0,0x8c,0x86,0xc8};               
  10. uchar code no[4]={0xbf,0xc8,0xc0,0xbf};               
  11. uchar mima[4]={0xc0,0xc0,0xc0,0xc0};                                
  12. uchar    W[4]={0x0c,0xff,0xff,0xff};
  13. uchar code p[4]={0xbf,0xbf,0xbf,0xbf};
  14. uchar code o[4]={0x90,0xa3,0xa3,0xa1};
  15. uint i=0,error=0,k=0,wc=4;        
  16. sbit H1=P3^0;                                                                                                   
  17. sbit H2=P3^1;
  18. sbit H3=P3^2;
  19. sbit H4=P3^3;
  20. sbit S1=P2^3;
  21. sbit S2=P2^2;
  22. sbit S3=P2^1;
  23. sbit S4=P2^0;
  24. sbit pl=P3^7;
  25. void delayMS(uint x)
  26. {
  27.         uchar n;
  28.         while(x--)
  29.         {
  30.                 for(n=120;n>0;n--);
  31.         }
  32. }
  33. void display()               
  34. {
  35.         P2=0x8f;                        
  36.         P0=W[0];
  37.         delayMS(4);
  38.         P2=0x4f;                        
  39.         P0=W[1];
  40.         delayMS(4);
  41.         P2=0x2f;                        
  42.         P0=W[2];
  43.         delayMS(4);
  44.         P2=0x1f;                        
  45.         P0=W[3];
  46.         delayMS(4);
  47.         P0=0xff;
  48. }
  49. void voice()                        
  50. {
  51.         uchar i=0;
  52.         while(i++<=50)
  53.         {
  54.                 delayMS(1);
  55.                 if(i%3)
  56.                         pl = ~pl;
  57.         }
  58.         pl = 0;
  59. }
  60. uint collect()               
  61. {
  62.         uint a=0;
  63.         H1=H2=H3=H4=0;
  64.         S1=S2=S3=S4=1;
  65.         if(S1==0)
  66.         {
  67.                 delayMS(10);
  68.                 if(S1==0)
  69.                 {
  70.                         S1=0;
  71.                         H1=H2=H3=H4=1;
  72.                         if(H1==0)
  73.                         {
  74.                                 while(!H1);
  75.                                 a=1;                                
  76.                         }
  77.                         else if(H2==0)
  78.                         {
  79.                                 while(!H2);
  80.                                 a=5;                                 
  81.                         }
  82.                         else if(H3==0)
  83.                         {
  84.                                 while(!H3);
  85.                                         a=9;                                          
  86.                         }
  87.                         else if(H4==0)
  88.                         {
  89.                                 while(!H4);
  90.                                 a=13;                  
  91.                         }        
  92.                 }                        
  93.         }
  94.         else if(S2==0)
  95.         {
  96.                 delayMS(10);
  97.                 if(S2==0)
  98.                 {
  99.                         S2=0;
  100.                         H1=H2=H3=H4=1;
  101.                         if(H1==0)
  102.                         {
  103.                                 while(!H1);
  104.                                 a=2;                                       
  105.                         }
  106.                         else if(H2==0)
  107.                         {
  108.                                 while(!H2);
  109.                                 a=6;                                       
  110.                         }
  111.                         else if(H3==0)
  112.                         {
  113.                                 while(!H3);
  114.                                 a=10;                                       
  115.                         }               
  116.                 }        
  117.         }
  118.         else if(S3==0)
  119.         {
  120.                 delayMS(10);
  121.                 if(S3==0)
  122.                 {
  123.                         S3=0;
  124.                         H1=H2=H3=H4=1;
  125.                         if(H1==0)
  126.                         {
  127.                                 while(!H1);
  128.                                 a=3;                                       
  129.                         }
  130.                         else if(H2==0)
  131.                         {
  132.                                 while(!H2);
  133.                                 a=7;                                       
  134.                         }
  135.                         else if(H3==0)
  136.                         {
  137.                                 while(!H3);
  138.                                 a=11;                                       
  139.                         }        
  140.                 }        
  141.         }
  142.         else if(S4==0)
  143.         {
  144.                 delayMS(10);
  145.                 if(S4==0)
  146.                 {
  147.                         S4=0;
  148.                         H1=H2=H3=H4=1;
  149.                         if(H1==0)
  150.                         {
  151.                                 while(!H1);
  152.                                 a=4;                                       
  153.                         }
  154.                         else if(H2==0)
  155.                         {
  156.                                 while(!H2);
  157.                                 a=8;                                       
  158.                         }
  159.                         else if(H3==0)
  160.                         {
  161.                                 while(!H3);
  162.                                 a=12;                                       
  163.                         }
  164.                         else if(H4==0)
  165.                         {
  166.                                 while(!H4);
  167.                                 a=16;                                       
  168.                         }        
  169.                 }        
  170.         }
  171.         if(a!=0)
  172.                 delayMS(10);
  173.         return a;
  174. }
  175. uchar code SONG_TONE[]=
  176. {
  177.         212,212,190,212,159,169,212,212,190,212,142,
  178.         159,212,212,106,126,129,169,190,119,119,126,159,142,159,0
  179. };
  180. uchar code SONG_LONG[]=
  181. {
  182.         9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0
  183. };
  184. void         PlayMusic()
  185. {
  186.         uint f =0,j,k;
  187.         while(SONG_LONG[f]!=0||SONG_TONE[f]!=0)
  188.         {
  189.                 for(j=0;j<SONG_LONG[f]*20;j++)
  190.                 {
  191.                         pl = ~pl;
  192.                         for(k=0;k<SONG_TONE[f]/3;k++);
  193.                 }
  194.                 delayMS(10);
  195.                 f++;
  196.         }
  197. }        
  198. void main()
  199. {
  200. loop:while(wc--)
  201.                 W[wc]=start[wc];
  202.         wc=4;
  203. loop3:pl=0;
  204.         i=0;
  205.         while(1)
  206.         {        
  207.                 display();
  208.                 k=collect();
  209.                 if(k>=1&&k<=10&&i<4)               
  210.                 {                        
  211.                         W[i++]=number[k-1];               
  212.                 }
  213.                 else if(k==12)                        
  214.                 {        uchar n=0,m=4;
  215.                         while(W[n]==mima[n])
  216.                         {
  217.                                 n++;
  218.                                 if(n==4)
  219.                                 {        
  220.                                         while(m--)
  221.                                                 W[m]=open[m];
  222.                                         P1=0xfd;
  223.                                         PlayMusic();
  224.                                         delayMS(500);
  225.                                         error=0;
  226.                                         goto loop2;
  227.                                 }
  228.                         }
  229.                         while(m--)
  230.                                 W[m]=no[m];
  231.                         error++;
  232.                         goto loop3;
  233.                 }               
  234.                 k=0;
  235.                 while(error==3)
  236.                 {               
  237.                 pl=1;
  238.                         while(1)
  239.                                         {
  240.                                                 while(wc--)
  241.                                                         W[wc]=bell[wc];
  242.                                                 wc=4;
  243.                                                 display();
  244.                                                 k=collect();
  245.                                                 P1=0xfe;
  246.                                         voice();
  247.                              delayMS(100);
  248.                                     P1=0xff;
  249.                                  delayMS(100);
  250.                                                 if(k==16)
  251.                                                         goto loop;        
  252.                                         }
  253.                                          k=0;               

  254.                 }         
  255.         }
  256. loop2:i=0;
  257.         while(1)
  258.         {
  259.                 display();
  260.                 k=collect();
  261.                 if(k==16)
  262.                 {        
  263.                         goto loop;
  264.                  }
  265.                 else if(k==13)
  266.                 { P1=0xfb;
  267.                  {
  268.                    while(wc--)
  269.                                 W[wc]=p[wc];
  270.                         wc=4;
  271.                         i=0;        
  272.             while(1)
  273.         {        
  274.                 display();
  275.                 k=collect();
  276.                 if(k>=1&&k<=10&&i<4)               
  277.                 {                        
  278.                         W[i++]=number[k-1];
  279.                 }
  280.                 else if(k==12)
  281.                 {                        
  282.                         goto loop4;
  283.                         }
  284.                 }               
  285.         loop4:        while(wc--)
  286.                                 W[wc]=p[wc];
  287.                         wc=4;
  288.                         i=0;        
  289.                         while(1)
  290.                         {
  291.                                 display();
  292.                                 k=collect();
  293.                                 if(k>=1&&k<=10&&i<4)        
  294.                                 {                        
  295.                                         W[ i]=number[k-1];        
  296.                                         mima[i++]=number[k-1];        
  297.                                 }
  298.                                 else if(k==12)               
  299.                                 {  P1=0xff;
  300.                                 delayMS(500);
  301.                                 P1=0xfd;
  302.                                 delayMS(500);
  303.                                 P1=0xff;
  304.                                         while(1)
  305.                                         {
  306.                                                 while(wc--)
  307.                                                         W[wc]=o[wc];
  308.                                                 wc=4;
  309.                                                 display();
  310.                                                 k=collect();
  311.                                                 if(k==16)
  312.                                                         goto loop;        
  313.                                         }                                
  314.                                  }
  315.                                  }
  316.                         }               
  317.              }
  318.         }
  319. }
复制代码


图片1.png (2.76 MB, 下载次数: 38)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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