欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機密碼鎖程序與電路圖

[復制鏈接]
跳轉到指定樓層
樓主

功能描述,開機無顯示。
按下除號,開始輸入密碼,顯示短線,初始密碼為0000。
輸入完后,按下on/c鍵,確定。正確顯示open,錯誤顯示err。
=鍵為取消鍵,輸入密碼過程中,按下取消鍵,數碼管全亮1s,然后滅掉。恢復初始狀態。
按下乘號,設置密碼,此時數碼管顯示短線。
輸入正確密碼后,進入更改密碼狀態,顯示全F。
輸入更改后密碼,按下on/C鍵,確認。
PS:1輸入任意時刻,都可按等號返回初始狀態。2輸入時,數字會相應的顯示。

通過Protues仿真,電路圖為protues輸出的。

單片機源程序如下:
  1. #include <reg52.h>
  2. #define uint8 unsigned char
  3. #define uint16 unsigned int

  4. //數碼管編碼。
  5. uint8 code SEG7LED[26] = {0x3f,0x06,0x5b,0X4F,
  6.                                                   0x66,0x6D,0x7D,0x07,
  7.                                                   0x7F,0x6F,0x77,0x7C,
  8.                                                   0x39,0x5E,0x79,0x71,
  9.                                                   0x00,0x40,0xff,      
  10.                                                   0x3f,0x73,0x79,0x37, //open
  11.                                                   0x79,0x77,0x77};                //err
  12. //變量聲明
  13. uint8 Ge,Shi,Bai,Qian;//數碼管各個位
  14. uint8 WeiNum=1;
  15. uint8 code P1Pin[9] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
  16. uint8 state=0;//記錄密碼鎖狀態,0為待機狀態,1為輸入密碼,2,3為設置密碼
  17. uint8 InputNum=1;//記錄輸入密碼時,目前密碼的位數。
  18. uint8 InPassWord[4];
  19. uint8 PassWord[4]={0,0,0,0};
  20. //函數聲明
  21. void initTimer0();
  22. void display(uint8 WeiNum);
  23. uint8 keyscan();
  24. void delayms(uint16 Xms);
  25. void password(uint8 key);
  26. uint8 Compare(uint8 InPassWord[4]);

  27. void main()
  28. {
  29.         uint8 key;
  30.         initTimer0();
  31.         while(1)
  32.         {
  33.                 key = keyscan();
  34.                 password(key);
  35.         }
  36. }

  37. void initTimer0()
  38. {
  39.         EA = 1;
  40.         ET0 = 1;
  41.         TMOD = 0X01;
  42.         TH0 = (65535-5000)/256;
  43.         TL0 = (65535-5000)%256;
  44.         TR0 = 1;
  45. }

  46. void Timer0() interrupt 1
  47. {
  48.         TH0 = (65535-5000)/256;
  49.         TL0 = (65535-5000)%256;
  50. display(WeiNum);
  51.         WeiNum ++;
  52.         if(WeiNum==5)
  53.                 WeiNum = 1;
  54. }

  55. void display(uint8 WeiNum)
  56. {
  57.         switch(WeiNum)
  58.         {
  59.                 case 1:
  60.                 {
  61.                         P2 = 0xff;
  62.                         P0 = SEG7LED[Qian];
  63.                         P2 = 0xfe;
  64.                         break;
  65.                 }
  66.                 case 2:
  67.                 {
  68.                         P2 = 0xff;
  69.                         P0 = SEG7LED[Bai];
  70.                         P2 = 0xfd;
  71.                         break;
  72.                 }
  73.                 case 3:
  74.                 {
  75.                         P2 = 0xff;
  76.                         P0 = SEG7LED[Shi];
  77.                         P2 = 0xfb;
  78.                         break;
  79.                 }
  80.                 case 4:
  81.                 {

  82.                         P2 = 0xff;
  83.                         P0 = SEG7LED[Ge];
  84.                         P2 = 0xf7;
  85.                         break;
  86.                 }
  87.                 default:
  88.                 {
  89.                         P2 = 0xff;
  90.                         P0 = 0xff;
  91.                         P2 = 0xff;
  92.                         break;
  93.                 }
  94.         }
  95. }

  96. void delayms(uint16 Xms)
  97. {
  98.         uint16 i,j;
  99.         for(i=Xms;i>0;i--)
  100.                 for(j=110;j>0;j--);
  101. }

  102. uint8 keyscan()
  103. {
  104.         uint8 i=0;
  105.         uint8 key8=0xff;
  106.         uint8 key=0xff;
  107.         uint8 Button;
  108.         for(i=0;i<4;i++)
  109.         {
  110.                 P1 = P1Pin[ i];
  111.                 Button = P1;
  112.                 if(Button != P1Pin[ i])
  113.                 {
  114.                         delayms(5);
  115.                         Button = P1;
  116.                         if(Button != P1Pin[ i])
  117.                         {
  118.                                 key8 = Button;
  119.                         }
  120.                         while(Button != P1Pin[ i])
  121.                         {        Button = P1;        }
  122.                 }
  123.         }
  124.         switch(key8)
  125.         {//0~9數字鍵,12確定,14取消,10輸入密碼,11設置密碼。
  126.                 case 0xee:{key = 7;break;}
  127.                 case 0xde:{key = 8;break;}
  128.                 case 0xbe:{key = 9;break;}
  129.                 case 0x7e:{key = 10;break;}
  130.                 case 0xed:{key = 4;break;}
  131.                 case 0xdd:{key = 5;break;}
  132.                 case 0xbd:{key = 6;break;}
  133.                 case 0x7d:{key = 11;break;}
  134. case 0xeb:{key = 1;break;}
  135.                 case 0xdb:{key = 2;break;}
  136.                 case 0xbb:{key = 3;break;}
  137.                 case 0x7b:{key = 15;break;}
  138.                 case 0xe7:{key = 12;break;}
  139.                 case 0xd7:{key = 0;break;}
  140.                 case 0xb7:{key = 14;break;}
  141.                 case 0x77:{key = 16;break;}
  142.                 default:{key = 0xff;break;}
  143.         }
  144.         return key;        
  145. }

  146. void password(uint8 key)
  147. {//0~9數字鍵,12確定,14取消,10輸入密碼,11設置密碼。
  148.         uint8 i;
  149.         if(key!=0xff)
  150.         {
  151.                 switch(state)
  152.                 {
  153.                         case 0:
  154.                         {
  155.                                 if(key == 10)
  156.                                 {
  157.                                         state = 1;
  158.                                         Ge =17;Shi=17;Bai=17;Qian=17;
  159.                                 }
  160.                                 else if(key == 11)
  161.                                 {
  162.                                         state = 2;
  163.                                         Ge =17;Shi=17;Bai=17;Qian=17;
  164.                                 }        
  165.                                 break;
  166.                         }
  167.                         case 1:
  168.                         {
  169.                                 if(key>=0 && key <= 9)
  170.                                 {
  171.                                         switch(InputNum)
  172.                                         {
  173.                                                 case 1:
  174.                                                         Ge = key;InPassWord[0]=key;
  175.                                                         break;
  176.                                                 case 2:
  177.                                                         Shi = key;InPassWord[1]=key;
  178.                                                         break;
  179.                                                 case 3:
  180.                                                         Bai = key;InPassWord[2]=key;
  181.                                                         break;
  182.                                                 case 4:
  183.                                                         Qian =key;InPassWord[3]=key;
  184.                                                         break;
  185.                                                 default:
  186.                                                         break;
  187.                                         }
  188.                                         if(InputNum<5)
  189.                                                 InputNum++;
  190.                                 }
  191.                                 else if(key == 12)
  192.                                 {
  193.                                         if(Compare(InPassWord))
  194.                                         {        
  195.                                                 Ge =22;Shi=21;Bai=20;Qian=19;
  196.                                                 for(i=0;i<4;i++)
  197.                                                         InPassWord[ i] = 0xff;
  198.                                         }//open
  199.                                         else
  200.                                         {        Ge =16;Shi=25;Bai=24;Qian=23;}//err
  201.                                         delayms(1000);
  202.                                         InputNum =1;
  203.                                         state = 0;
  204.                                 }
  205.                                 else if(key == 14)
  206.                                 {
  207.                                         Ge =18;Shi=18;Bai=18;Qian=18;//全亮
  208.                                         delayms(1000);
  209.                                         state = 0;
  210.                                         InputNum =1;
  211.                                 }
  212.                                 break;
  213.                         }
  214.                         case 2:
  215.                         {
  216.                                 if(key>=0 && key <= 9)
  217.                                 {
  218.                                         switch(InputNum)
  219.                                         {
  220.                                                 case 1:
  221. Ge = key;InPassWord[0]=key;
  222.                                                         break;
  223.                                                 case 2:
  224.                                                         Shi = key;InPassWord[1]=key;
  225.                                                         break;
  226.                                                 case 3:
  227.                                                         Bai = key;InPassWord[2]=key;
  228.                                                         break;
  229.                                                 case 4:
  230.                                                         Qian =key;InPassWord[3]=key;
  231.                                                         break;
  232.                                                 default:
  233.                                                         break;
  234.                                         }
  235.                                         if(InputNum<5)
  236.                                                 InputNum++;
  237.                                 }
  238.                                 else if(key == 12)
  239.                                 {
  240.                                         if(Compare(InPassWord))
  241.                                         {        Ge =15;Shi=15;Bai=15;Qian=15;
  242.                                                 for(i=0;i<4;i++)
  243.                                                         InPassWord[ i] = 0xff;
  244.                                                 state =3;
  245.                                         }//ffff
  246.                                         else
  247.                                         {        Ge =16;Shi=25;Bai=24;Qian=23;
  248.                                                 state =0;
  249.                                         }//err
  250.                                         delayms(1000);
  251.                                         InputNum =1;
  252.                                 }
  253.                                 else if(key == 14)
  254.                                 {
  255.                                         Ge =18;Shi=18;Bai=18;Qian=18;//全亮
  256.                                         delayms(1000);
  257.                                         state = 0;
  258.                                         InputNum =1;
  259.                                 }
  260.                                 break;
  261.                         }
  262.                         case 3:
  263.                         {
  264.                                 if(key>=0 && key <= 9)
  265.                                 {
  266.                                         switch(InputNum)
  267.                                         {
  268.                                                 case 1:
  269.                                                         Ge = key;PassWord[0]=key;
  270.                                                         break;
  271.                                                 case 2:
  272.                                                         Shi = key;PassWord[1]=key;
  273.                                                         break;
  274.                                                 case 3:
  275.                                                         Bai = key;PassWord[2]=key;
  276.                                                         break;
  277.                                                 case 4:
  278.                                                         Qian =key;PassWord[3]=key;
  279.                                                         break;
  280.                                                 default:
  281.                                                         break;
  282.                                         }
  283.                                         if(InputNum<5)
  284.                                                 InputNum++;
  285.                                 }
  286.                                 else if(key == 12)
  287.                                 {
  288.                                         Ge =16;Shi=16;Bai=16;Qian=16;
  289.                                         delayms(250);
  290.                                         Ge =17;Shi=17;Bai=17;Qian=17;
  291.                                         delayms(250);
  292.                                         Ge =16;Shi=16;Bai=16;Qian=16;
  293.                                         delayms(250);
  294.                                         Ge =17;Shi=17;Bai=17;Qian=17;
  295.                                         state = 0;
  296.                                         InputNum =1;
  297.                                 }
  298.                                 else if(key ==14)
  299.                                 {
  300.                                         Ge =18;Shi=18;Bai=18;Qian=18;//全亮
  301.                                         delayms(1000);
  302.                                         for(i=0;i<4;i++)
  303.                                                         PassWord[ i] = InPassWord[ i];
  304.                                         state = 0;
  305.                                         InputNum =1;
  306.                                 }
  307.                         }
  308.                 }
  309. }
  310.         else//如果沒有按鍵按下
  311.         {
  312.                 if(state == 0)
  313.                 {
  314.                         Ge =16;Shi=16;Bai=16;Qian=16;//不顯示
  315.                 }
  316.         }
  317. }
  318. uint8 Compare(uint8 InPassWord[4])
  319. {
  320.         uint8 i;
  321.         uint8 out=1;
  322.         for (i=0;i<4;i++)
  323.                 if(InPassWord[ i]==PassWord[ i])
  324.                         out = out & 1;
  325.                 else
  326.                         out = 0;
  327.         return out;
  328. }
復制代碼

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:941414 發表于 2021-6-24 01:30 | 只看該作者
請問定時器的作用是什么啊

回復

使用道具 舉報

板凳
ID:941414 發表于 2021-6-24 01:30 | 只看該作者
請問定時器的作用是什么啊
回復

使用道具 舉報

地板
ID:1016382 發表于 2022-4-7 11:07 來自觸屏版 | 只看該作者
飛灑分 發表于 2021-6-24 01:30
請問定時器的作用是什么啊

定時器是用做設定時間用的,一共有五個定時器
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表