具体功能的实现:
按下不同的按键,在LCD1602显示屏中可以出现不同的数字密码,如果输入错误,会显示ERR,反之显示ON;如果密码输错3次,则蜂鸣器报警30s同时在此期间无法输入密码。按键的功能有重置密码,取消,确认三种功能。
器件:AT89C51,排阻,LCD1602,若干电阻,电源,按键,蜂鸣器,三极管
Proteus仿真原理图:
知识介绍:
①存储器介绍:
存储器主要芯片AT24C02:
AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。
②为什么蜂鸣器要接NPN晶体管?
加NPN型三极管进行驱动,因为单片机的引脚驱动能力有限,蜂鸣器的功率比较大,所以需要通过三极管来驱动。
③为什么P0口接上拉电阻?
因为P0口是准双向口,即是开漏输出的,当P0口作为并行口使用时,只能输出低电平,不能输出高电平,需要接一个上拉电阻才能输出高电平。
主要代码(C语言)KEIL5实现:
主函数代码:
#include #include "Delay.h" #include "LCD1602.h" #include "MatrixKey.h" #include "Beep.h" #include "AT24C02.h" unsigned char KeyNum; unsigned int password,count; unsigned int scount; unsigned int rightpass ; sbit led = P3^0; sbit P22 = P2^2; void main() { P22 = 0; rightpass = 2001; LCD_Init(); while(1) { KeyNum = MatrixKey(); LCD_ShowString(1,1,"PASSWORD"); if(KeyNum) { if(KeyNum <= 10) { led = 1; if(count < 4) { password*=10; password += KeyNum % 10; count++; } LCD_ShowNum(2,1,password,4); } if(KeyNum == 13) { rightpass = password; password = 0; count = 0; LCD_ShowNum(2,1,password,4); } if(KeyNum == 11) { if(password == rightpass) { LCD_ShowString(1,14,"ON "); led = 0; password = 0; count = 0; LCD_ShowNum(2,1,password,4); }else{ LCD_ShowString(1,14,"ERR"); scount++; if(scount == 3) { int i = 60; while(i--) { Beep(); } Delay(30000); scount = 0; } password = 0; count = 0; LCD_ShowNum(2,1,password,4); } } if(KeyNum == 12) { password = 0; count = 0; LCD_ShowNum(2,1,password,4); } } } }
上一篇:基于51单片机实现继电器控制照明设备
下一篇:基于51单片机实现LED模拟交通灯
- 热门资源推荐
- 热门放大器推荐
设计资源 培训 开发板 精华推荐
- 两轮自平衡小车msp430g2553
- LT3990IMSE 5V 同步降压转换器的典型应用
- 使用 Richtek Technology Corporation 的 RT8298E 的参考设计
- DC1322A,演示电路是一种高电流电容充电电路,采用 LT3751EUFD DC/DC 反激式转换器
- LT8705AMPFE 12V、15A 输出转换器的典型应用接受 7.5V 至 55V 输入
- LT1769CGN、LTC1729CMS8 演示板、具有终端控制器的 2A 锂离子电池充电器、12V 至 25V 输入、8.4Vout @ 2A Max
- 使用 NXP Semiconductors 的 MC32BC3770CS 的参考设计
- STEVAL-ILL065V1,基于 LED5000 3A LED 驱动器的 BB+ 拓扑评估板
- LT6656ACDC-1.25、1.25V 升压输出电流电压基准的典型应用
- DC1596A,使用 LTC3607EUD 双路 600mA 15V 单片同步降压稳压器的演示板