LCD1602密码锁设计原创.docx
- 文档编号:6187281
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:17
- 大小:32.65KB
LCD1602密码锁设计原创.docx
《LCD1602密码锁设计原创.docx》由会员分享,可在线阅读,更多相关《LCD1602密码锁设计原创.docx(17页珍藏版)》请在冰豆网上搜索。
LCD1602密码锁设计原创
LCD1602密码锁设计(原创)
单片机DIY2007-10-1915:
54:
41阅读1183评论0 字号:
大中小 订阅
经过三个星期的努力终于完成了LCD秘密锁的开发。
密码锁说明:
(KT实验板调试成功)
本密码锁是利用8051单片机的控制结合1602LCD,设计的一个微电脑LCD密码锁,可以用在需要密码输入的场合中,例如要当门禁用时,需要实际配合电子门锁。
也可以设计在保险中做密码锁控制中。
本密码锁应用的知识主要有:
1.80514x4矩阵键盘扫描输入
2.1602LCD显示
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.具有按键复位功能
硬件连接:
/*1602LCD连接线图:
---------------------------------------------------
|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@
部分代码:
//==========================================主函数部分==================================================
/*****************************************************
函数名:
voidclearmen(void)
功 能:
系统初始化
说 明:
对系统用的标志位和定时器进行初始化
入口参数:
无
返回值:
无
*****************************************************/
voidclearmen(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()
功 能:
主函数
说 明:
对按键和显示进行控制
入口参数:
无
返回值:
无
*****************************************************/
voidmain(void)
{
ucharKey_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分钟
}
}
}
//==========================================密码控制部分==================================================
/*****************************************************
函数名:
voidNewPassword_set_again(void)
功 能:
第二次输入密码
说 明:
第二次输入密码并存入暂存器,再调用比较程序
入口参数:
无
返回值:
无
*****************************************************/
voidNewPassword_set_again(void)
{
bitsign1;
ucharkey_data;
P1=0xf0; //判断是否有键按下
if(flag==1)
{
NewPassword_again(); //显示密码输入界面
Delay400Ms();
flag=0; //调用输入新密码提示标志位
Count=0; //按键次数计数器置0
Delay400Ms();
}
if((P1&0xf0)!
=0xf0) //判断是否有键按下
{
key_data=Key_switch(); //调用按键转换程序
if((key_data!
=0)&(key_data!
=65)&(key_data!
=66)&(key_data!
=67)&(key_data!
=68)&(key_data!
=35)&(key_data!
=42))
{//按键不能为数字(0~9)以外.A B C D # *
Count++; //按键次数器加1
Led_hint(); //按键指示
Beep(); //按一下键发一音
sign1=1; //有键按下标志位
}
}
if((sign1==1)&(flag==0)) //有键按下
{
Scan_starnumber(); //在密码显示区显示"******"
sign1=0; //按键标志位清0
T_Password[Count-1]=key_data; //按键值放入密码暂存器
}
if(Count==6) //6次按键则进行密码比较
{
Count=0; //计算清0,从先计数
flag=1; //调用输入新密码提示标志位
mark=0; //循环标志位
WriteCommandLCM(0x0C,1); //关光标显示
Newpassword_comparison(); //新密码设置比较
}
}
/*****************************************************
函数名:
voidNewpassword_comparison(void)
功 能:
第二次输入密码比较
说 明:
对第一次输入的密码与第二次输入的密码进行比较
入口参数:
无
返回值:
无
*****************************************************/
voidNewpassword_comparison(void)
{
ucharNumber=0;
while((T_Password[Number]==N_Password[Number])&(Number<6))//密码比较
{
Number++; //计数值加1
}
if(Number>=6) //密码正确
{
Newpassword_OK(); //新密码设置成功提示
WriteToROM(T_Password,0,6); //密码设置成功,则把密码存入24c02中
sign=1; //比较新密码标志
WriteCurrent((uchar)sign,10); //存入标志位
Delay400Ms();
Beep(); //正确提示音
Delay400Ms();
Beep();
mark=0;
}
else //密码错误,报警
{
Newpassword_ERROR(); //新密码设置失败提示
num=0;
sign=0; //比较旧密码标志
Delay400Ms();
Beep();Beep();Beep(); //错误提示音
Delay400Ms();
Beep();Beep();Beep();
Delay1s(); //延时1s
mark=0;
}
}
/*****************************************************
函数名:
voidNewPassword_set(void)
功 能:
新密码设置
说 明:
修改密码
入口参数:
无
返回值:
无
*****************************************************/
voidNewPassword_set(void)
{
bitsign1;
ucharkey_data;
P1=0xf0; //判断是否有键按下
if(flag==1)
{
NewPassword_face(); //显示密码输入界面
Delay400Ms();
flag=0; //调用输入新密码提示标志位
Count=0; //按键次数计数器置0
Delay400Ms();
}
if((P1&0xf0)!
=0xf0) //判断是否有键按下
{
key_data=Key_switch(); //调用按键转换程序
if((key_data!
=0)&(key_data!
=65)&(key_data!
=66)&(key_data!
=67)&(key_data!
=68)&(key_data!
=35)&(key_data!
=42))
{//按键不能为数字(0~9)以外.A B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LCD1602 密码锁 设计 原创
![提示](https://static.bdocx.com/images/bang_tan.gif)