久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2195|回復: 0
打印 上一主題 下一主題
收起左側

51單片機實行的密碼鎖程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:119047 發表于 2016-5-7 16:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg52.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uchar old1,old2,old3,old4,old5,old6; //原始密碼000000
  5. uchar new1,new2,new3,new4,new5,new6;  //每次MCU采集到的密碼輸入
  6. uchar a=16,b=16,c=16,d=16,e=16,f=16; //送入數碼管顯示的變量
  7. uchar wei,key,temp;

  8. bit allow,genggai,ok,wanbi,retry,close;         //各個狀態位

  9. sbit dula=P2^6;
  10. sbit wela=P2^7;
  11. sbit beep=P2^3;

  12. unsigned char code table[]=
  13. {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
  14. 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};

  15. void delay(unsigned char i)
  16. {
  17.         uchar j,k;
  18.   for(j=i;j>0;j--)
  19.     for(k=125;k>0;k--);
  20. }

  21. void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
  22. {
  23.    dula=0;
  24.    P0=table[a];
  25.    dula=1;
  26.    dula=0;

  27.    wela=0;
  28.    P0=0xfe;
  29.    wela=1;
  30.    wela=0;
  31.    delay(5);

  32.    P0=table[b];
  33.    dula=1;
  34.    dula=0;

  35.    P0=0xfd;
  36.    wela=1;
  37.    wela=0;
  38.    delay(5);

  39.    P0=table[c];
  40.    dula=1;
  41.    dula=0;

  42.    P0=0xfb;
  43.    wela=1;
  44.    wela=0;
  45.    delay(5);

  46.    P0=table[d];
  47.    dula=1;
  48.    dula=0;

  49.    P0=0xf7;
  50.    wela=1;
  51.    wela=0;
  52.    delay(5);

  53.    P0=table[e];
  54.    dula=1;
  55.    dula=0;

  56.    P0=0xef;
  57.    wela=1;
  58.    wela=0;
  59.    delay(5);

  60.    P0=table[f];
  61.    dula=1;
  62.    dula=0;

  63.    P0=0xdf;
  64.    wela=1;
  65.    wela=0;
  66.    delay(5);
  67. }


  68. void keyscan()
  69. {
  70.   {        
  71.     P3=0xfe;
  72.     temp=P3;
  73.     temp=temp&0xf0;
  74.     if(temp!=0xf0)
  75.     {
  76.       delay(10);
  77.       if(temp!=0xf0)
  78.       {        
  79.         temp=P3;
  80.         switch(temp)
  81.         {
  82.           case 0xee:
  83.                key=0;
  84.                            wei++;
  85.                break;

  86.           case 0xde:
  87.                key=1;
  88.                            wei++;
  89.                break;

  90.           case 0xbe:
  91.                key=2;
  92.                            wei++;
  93.                break;

  94.           case 0x7e:
  95.                key=3;
  96.                            wei++;
  97.                break;
  98.          }
  99.          while(temp!=0xf0)
  100.         {
  101.            temp=P3;
  102.            temp=temp&0xf0;
  103.            beep=0;
  104.          }
  105.          beep=1;
  106.       }
  107.     }
  108.     P3=0xfd;
  109.     temp=P3;
  110.     temp=temp&0xf0;
  111.     if(temp!=0xf0)
  112.     {
  113.       delay(10);
  114.       if(temp!=0xf0)
  115.       {
  116.         temp=P3;
  117.         switch(temp)
  118.         {
  119.           case 0xed:
  120.                key=4;
  121.                            wei++;
  122.                break;

  123.           case 0xdd:
  124.                key=5;
  125.                            wei++;
  126.                break;

  127.           case 0xbd:
  128.                key=6;
  129.                            wei++;
  130.                break;

  131.           case 0x7d:
  132.                key=7;
  133.                            wei++;
  134.                break;
  135.          }
  136.          while(temp!=0xf0)
  137.          {
  138.            temp=P3;
  139.            temp=temp&0xf0;
  140.            beep=0;
  141.          }
  142.          beep=1;
  143.       }
  144.       }
  145.     P3=0xfb;
  146.     temp=P3;
  147.     temp=temp&0xf0;
  148.     if(temp!=0xf0)
  149.     {
  150.       delay(10);
  151.       if(temp!=0xf0)
  152.       {
  153.         temp=P3;
  154.         switch(temp)
  155.         {
  156.           case 0xeb:
  157.                key=8;
  158.                            wei++;
  159.                break;

  160.           case 0xdb:
  161.                key=9;
  162.                            wei++;
  163.                break;
  164.                            
  165.           case 0xbb:
  166.                genggai=1;
  167.                            wei=0;
  168.                break;

  169.           case 0x7b:
  170.                              if(allow)
  171.                ok=1;
  172.                break;
  173.          }
  174.         while(temp!=0xf0)
  175.          {
  176.            temp=P3;
  177.            temp=temp&0xf0;
  178.            beep=0;
  179.          }
  180.          beep=1;
  181.       }
  182.       }
  183.           P3=0xf7;
  184.     temp=P3;
  185.     temp=temp&0xf0;
  186.     if(temp!=0xf0)
  187.     {
  188.       delay(10);
  189.       if(temp!=0xf0)
  190.       {
  191.         temp=P3;
  192.         switch(temp)
  193.         {
  194.           case 0xe7:
  195.                              retry=1;
  196.                break;

  197.           case 0xd7:
  198.                              close=1;
  199.                break;
  200.          }
  201.         while(temp!=0xf0)
  202.          {
  203.            temp=P3;
  204.            temp=temp&0xf0;
  205.            beep=0;
  206.          }
  207.          beep=1;
  208.       }
  209.       }
  210. }
  211. }

  212. void shumima()                //對按鍵采集來的數據進行分配
  213. {
  214.         if(!wanbi)
  215.         {
  216.         switch(wei)
  217.         {
  218.                 case 1:new1=key;
  219.                             if(!allow)        a=17;
  220.                            else a=key;        break;
  221.                 case 2:new2=key;
  222.                                 if(a==17) b=17;
  223.                                 else b=key;        break;
  224.                 case 3:new3=key;
  225.                                 if(a==17) c=17;
  226.                                 else c=key;        break;
  227.                 case 4:new4=key;
  228.                                 if(a==17) d=17;
  229.                                 else d=key;        break;
  230.                 case 5:new5=key;
  231.                                 if(a==17) e=17;
  232.                                 else e=key;        break;
  233.                 case 6:new6=key;
  234.                                 if(a==17) f=17;
  235.                                 else f=key;
  236.                                 wanbi=1;        break;
  237.         }
  238.         }
  239. }

  240. void yanzheng()          //驗證密碼是否正確
  241. {
  242.         if(wanbi)         //只有當六位密碼均輸入完畢后方進行驗證
  243.         {
  244.         if((new1==old1)&(new2==old2)&(new3==old3)&(new4==old4)&(new5==old5)&(new6==old6))
  245.                 allow=1;        //當輸入的密碼正確,會得到allowe置一
  246.         }
  247. }

  248. void main()
  249. {
  250.         while(1)
  251.         {
  252.                 keyscan();
  253.                 shumima();
  254.                 yanzheng();
  255.                 if(allow)         //驗證完后,若allow為1,則開鎖
  256.                 {
  257.                         P1=0x00;
  258.                         if(!genggai)
  259.                                 wanbi=0;
  260.                 }
  261.                 if(genggai)          //當S16更改密碼鍵被按下,genggai會被置一
  262.                 {
  263.                         if(allow)         //若已經把鎖打開,才有更改密碼的權限
  264.                         {
  265.                                 while(!wanbi)        //當新的六位密碼沒有設定完,則一直在這里循環
  266.                                 {
  267.                                          keyscan();
  268.                                         shumima();
  269.                                         if(retry|close)         //而當探測到重試鍵S18或者關閉密碼鎖鍵S19被按下時,則跳出
  270.                                         {        wanbi=1;
  271.                                                 break;
  272.                                         }
  273.                                         display(a,b,c,d,e,f);
  274.                                 }
  275.                         }
  276.                 }
  277.                 if(ok)          //更改密碼時,當所有六位新密碼均被按下時,可以按下此鍵,結束密碼更改
  278.                 {                  //其他時間按下此鍵無效
  279.                         ok=0; wei=0;
  280.                         genggai=0;
  281.                         old1=new1;old2=new2;old3=new3; //此時,舊的密碼將被代替
  282.                         old4=new4;old5=new5;old6=new6;
  283.                         a=16;b=16;c=16;d=16;e=16;f=16;
  284.                 }
  285.                 if(retry)        //當重試按鍵S18被按下,retry會被置位
  286.                 {
  287.                 retry=0; wei=0;wanbi=0;
  288.                 a=16;b=16;c=16;d=16;e=16;f=16;
  289.                 new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;               
  290.                 }
  291.                 if(close)  //當關閉密碼鎖按鍵被按下,close會被置位
  292.                 {
  293.                         close=0;genggai=0;//所有變量均被清零。
  294.                         wei=0;        wanbi=0;
  295.                         allow=0;
  296.                         P1=0xff;
  297.                         a=16;b=16;c=16;d=16;e=16;f=16;
  298.                         new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
  299.                 }
  300.                 display(a,b,c,d,e,f); //實時顯示
  301.         }
  302. }

復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频一区二区三区 | 天天看天天操 | 日韩欧美视频 | 精产国产伦理一二三区 | 亚洲美女视频 | 国产高清精品一区二区三区 | 亚洲综合电影 | 有码在线| 一区二区三区视频免费看 | 黄色视频a级毛片 | 岛国av免费在线观看 | 日韩av第一页 | 亚洲欧美日韩在线 | 成人福利网 | 99爱在线免费观看 | 91久久久久久久久 | 99国内精品 | eeuss国产一区二区三区四区 | 久久久久国产一区二区三区四区 | 一区二区在线 | 日本不卡在线观看 | 国产精品久久久久久亚洲调教 | 视频在线一区二区 | 国产成人精品a视频 | 欧美亚州综合 | 午夜精品久久久久久久久久久久久 | 国产永久免费 | 亚洲精品一区二区三区蜜桃久 | 久久激情视频 | 色综合一区二区三区 | 亚洲在线一区 | 国产精品久久久久久久久免费丝袜 | 国产成人一区二 | 91精品国产综合久久精品 | 亚洲午夜视频 | av一级一片 | 久草在线影 | 国产精品美女久久久久久免费 | 国产精品美女在线观看 | 亚洲视频 欧美视频 | 久久免费观看一级毛片 |