找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4844|回复: 6
收起左侧

电子密码锁设计24c01+12864,希望能帮到大家

  [复制链接]
ID:164371 发表于 2017-6-13 21:52 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载):
%EV9YHP]`57I%~XTFX9(826.png 0.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<keyinput.h>
  3. #include<12864.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. /************************ 密码校验函数 **************************/
  14. void press(uchar *s) {
  15.            uchar dat;
  16.        P3=0xf0;                                                                //第一位密码
  17.            while(P3==0xf0);
  18.        dat=key_scan();
  19.            if((dat!=0x0a)&&(dat!=0x0b))
  20.          {   *s=dat;
  21.                          Left();
  22.                          star_12864(star,0x05,16);
  23.              }
  24.            s++;                  
  25.            P3=0xf0;                                                          //第二位密码
  26.            while(P3==0xf0);                                                 
  27.        dat=key_scan();
  28.            if((dat!=0x0a)&&(dat!=0x0b))
  29.          {   *s=dat;
  30.                          Left();
  31.                          star_12864(star,0x05,24);
  32.                   }
  33.            s++;       
  34.            P3=0xf0;                                                          //第三位密码
  35.            while(P3==0xf0);                                                 
  36.        dat=key_scan();
  37.            if((dat!=0x0a)&&(dat!=0x0b))
  38.          {   *s=dat;
  39.                          Left();
  40.                          star_12864(star,0x05,32);
  41.                   }
  42.            s++;       
  43.            P3=0xf0;                                                          //第四位密码
  44.            while(P3==0xf0);                                                 
  45.            dat=key_scan();
  46.            if((dat!=0x0a)&&(dat!=0x0b))
  47.          {   *s=dat;
  48.                          Left();
  49.                          star_12864(star,0x05,40);
  50.                   }
  51.            s++;       
  52.            P3=0xf0;                                                          //第五位密码
  53.            while(P3==0xf0);                                                 
  54.        dat=key_scan();
  55.            if((dat!=0x0a)&&(dat!=0x0b))
  56.          {   *s=dat;
  57.                          Left();
  58.                          star_12864(star,0x05,48);
  59.                   }
  60.            s++;       
  61.            P3=0xf0;                                                          //第六位密码
  62.            while(P3==0xf0);                                                 
  63.        dat=key_scan();
  64.            if((dat!=0x0a)&&(dat!=0x0b))
  65.          {   *s=dat;
  66.                          Left();
  67.                          star_12864(star,0x05,56);
  68.                   }
  69.            do{P3=0xf0;                                                        //键入Enter键盘继续执行下面语句,否则等待
  70.               while(P3==0xf0);                                                 
  71.           dat=key_scan();
  72.               }while(dat!=0x0b);
  73. }

  74. /****************************** 延时10ms函数 *******************************/
  75. void Delay10ms(void) {
  76.         uint i,j,k;
  77.         for(i=5;i>0;i--)
  78.         for(j=4;j>0;j--)
  79.         for(k=248;k>0;k--);

  80. }

  81. /****************************** 主函数 *******************************/
  82. void main() {
  83.       uchar dat;
  84.       uchar i=0,j=0,k;
  85.       uchar x;
  86.           LED1=1;
  87.           LED2=1;
  88.           SOUND=0;
  89.           INIT=1;
  90.       if(INIT==0){                   //密码初始化,先从IIC器件中读出密码以供下面输入密码进行比较
  91.              x=SendB(iic,0x50,6);
  92.                  Delay10ms();
  93.       }              
  94.       x=ReadB(iic,0x50,6);
  95.       Init_12864();
  96.           for(i=0;i<50;i++){Delay10ms();}
  97.           do{                                  //若密码不正确,循环执行do{}while()
  98.              LED1=1;
  99.              System();                  //显示:请输入密码
  100.              press(key);
  101.                  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])) //密码比较,若密码正确责进入系统,若密码不正确则显示密码错误,重新输入密码
  102.          {
  103.                     true();
  104.                     do {
  105.                        P3=0xf0;                                                        //键入1或2继续执行下面语句,否则等待
  106.                    while(P3==0xf0);                                                 
  107.                dat=key_scan();
  108.                 }while(dat!=0x01&&dat!=0x02);         
  109.                     if(dat==1) {                                       //开锁
  110.                         LED1=0; j=0;
  111.                                 unlock();
  112.                             for(i=0;i<100;i++){Delay10ms();}
  113.                     continue;
  114.                     }
  115.                     if(dat==2) {                                                        //修改密码
  116.                        do{
  117.                               j=0;
  118.                                           System();
  119.                                   press(key);
  120.                                   again();
  121.                                   press(iic);
  122.                                       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]))
  123.                                       {
  124.                                           succeed();                                //修改密码成功
  125.                                                   for(i=0;i<100;i++){Delay10ms();}
  126.                                       Delay10ms();
  127.                               x=SendB(iic,0x50,6);
  128.                                       Delay10ms();       
  129.                           x=ReadB(iic,0x50,6);break;
  130.                                       }
  131.                                       else         {                                            //修改密码不成功,重新修改
  132.                                               repeat();
  133.                                                   for(i=0;i<100;i++){Delay10ms();}
  134.                                           }
  135.                                  }while(1);   
  136.                     }
  137.                  
  138. ……………………

  139. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
电子密码锁.zip (121.93 KB, 下载次数: 141)

评分

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

查看全部评分

回复

使用道具 举报

ID:82765 发表于 2017-6-14 09:39 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:164371 发表于 2017-6-14 14:09 | 显示全部楼层
因为发送过于匆忙有些引脚的定义大家自己修改一下,程序是绝对没问题的
回复

使用道具 举报

ID:211258 发表于 2017-6-14 22:33 | 显示全部楼层
谢谢分享,太好了正好需要
回复

使用道具 举报

ID:210484 发表于 2017-6-15 08:54 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:803444 发表于 2020-7-26 21:35 来自手机 | 显示全部楼层
a8818075 发表于 2017-6-14 14:09
因为发送过于匆忙有些引脚的定义大家自己修改一下,程序是绝对没问题的

朋友,是不是rs...rw...e三个要改,但是改了也不行啊,望指导,万分感谢
回复

使用道具 举报

ID:771985 发表于 2020-8-7 17:36 | 显示全部楼层
楼主,要设置多个密码都能够开锁,程序要怎么搞呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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