找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机密码锁 LCD12864 源码+仿真

  [复制链接]
跳转到指定楼层
楼主
图片如下

主要是用LCD12864来显示
也是为了帮助大家
单片机源程序如下:
  1. #include<reg51.h>
  2. #include<12864.h>
  3. #include<keypad.h>
  4. #include<24C01.h>

  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. sbit LED1=P1^5;
  8. sbit LED2=P1^6;
  9. sbit INIT=P2^2;
  10. sbit SOUND=P1^7;

  11. uchar idata key[6]={0,0,0,0,0,0};
  12. uchar idata iic[6]={0,1,2,3,4,5};

  13. void press(uchar *s)
  14. {
  15.             uchar dat;
  16. //**************************************************
  17.        P3=0xf0;                                                                //保存第一位密码
  18.            while(P3==0xf0);
  19.        dat=key_scan();
  20.            if((dat!=0x0a)&&(dat!=0x0b))
  21.          {   *s=dat;
  22.                          Left();
  23.                          star_12864(star,0x05,16);
  24.              }
  25.            s++;                  
  26. //**************************************************
  27.            P3=0xf0;                                                          //保存第二位密码
  28.            while(P3==0xf0);                                                
  29.        dat=key_scan();
  30.            if((dat!=0x0a)&&(dat!=0x0b))
  31.          {   *s=dat;
  32.                          Left();
  33.                          star_12864(star,0x05,24);
  34.                   }
  35.            s++;        
  36. //**************************************************
  37.            P3=0xf0;                                                          //保存第三位密码
  38.            while(P3==0xf0);                                                
  39.        dat=key_scan();
  40.            if((dat!=0x0a)&&(dat!=0x0b))
  41.          {   *s=dat;
  42.                          Left();
  43.                          star_12864(star,0x05,32);
  44.                   }
  45.            s++;        
  46. //**************************************************
  47.            P3=0xf0;                                                          //保存第四位密码
  48.            while(P3==0xf0);                                                
  49.            dat=key_scan();
  50.            if((dat!=0x0a)&&(dat!=0x0b))
  51.          {   *s=dat;
  52.                          Left();
  53.                          star_12864(star,0x05,40);
  54.                   }
  55.            s++;        
  56. //**************************************************
  57.            P3=0xf0;                                                          //保存第五位密码
  58.            while(P3==0xf0);                                                
  59.        dat=key_scan();
  60.            if((dat!=0x0a)&&(dat!=0x0b))
  61.          {   *s=dat;
  62.                          Left();
  63.                          star_12864(star,0x05,48);
  64.                   }
  65.            s++;        
  66. //**************************************************
  67.            P3=0xf0;                                                          //保存第六位密码
  68.            while(P3==0xf0);                                                
  69.        dat=key_scan();
  70.            if((dat!=0x0a)&&(dat!=0x0b))
  71.          {   *s=dat;
  72.                          Left();
  73.                          star_12864(star,0x05,56);
  74.                   }
  75. //**************************************************
  76.            do{P3=0xf0;                                                        //键入Enter键盘继续执行下面语句,否则等待
  77.               while(P3==0xf0);                                                
  78.           dat=key_scan();
  79.               }while(dat!=0x0b);
  80. }

  81. void Delay10ms(void)           //延时10ms
  82. {
  83.         uint i,j,k;
  84.         for(i=5;i>0;i--)
  85.         for(j=4;j>0;j--)
  86.         for(k=248;k>0;k--);

  87. }

  88. void main()
  89. {
  90.       uchar dat;
  91.       uchar i=0,j=0,k;
  92.       uchar x;
  93.           LED1=1;
  94.           LED2=1;
  95.           SOUND=0;
  96.           INIT=1;
  97.       if(INIT==0)                   //密码初始化
  98.       {
  99.              x=SendB(iic,0x50,6);
  100.                  Delay10ms();
  101.       }             //首先从IIC器件中读出密码以供下面输入密码进行比较
  102.       x=ReadB(iic,0x50,6);
  103.       Init_12864();
  104.           for(i=0;i<150;i++){Delay10ms();}
  105. //**********************************若密码不正确,循环执行do{}while()********************************************
  106. do{
  107.              LED1=1;
  108.              System();                  //显示:"请输入密码"字幕  
  109.              press(key);
  110.                  if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5])) //密码比较,若密码正确责进入系统,若密码不正确则显示密码错误,重新输入密码
  111.          {
  112.                     true();
  113.                     do
  114.                     {
  115.                        P3=0xf0;                                                        //键入1或2继续执行下面语句,否则等待
  116.                    while(P3==0xf0);                                                
  117.                dat=key_scan();
  118.                  }while(dat!=0x01&&dat!=0x02);
  119.                     if(dat==1)                                                       //开锁
  120.                     {
  121.                         LED1=0;
  122.                                 unlock();
  123.                             for(i=0;i<100;i++){Delay10ms();}
  124.                     continue;
  125.                      }
  126.                     if(dat==2)                                                        //修改密码
  127.                    {
  128.                        do{
  129.                               System();
  130.                                   press(key);
  131.                                   again();
  132.                                   press(iic);
  133.                                       if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5]))
  134.                                       {
  135.                                           succeed();                                //修改密码成功
  136.                                                   for(i=0;i<100;i++){Delay10ms();}
  137.                                       Delay10ms();
  138.                               x=SendB(iic,0x50,6);
  139.                                       Delay10ms();        
  140.                           x=ReadB(iic,0x50,6);break;
  141.                                        }
  142.                                       else                             //修改密码不成功,重新修改
  143.                                           {
  144.                                               repeat();
  145.                                                   for(i=0;i<100;i++){Delay10ms();}
  146.                                            }
  147.                                   }while(1);   
  148.                     }
  149.                  
  150.                  }
  151.                 else                                                                           //密码不正确,重新输入密码
  152.                 {
  153.                     j++;
  154.                         if(j==3)
  155.                         {
  156.                            for(i=0;i<8;i++)
  157.                            {
  158.                               LED2=0;
  159.                                   for(k=0;k<5;k++){Delay10ms();}
  160.                                   LED2=1;
  161.                                   for(k=0;k<5;k++){Delay10ms();}
  162.                                 }
  163.                                 j=0;
  164.                          }
  165.                         error();
  166.                         for(i=0;i<50;i++){Delay10ms();}
  167.                  }
  168. }while(1);         
  169.       
  170.                     
  171.            
  172. }
复制代码



全部资料51hei下载地址:
基于24C02和12864显示的电子密码锁设计.rar (104.89 KB, 下载次数: 237)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:163292 发表于 2021-1-5 08:14 | 只看该作者
不知道 12864是不是带字库
回复

使用道具 举报

板凳
ID:867005 发表于 2021-5-6 16:54 | 只看该作者
403458608 发表于 2021-1-5 08:14
不知道 12864是不是带字库

12864带有中文字库
回复

使用道具 举报

地板
ID:836575 发表于 2021-5-6 18:59 | 只看该作者
继电器电路怎么画啊 求教
回复

使用道具 举报

5#
ID:836575 发表于 2021-5-9 11:14 | 只看该作者
24c02模块删了对整个仿真无影响是为什么啊 求教
回复

使用道具 举报

6#
ID:477512 发表于 2022-4-2 07:36 | 只看该作者
对仿真是无影响,但是在实际应用中没有24C02,存储的密码掉电时会丢失!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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