微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LCD1602密码锁设计

LCD1602密码锁设计

时间:11-10 来源:互联网 点击:
密码锁说明:(KT实验板调试成功)

本密码锁是利用8051单片机的控制结合1602LCD,设计的一个微电脑LCD密码锁,可以用在需要密码输入的场合中,例如要当门禁用时,需要实际配合电子门锁。也可以设计在保险中做密码锁控制中。本密码锁应用的知识主要有:
1. 8051 4x4矩阵键盘扫描输入
2. 1602 LCD显示
3. 密码比较处理的设计方法
4. 定时器的使用
5. 24cxxx的应用等

功能说明:

1. 使用LCD显示器来显示密码输入的相关消息及提示
2. 可以设置6位数字(0-9)密码
3. 内定另一组数字密码为:000000
4. 密码输入正确则继电器启动2s
5. 密码输入正确或错误都有相应的声音提示
6. 密码输入3次错误,系统将自动锁定,30分钟内不准使用,30分钟后自动开启
7. 密码输入时,如果在10秒内没有按键,表示放弃本次输入,则自动跳出密码输入状态,进入欢迎界面
8. 可以修改密码或用原始密码
9. 断电后密码仍然存在(保存在24c02中)
10.具有按键复位功能

硬件连接:

/*1602 LCD连接线图:
---------------------------------------------------
| LCM-----51  | LCM-----51  | LCM------51 |
| ----------------------------------------------- |
| DB0-----P0.0 | DB4-----P0.4 | RS-------P2.0 |
| DB1-----P0.1 | DB5-----P0.5 | RW-------P2.1 |
| DB2-----P0.2 | DB6-----P0.6 | E--------P2.2 |
| DB3-----P0.3 | DB7-----P0.7 | VLCD接1K电阻到GND |
---------------------------------------------------

接口说明:1. P1口: 4x4矩阵键盘
2. P2.4 工作指示灯
3. P2.5 继电器控制端
4. P3.7 蜂鸣器控制端
5. P3.3 24c02时钟端
6. P3.4 24c02数据端
/*接盘按键说明:
--------------------------------------------------
| 1 | 2 | 3 | A |
- - - - - - - - - - - - -
| 4 | 5 | 6 | B |
- - - - - - - - - - - - -
| 7 | 8 | 9 | C |
- - - - - - - - - - - - -
| * | 0 | # | D |
--------------------------------------------------
注:A--表示输入密码
B--表示设置新密码
C--复位端口

附加说明:

1. LCD1602驱动-----------明皓
2. 4x4键盘扫描-----------KT学习综合实验源程序
3. 密码比较原理----------8051单片机课程设计实训教材
4. 24C02的读写操作-------伟纳电子ME300B单片机开发系统演示程序

zhaojun 2007/10/1

zhaojun_xf@163.com

部分代码:

//========================================== 主函数部分 ==================================================

/*****************************************************
函 数 名:void clearmen(void)
功 能:系统初始化
说 明:对系统用的标志位和定时器进行初始化
入口参数:无
返 回 值:无
*****************************************************/
void clearmen(void)
{
flag1= 1; // Choice_menu()调用标志
signx= 1; // 循环标志
flag = 1; // 调用输入新密码提示标志位
mark = 1; // 循环标志位
num = 0; // 按键错误计数器
TH0=0x3C;TL0=0xB0; // 50ms定时初值
TH1=0x3C;TL1=0xB0; // 50ms定时初值
TMOD=0x11;ET0=1;TR0=0;ET1=1;TR1=0;EA=1;
}

/*****************************************************
函 数 名:main()
功 能:主函数
说 明:对按键和显示进行控制
入口参数:无
返 回 值:无
*****************************************************/
void main(void)
{

uchar Key_value;
Delay400Ms(); // 启动等待,等LCM讲入工作状态
LCMInit(); // LCM初始化
Delay400Ms();
clearmen(); // 系统初始化
while(1)
{
P1=0xf0;
if(((P1&0xf0)!=0xf0)&(flag1==1)&(num<3)) // 有键按下
{
Key_value=Key_switch(); // 按键扫描
if(Key_value!=0) // 的确有键按下
{
Choice_menu(); // 调用选择程序
flag1=0; // Choice_menu()调用标志
signx=1; // 循环标志
}
while(signx==1)
{
TR0=0; // 定时器0关,从先开始计时
TR0=1; // 定时器0开
P1=0xf0; // P1口赋值,从而判断有无按键
if((P1&0xf0)!=0xf0)
{
Key_value=Key_switch(); // 按键扫描
if(Key_value==65) // 如果按键是"A",则输入密码
{
while(mark==1)
{
Password_importation(); // 密码输入
}
flag1=1; // Choice_menu()调用标志
signx=0; // 循环标志
}
if(Key_value==66) // 如果按键是"B",则输入新密码
{
while(mark==1) // 输入前比较秘密,密码正确进入新密码设置
{ // 密码错误退出密码设置
Password_importation(); // 密码输入
}
//-------------------------------
if(mark0!=0) // mark0=1:密码比较正确可以输入新密码
{ // mark0=0:密码比较错误不能输入新密码
mark=1; // 进入循环标志
while(mark==1)
{
NewPassword_set(); // 新密码设置函数
}
mark=1; // 进入循环标志
while(mark==1)
{
NewPassword_set_again(); // 再次输入密码
}
}
flag1=1; // Choice_menu()调用标志
signx=0; // 循环标志
}
}
}
}
else
{
Welcome_face(); // 欢迎界面
mark = 1; // 循环标志
mark0= 0; // 是否输入新密码标志位
flag1=1; // Choice_menu()调用标志
WriteCommandLCM(0x0C,1); // 关光标显示
sign=(bit)ReadCurrent(10); // 密码比较标志位
}
if(num==3) // 3次输入错误密码,系统锁定30min
{
ET1=1;TR1=1; // 开定时器T1,定时30分钟
}
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top