找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机电子密码锁1602液晶显示Proteus仿真程序资料

[复制链接]
跳转到指定楼层
楼主
   电子密码锁的主要功能。
(1)共8位密码,每位的取值范围为1~8。
(2)用户可以自行设定和修改密码。
(3)按每个密码键时都有声、光提示。
(4)若键入的8位开锁密码不完全正确,则报警5秒钟,以提醒他人注意。
(5)开锁密码错3次要报警10分钟,报警期间输入密码无效,以防窃贼多次试探密码。
(6)键入的8位开锁密码完全正确才能开锁,开锁时要有1秒的提示音。
(7)密码键盘上只允许有8个密码按键和1个发光管。锁内有备用电池,只有内部上电复位时才能设置或修改密码,因此,仅在门外按键是不能修改或设置密码的。
(8)密码设定完毕后要有2秒的提示音。



单片机源程序如下:
  1. #include"at89x51.h"
  2. #include"key.h"
  3. #include"lcd.h"
  4. uchar code show_0[]="Please input the password:";
  5. uchar code show_1[]="The cipher is:" ;
  6. uchar code show_2[]="********";
  7. uchar code show_3[]="The password is wrong!";
  8. uchar code show_4[]="This is the last time,";
  9. uchar code show_5[]="Please try it tomorrow!";
  10. uchar code show_6[]="you are right!";
  11. uchar code show_7[]="Please input the new cipher:";
  12. uchar code show_8[]="Input it again!";
  13. uchar code show_9[]="Establishes successful! ";
  14. uchar code show_10[]="(^_^)";
  15. uchar  init_pswd[]={8,8,8,8,8,8,8,8};
  16. uchar  pswd[8]={0};
  17. uchar  pswd_1[8]={0};
  18. void play(uchar *j,uchar k)          //K是显示的个数,j是地址
  19. {
  20.    uchar  i;
  21.    for(i=0;i<k;i++)
  22.    {
  23.     dat_w(*(j+i));
  24.         delay(20);
  25.    }
  26. }
  27. main()
  28. {
  29.   uchar j=0,i=0,sum_1=0;
  30.   loop:init();
  31.   clear();
  32.   gotoxy(1,0);
  33.   play(show_0,16);
  34.   gotoxy(2,0);
  35.   play(show_0+17,10);
  36.   /****密码输入****/
  37.   do
  38.   {
  39.     key();
  40.   }
  41.   while(ki!=15);
  42.   clear();
  43.   gotoxy(1,0);
  44.   play(show_1,15);
  45.   do
  46.   {
  47.     flag=0;
  48.     key();
  49.         gotoxy(2,0);
  50.         if(flag==1&&ki<=9)
  51.          {
  52.           pswd[i]=ki;
  53.           play(show_2,i);
  54.           i++;
  55.          }
  56.         if(ki==14)        //14则退出.
  57.           break;
  58.    }        
  59.    while(i<=8);
  60.    for(i=0;i<=7;i++)
  61.    {
  62.      sum_1=init_pswd[i]-pswd[i]+sum_1;
  63.      if(sum_1!=0)
  64.          {
  65.            clear();
  66.            j++;
  67.            if(j==3)
  68.            {
  69.             clear();
  70.             gotoxy(1,0);
  71.             play(show_4,16);
  72.                 gotoxy(2,0);
  73.                 play(show_4+16,14);
  74.                 delay(500);
  75.                 delay(500);
  76.                 clear();
  77.                 gotoxy(1,0);
  78.                 play(show_5+7,16);
  79.                 gotoxy(2,5);
  80.                 play(show_10,5);
  81.             while(1);   //三次输入密码失败,自锁
  82.            }
  83.            gotoxy(1,0);
  84.            play(show_3,16);
  85.            gotoxy(2,5);
  86.            play(show_3+15,7);
  87.            delay(500);
  88.            clear();
  89.            gotoxy(1,0);
  90.            play(show_8,15);
  91.            goto loop;
  92.           }
  93.           if(sum_1==0)
  94.           {
  95.            
  96.            clear();
  97.            gotoxy(1,0);
  98.            play(show_6,15);
  99.            do
  100.            {
  101.            key();
  102.            }
  103.            while(ki!=13);
  104.            loop1:clear();
  105.            gotoxy(1,0);
  106.            play(show_7,13);
  107.            gotoxy(2,0);
  108.            play(show_7+13,15);
  109.            /****第一次输密码***/
  110.            i=0;
  111.             do
  112.             {
  113.                   flag=0;
  114.           key();
  115.                   if(flag==1&&ki<=9)
  116.               {
  117.                pswd[i]=ki;
  118.                    i++;
  119.                    clear();
  120.                    gotoxy(1,0);
  121.                    play(show_2,i);
  122.                    }
  123.                     }while(i<=7);
  124.                  clear();
  125.                  gotoxy(1,0);
  126.              play(show_8,15);
  127.            /***第二次输密码****/
  128.                  i=0;
  129.                  sum_1=0;
  130.             do
  131.             {
  132.                   flag=0;
  133.           key();
  134.                   if(flag==1&&ki<=9)
  135.               {
  136.                pswd_1[i]=ki;
  137.                    i++;
  138.                    clear();
  139.                    gotoxy(1,0);
  140.                    play(show_2,i);
  141.                    }
  142.                     }
  143.                  while(i<=7);
  144.                  for(i=0;i<=7;i++)
  145.                   {
  146.                    sum_1=sum_1+ pswd_1[i]-pswd[i];
  147.                    }
  148.                  if(sum_1==0)
  149.                    {
  150.                     clear();
  151.                            gotoxy(1,2);
  152.                         play(show_9,12);
  153.                         gotoxy(2,2);
  154.                         play(show_9+13,11);
  155.                         for(i=0;i<=7;i++)
  156.                         {
  157.                         init_pswd[i]=pswd[1];
  158.                          }
  159.                         while(1);
  160.                    }
  161.                  if(sum_1!=0)
  162.                    {
  163.                      clear();
  164.                      goto loop1;
  165.                    }
  166.           }         
  167.     }
  168.            
  169.          
  170. }  
复制代码


全部资料51hei下载地址:
电子密码锁1602液晶显示资料.rar (366.88 KB, 下载次数: 82)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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