基于单片机的密码锁

本文介绍了一种基于51单片机AT89S51和E2PROM AT24C02的电子密码锁设计,具备密码输入、错误警告及开锁功能。用户通过数字小键盘输入六位密码,正确时开启继电器,显示“OK”,错误则发出警报并显示“ERROR”。此外,系统还允许用户修改密码,修改成功后有蜂鸣器确认。设计中利用汇编语言编写主控程序,实现了简单的通信功能。
摘要由CSDN通过智能技术生成

从经济实用的角度出发,采用51单片机AT89S51与低功耗CMOS型E2PROM AT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、显示、报警、开锁等电路,用汇编语言编写主控芯片的控制程序,设计了一款可以多次更改密码具有报警功能的电子密码锁。
只实现简单通讯功能,能够处理下位机传上来的数据。继电器打开(开锁)上位机显示1;继电器关闭(关锁)上位机显示0。
本设计中的数据库、手动发送未用到。

使用数字小键盘输入六位密码
密码锁在输入密码正确的条件下输出开锁电平,控制电控锁开启
同时显示0【改成OK】字样
当输入密码错误时
发出错误警告声音
同时显示C【改成ERROR】字样
当六次误码【为简便改成三次】输入时产生报警信号
还可以实现对密码的修改
修改成功后蜂鸣发出确认音
电控锁开启
可以通过使步进电机转动180度来模拟开锁和关锁动作
LED【改用LCD】显示电子锁当前状态

  1. /**************************************************************************************
  2.                                          矩阵键盘:
  3.                                          0      1      2       3
  4.                                          
  5.                                          4      5      6       7
  6.                                                                                    
  7.                                          8      9    返回    确定
  8.                                          
  9.                                          [        DISCUZ_CODE_1        ]nbsp;     [        DISCUZ_CODE_1        ]nbsp;     [        DISCUZ_CODE_1        ]nbsp;      [        DISCUZ_CODE_1        ]nbsp;                                                                                                                                                                 
  10. ***************************************************************************************/
  11. #include "reg52.h"               
  12. #include<intrins.h>                //左右移函数
  13. #include "lcd.h"
  14. #include "key.h"
  15. #include "i2c.h"
  16. #define u16 unsigned int  //对数据类型进行声明定义
  17. #define u8 unsigned char
  18. sbit AS=P2^2;               //继电器
  19. sbit beep=P2^3;                                   //蜂鸣器
  20. sbit MOTOA = P3^0;                        //步进电机
  21. sbit MOTOB = P3^1;
  22. sbit MOTOC = P3^2;
  23. sbit MOTOD = P3^3;         
  24. #define SPEED 200                         //步进电机脉冲
  25. /*****************************************************************************/
  26. u8 pw_num,Error_Num,Error_Num1,PassWord_Length=6;
  27. u8 PASSWORD[]={8,8,8,8,8,8,0,0,0,0};
  28. u8 INPUT_PW_Tab[10];
  29. u8 key_num,Step,Step5,Load_first_flag=0;
  30. u8 dianping;
  31. /*******************************************************************************/
  32. bit result_flag,Input_suc_flag;
  33. bit List1=0;
  34. /*******************************************************************************/
  35. void Step_0();
  36. void Step_1();
  37. void Step_2();
  38. void Step_3();
  39. void Step_4();
  40.          
  41. void Step_5();
  42. void Step5_0();
  43. void Step5_1();
  44. void Step5_2();
  45. void Step5_3();
  46. void Step5_4();
  47. void Step5_5();
  48. void Step_6();
  49. /*******************************************************************************/
  50. void CipherComparison();
  51. void input_password(bit m);
  52. void Read_Password();
  53. void init_serialcomm( )
  54. {
  55.         EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
  56.         ES = 1; //允许UART串口的中断
  57.         TMOD = 0x20;        //定时器T/C1工作方式2
  58.         SCON = 0x50;        //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
  59.         TH1 = 0xF3;        //定时器初值高8位设置   //12MHZ晶振,波特率为4800 0xf3
  60.         TL1 = 0xF3;        //定时器初值低8位设置   //11.0592MHZ晶振,波特率为4800 0xf4   9600  0xfa   19200  0xfd
  61.         PCON = 0x80;        //波特率倍频(屏蔽本句波特率为2400)
  62.         TR1 = 1;        //定时器启动
  63.         TI = 1;  
  64. }
  65. void sendc(u8 ch)
  66. {
  67.         SBUF=ch;  
  68.         while(!TI);
  69.         TI=0;
  70. }
  71. void main()
  72. {        
  73.         u8 data1,a;
  74.         //        ShowString(0x00," Pechin Science ");  
  75.         //        At24c02Write(0,0);                                                //开机显示密码
  76.         init_serialcomm();         /**************串口初始化*************/
  77.         LcdWriteCom(0x01);  //清屏
  78.         for(data1=0;data1<PassWord_Length+2;data1++)
  79.         {
  80.                 a=At24c02Read(data1)+0x30;
  81.                  LcdWriteData(a);        
  82.                   delay(1000);        
  83.      }
  84.         
  85.         delay(1000);
  86.         LcdInit();
  87.         delay(1000);
  88.         Step=0;
  89.         Step5=0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无限虚空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值