找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2008|回復(fù): 0
收起左側(cè)

基于51單片機(jī)的密碼鎖程序分享

[復(fù)制鏈接]
ID:965495 發(fā)表于 2021-9-12 14:49 | 顯示全部樓層 |閱讀模式
經(jīng)過(guò)本次設(shè)計(jì),使學(xué)習(xí)者不僅更加深刻領(lǐng)會(huì)微型計(jì)算機(jī)從硬件組成到軟件編程的基本原理和知識(shí),而且更要學(xué)會(huì)應(yīng)用,務(wù)必做到理論和實(shí)踐相結(jié)合,掌握硬件分析、軟件設(shè)計(jì)的基本思想和方法,提高分析問(wèn)題、解決問(wèn)題和工程實(shí)踐的能力。

程序功能:
                  1、開(kāi)鎖:
                  下載程序后,直接按六次S6(即代表數(shù)字0),8位LED亮,鎖被打開(kāi),輸入密碼時(shí),
                  六位數(shù)碼管依次顯示小橫杠。
                  2、更改密碼:
                  只有當(dāng)開(kāi)鎖(LED亮)后,該功能方可使用。
                  首先按下更改密碼鍵S16,然后設(shè)置相應(yīng)密碼,此時(shí)六位數(shù)碼管會(huì)顯示設(shè)置密碼對(duì)應(yīng)
                  的數(shù)字。最后設(shè)置完六位后,按下S17確認(rèn)密碼更改,此后新密碼即生效。
                  3、重試密碼:
                  當(dāng)輸入密碼時(shí),密碼輸錯(cuò)后按下鍵S18,可重新輸入六位密碼。
                  當(dāng)設(shè)置密碼時(shí),設(shè)置中途想更改密碼,也可按下此鍵重新設(shè)置。
                  4、關(guān)閉密碼鎖:
                  按下S19即可將打開(kāi)的密碼鎖關(guān)閉。
單片機(jī)源程序如下:
  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; //送入數(shù)碼管顯示的變量
  7. uchar wei,key,temp;

  8. bit allow,genggai,ok,wanbi,retry,close;         //各個(gè)狀態(tài)位

  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.          }
復(fù)制代碼




回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表