真正的适用的电子密码锁
摘自张志良编著《80C51单片机实用教程—基于Keil c和Proteus》
由单片机控制的电子密码锁是一种智能化的电子产品,近年来得到较多应用。
⒈ 电路设计
电子密码锁电路如图8-27所示,该电路具有EPROM存储开锁密码、LCD显示、4×4矩阵键盘输入和声光报警功能。 ⑴ 右半部分为4×4矩阵式键盘电路,与图8-26电路相同。其中,K0~K9为密码数字键,其余6键为功能键:K10为开锁键Open,K11为确认键Enter,K12为设置键Set,K13为闭锁键Close,K14为复位键Reset,K10为清除键Clear。
⑵ 左上部分为LED灯状态显示电路,VD0为闭锁灯,VD1为开锁灯,VD2为报警灯,分别由P2.3、P2.2、P2.1控制,开锁灯VD1模拟开锁机械动作。
⑶ 左中部分为LCD1602显示屏电路,与图8-10电路相同(控制端改为P2.5~P2.7)。
⑷ 左下部分为串行EPROM AT24C02存储开锁密码电路,与图7-28b电路相同(数据线和时钟线分别为P3.6、P3.7)。
⑸ 蜂鸣器(警报发声)接80C51P2.0。
⒉ 功能设计
⑴ 开机。闭锁灯VD0亮(红),表示闭锁;其余灯灭。
⑵ 开锁。
① 按开锁键Open(键编号10),发按键嘟声,LCD1602第1行显示:inputpassword(输入密码)。
② 键入8位密码,1602第2行依次显示键入的8位隐形密码:********。每键入一位密码数字,发一次按键嘟声。
③ 8位密码输入完毕,按确认键Enter(键编号11)后,系统核对密码。
④ 若密码正确,1602第1行显示:password ok!(密码正确通过),闭锁灯VD0灭(红),开锁灯VD1亮(绿),表示已开锁。
⑤ 若键入密码中途发现键入有误,可按清除键Clear(键编号15)。按一次Clear键,已键入的隐形密码“*”退一格。
⑥ 若键入8位密码有误,1602第1行显示:error,try again(错,再输入一次),允许用户输错3次(有error1、error2、error3提示)。
⑦ 若连续4次输入错误,1602第1行显示:inputfail!(输入失败),并发出警车声,报警灯VD2(黄)闪烁,中间不能打断。
⑧ 开锁操作有时限,从按下开锁键后,60秒内未键入正确密码,声光报警。
⑨ 警车声停后,仍可正常操作(为便于验证操作演示,警车声频率升降循环3次,实用时可大大延长警车声时间,用作锁定功能)。
⑶ 设置。
本例初始密码为12345678,由生产厂商在出厂前录入串行EPROM AT24C02,用户使用时,可设置新的密码;或者用户需要修改原用密码,前提是先用原有效密码打开密码锁。
① 按设置键Set(键编号12),1602第1行显示:input password(输入密码)。
② 先按开锁操作步骤和过程键入8位有效密码,密码验证正确后,1602第1行显示:password ok!(密码正确通过),第2行显示:set new password(设置新密码)。
③ 若不能键入原有效密码,则不能进入设置程序。并在第4次输入错误后,声光报警。
④ 系统提示设置新密码后,键入8位新密码,1602第2行依次显示键入的8位隐形密码:********。操作步骤和功能同开锁过程。
⑤ 按Enter键后,1602第1行显示:input again(再输入一遍)。
⑥ 再次输入第一次键入的8位新密码,按Enter键后,若二次密码相同,1602第1行显示:new password ok!(新密码设置完成)。
⑦ 若二次密码不相同,1602第1行显示:error,try again(错,再输入一次),允许用户输错2次(有error1、error2提示)。若第3次输入错误,1602第1行显示:input fail!(输入失败)。
⑧ 设置操作有时限,从按下设置键后,60秒内未键入正确密码,声光报警。
⑷ 复位。用于用户忘记密码,无法开锁时,由生产厂商高级维修人员将密码锁初始化。因此,复位操作的功能需要保密和隐蔽,并不对用户和无关人员公开,以防被非法利用。
① 按复位键Reset(键编号14),1602及LED灯均无反应(对无关人员表示Reset键无作用),但若按下复位键后10秒内,不能进行正确的第二步操作,立刻声光报警。
② 正确的第二步操作是在10秒内,按下清除键Clear(键编号15)。
③ 正确的第三步操作是键入8位复位密码(81815151)。若依次键入密码中,有一位出错,1602第1行立刻显示:error,并声光报警。出错后,须再次按复位键Reset,才能重新进入复位操作。
④ 正确键入8位复位密码后,开锁灯VD1亮(绿),1602第1行显示:reset ok!(复位成功),第2行显示:12345678(初始密码)。
⑤ 复位操作进入第三步操作后,仍有时限要求,若30秒内未正确键入8位复位密码,声光报警。
⑸ 关闭。用于上述几种操作完成后退出。
按闭锁键Close(键编号13),停显示、停嘟声、灭灯。但在进入上述4种键操作程序或报警过程中,按闭锁键无效,需待程序和报警执行完毕,才有效。
⒊ 程序设计
⑴ 程序流程图
密码锁程序流程图如图8-28所示。
⑵ C51程序
C51程序见张志良编著《80C51单片机实用教程—基于Keil c和Proteus》(高等教育出版社ISBN 978-7-04-044532-9)P.332。
程序条例清晰,每条语句均有注释,真实可靠可信可行,便于阅读理解。
涉及程序如下:
void STAT ( ); //启动信号子函数STAT,见7.4.2节
void STOP ( ); //终止信号子函数STOP,见7.4.2节
void ACK ( ); //发送应答A子函数ACK,见7.4.2节
void NACK ( ); //发送应答子函数NACK,见 7.4.2节
bit CACK ( ); //检查应答子函数CACK,见7.4.2节
void WR1B ( ); //写一字节子函数WR1B,形参x:发送数据,见7.4.2节
unsigned char RD1B ( ); //读一字节子函数RD1B,返回值:接收数据,见7.4.2节
void WRNB ( ); //写AT24Cxx n字节子函数,见7.4.3节
void RDNB ( ); //读AT24Cxx n字节子函数,见7.4.3节
void in1602 (unsigned char x); //并行数据输入1602子函数,形参:输入数据x,见例8-7
void init1602 ( ); //1602初始化设置子函数,见例8-7
void wr1602(unsigned char d[],a); //写1602子函数,形参:写入数组d[],地址a,见例8-7
unsignedchar k_scan ( ); //键扫描子函数,返回值:闭合键序号,见例8-11
void input ( ); //键入密码子函数
void alm ( ); //警报子函数
void open (); //开锁子函数
void set ( ); //设置子函数
void clos ( ); //闭锁子函数
void reset ( ); //复位子函数
void main ( ); //主函数
void t1 ( ) interrupt 3 { } //T1中断函数(50ms定时中断)
void int0 ( ) interrupt 0{ } //外中断0中断函数(键闭合中断)
void t0 ( ) interrupt 1 { } //T0中断函数(警报声中断)
⒋Proteus仿真
⑴ 按实验1所述Proteus仿真步骤,打开Proteus软件,按表8-17选择和放置元器件,并连接线路,画出Proteus仿真电路如图8-39所示。
⑵ 左键双击Proteus ISIS仿真电路中AT89C51,装入Keil调试后自动生成的Hex文件。
⑶ 按8.3.3节电子密码锁功能设计要求,可逐条验证开锁、设置、复位、闭锁、显示、嘟声、亮灯、出错和超时报警等功能,此处不再重复。
需要说明的是,本例初始密码为12345678,已录入电子密码锁仿真DSN文件随带的AT24C02片内ERROM 50H中,打开AT24C02片内Memory(左键单击暂停按钮“ ”,然后左键单击主菜单“Debug”→“I2C Memory Internal Memory –U3”),可看到该AT24C02片内Memory 0x50~0x57区域已存有该初始密码:01、02、03、04、05、06、07、08。设置新的密码后,可再次打开AT24C02片内Memory,查看写入AT24C02的新密码。但是,关闭Proteus软件时,并不能一并将新密码留存,必须左键单击主菜单“File”→“Save Design”保存,才能实际保存新密码。这样,下次启动Proteus软件,打开电子密码锁仿真DSN文件,随带的AT24C02片内ERROM 50H中,就是新密码了,否则还是原密码。
⑷ 终止程序运行,可按停止按钮。
读者可先下载Proteus ISIS仿真电路DSN文件和驱动程序Hex文件,在电脑上仿真验证,确认有效后,再购买《80C51单片机实用教程—基于Keil c和Proteus》,查看程序。
欢迎质询,张志良Email:zzlls@126.com,有信必复。
|