LCD1602密码锁设计原创Word下载.docx
- 文档编号:19190777
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:17
- 大小:32.65KB
LCD1602密码锁设计原创Word下载.docx
《LCD1602密码锁设计原创Word下载.docx》由会员分享,可在线阅读,更多相关《LCD1602密码锁设计原创Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
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)
功
能:
系统初始化
说
明:
对系统用的标志位和定时器进行初始化
入口参数:
无
返回值:
*****************************************************/
{
flag1=1;
//Choice_menu()调用标志
signx=1;
//循环标志
flag=1;
//调用输入新密码提示标志位
mark=1;
//循环标志位
num
=0;
//按键错误计数器
TH0=0x3C;
TL0=0xB0;
//50ms定时初值
TH1=0x3C;
TL1=0xB0;
TMOD=0x11;
ET0=1;
TR0=0;
ET1=1;
TR1=0;
EA=1;
}
main()
主函数
对按键和显示进行控制
voidmain(void)
{
ucharKey_value;
Delay400Ms();
//启动等待,等LCM讲入工作状态
LCMInit();
//LCM初始化
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;
signx=1;
while(signx==1)
TR0=0;
//定时器0关,从先开始计时
TR0=1;
//定时器0开
//P1口赋值,从而判断有无按键
if((P1&
=0xf0)
if(Key_value==65)
//如果按键是"
A"
则输入密码
{
while(mark==1)
Password_importation();
//密码输入
}
flag1=1;
signx=0;
if(Key_value==66)
B"
则输入新密码
while(mark==1)
//输入前比较秘密,密码正确进入新密码设置
//密码错误退出密码设置
}
//-------------------------------
if(mark0!
//mark0=1:
密码比较正确可以输入新密码
//mark0=0:
密码比较错误不能输入新密码
mark=1;
//进入循环标志
{
NewPassword_set();
//新密码设置函数
mark=1;
//进入循环标志
NewPassword_set_again();
//再次输入密码
else
Welcome_face();
//欢迎界面
mark=1;
mark0=0;
//是否输入新密码标志位
WriteCommandLCM(0x0C,1);
//关光标显示
sign=(bit)ReadCurrent(10);
//密码比较标志位
if(num==3)
//3次输入错误密码,系统锁定30min
ET1=1;
TR1=1;
//开定时器T1,定时30分钟
//==========================================密码控制部分==================================================
voidNewPassword_set_again(void)
第二次输入密码
第二次输入密码并存入暂存器,再调用比较程序
bitsign1;
ucharkey_data;
//判断是否有键按下
if(flag==1)
NewPassword_again();
//显示密码输入界面
flag=0;
//调用输入新密码提示标志位
Count=0;
//按键次数计数器置0
=0xf0)
//判断是否有键按下
key_data=Key_switch();
//调用按键转换程序
if((key_data!
=0)&
(key_data!
=65)&
=66)&
=67)&
=68)&
=35)&
=42))
{//按键不能为数字(0~9)以外.A
*
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次按键则进行密码比较
//计算清0,从先计数
flag=1;
mark=0;
WriteCommandLCM(0x0C,1);
Newpassword_comparison();
//新密码设置比较
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);
//存入标志位
//正确提示音
mark=0;
else
//密码错误,报警
Newpassword_ERROR();
//新密码设置失败提示
num=0;
sign=0;
//比较旧密码标志
Beep();
//错误提示音
Delay1s();
//延时1s
voidNewPassword_set(void)
新密码设置
修改密码
if(flag==1)
NewPassword_face();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LCD1602 密码锁 设计 原创