找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1306|回复: 0
收起左侧

基于51单片机的密码锁程序分享

[复制链接]
ID:965495 发表于 2021-9-12 14:49 | 显示全部楼层 |阅读模式
经过本次设计,使学习者不仅更加深刻领会微型计算机从硬件组成到软件编程的基本原理和知识,而且更要学会应用,务必做到理论和实践相结合,掌握硬件分析、软件设计的基本思想和方法,提高分析问题、解决问题和工程实践的能力。

程序功能:
                  1、开锁:
                  下载程序后,直接按六次S6(即代表数字0),8位LED亮,锁被打开,输入密码时,
                  六位数码管依次显示小横杠。
                  2、更改密码:
                  只有当开锁(LED亮)后,该功能方可使用。
                  首先按下更改密码键S16,然后设置相应密码,此时六位数码管会显示设置密码对应
                  的数字。最后设置完六位后,按下S17确认密码更改,此后新密码即生效。
                  3、重试密码:
                  当输入密码时,密码输错后按下键S18,可重新输入六位密码。
                  当设置密码时,设置中途想更改密码,也可按下此键重新设置。
                  4、关闭密码锁:
                  按下S19即可将打开的密码锁关闭。
单片机源程序如下:
  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.          }
复制代码




回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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