多功能电子密码锁

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

多功能电子密码锁

一、作品简介:

电子密码锁具有安全性能高、成本低、功耗低、作简单等优点使其作为防盗卫士的角色越来越重要。从经济适用的角度出发,本作品采用89S52单片机作为控制核心,采用液晶屏实现了良好的人机交互,并且设置了掉电保护系统,保证了在意外断电的情况下密码仍然保留。

功能概述:

(1)、按“A”输入密码,初始密码为,输完后按确定键开锁,若输入的密码长度小于6位提示“less then 6!”并返回主菜单。清除键清除上次输入,每次按键有短“滴”声按键提示音。

(2)、密码输入正确后,输出一个电磁锁开锁信号与已开锁信号,电磁锁导通(本作品中用两个发光二极管代替电磁锁,发光二极管亮表示开锁)。2秒后开锁信号与已开锁指示清零。

(3)、密码输入错误时显示“error”,发出一声长“滴”声错误指示提示音,并且报警指示灯短暂闪烁。三次密码错误时,发出长鸣声报警,报警指示灯不停闪烁,按复位键清除报警。

(4)、按“B”修改密码,要求输入原密码,输入错误时显示“error”,发出一声长“滴”声,错误指示提示音报警指示灯亮短暂闪烁,然后返回主菜单。输入正确要求再次输入,两次输入一致提示“password has been changed”并返回主菜单。两次不一致提示“twice input is different!”,然后返回主菜单。

二、作品原理:

密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路。

(1)、键盘输入模块:每一条水平行线与垂直线的交叉处不相通,通过一个按键来连通,利用这种行列式矩阵结构只需要4条行线和4条列线, 即可组成具有4×4个按键的键盘。行线所接的单片机4 个I/O 口作为输出端,而列线所接的I/O口则作为输入端。当按键没有被按下时所有的输出端都是高电平,代表无键按下。一旦有键按下,则输入线就会被拉低,这样通过读入输入线的状态就可知是否有键按下。

(2)、掉电保护模块:存储电路主要作用是存储密码,提供校验码以在密码判定的时候作为密码安全性的一道屏障。采用储存芯片AT24C04设计,传输方式为I2C总线。这样设计的优点在其简单性和处理的高效性上。A0、A1、WP 接VCC GND ,SCL、SDA 接上拉电阻。

(3)、液晶显示模块:SMC1602 液晶显示模块作为显示电路,具有显示信息丰富、功耗小等优点。1602 LCD 模块以总形方式将LCD 模块接在MCU 的外部总线上,当然MCS51 的总线是8080 的格式,而1602 LCD 的接口为6800 总线,两者有区别,只需要经过74ls00及74ls08门电路改造一下接口即可。当按开锁键后,显示器输出密码提信息。当输入的密码后,密码以“*”的形式出现在显示器上面,即直观又保护了密码的安全性。

三、作品方案设计:

1、作品整体方案:

2、相应模块流程图:1、主程序流程图:

2、键盘扫描程序流程图:

3、开锁程序流程图:

四、作品整体电路图:

五、作品成品照片:

六、部分源代码

部分代码:

1、系统初始化函数程序:

uchar step_choose(void)//系统初始化

{

uint i;

uchar key;

do{

lcm_write_cmd(0x01);

lcm_write_cmd(0x06);

lcm_setxy(5,1);

lcm_write_string("welcome! ");

lcm_setxy(0,2);

lcm_write_string(" A:open B:modify ");

for(i=0;i<30000;i++)

{

key=get_key();

if((key==open)||(key==modify)) break;

}

}

while((key!=open)&&(key!=modify));

return(key);

}

2、键盘扫描函数程序:

uchar get_key()//键盘扫描

{

uchar row_code;

uchar col_code;

P1=0xf0;

if(P1!=0xf0)

{

delayms(10);

if(P1!=0xf0)

{

row_code=0xfe;

while(row_code!=0xef)

{

P1=row_code;

if(P1!=row_code)

{

col_code=P1;

while(col_code==P1);

col_code=(col_code&0xf0)|0x0f;

return( (~col_code)|(~row_code));

}

row_code=((row_code<<1)|0x01);

}

}

}

return(0x00);

}

3、液晶屏初始化函数程序:

void lcm_init()//LCM初始化

{

delayms(20);

lcm_write_cmd_add=0x38;

delayms(4);

lcm_write_cmd_add=0x38;

delayms(1);

lcm_write_cmd_add=0x38;

lcm_write_cmd(0x38);

lcm_write_cmd(0x0f);

lcm_write_cmd(0x01);

lcm_write_cmd(0x06);

}

4、密码输入函数程序:

bit input_password(uchar *password)//密码输入

{

uchar counter;

uchar key;

lcm_setxy(0,2);

for(counter=0;counter<7;counter++)

{

longdelay(3);

if(counter<6)

{

do{

key=get_key();

}

while(key==0x00);

if((key!=backspace)&&(key!=enter))

相关文档
最新文档