基于AVR单片机的电子密码锁控制系统设计
2017-06-07徐剑琴李克讷梁奇峰
徐剑琴,李克讷,梁奇峰
新产品开发
基于AVR单片机的电子密码锁控制系统设计
徐剑琴1,李克讷2,梁奇峰1
(1.广西科技大学工程训练中心,广西柳州545006;2.广西科技大学电气与信息工程学院,广西柳州545006)
设计一种以ATmega16L单片机为主控芯片的电子密码锁系统。该系统利用单片机自带的EEPROM存储器保存开锁密码;通过矩阵键盘进行操作可以开锁或重新设置开锁密码;采用UPS不间断电源供电,保证系统在停电期间的正常工作;利用单片机的睡眠模式进一步降低系统的功耗,有利于停电时延长UPS的供电时间;利用单片机内部定时器进行计时可以减轻CPU的负荷,有利于系统的稳定运行。该系统充分利用了单片机资源,简化了系统设计,提高了系统的安全可靠性。
电子密码锁;单片机;键盘矩阵;密码
在日常的生活和工作中,使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙容易复制、丢失,其安全性大打折扣。随着人们对家庭财产和人身安全保障意识的逐步提高,传统的机械锁具已经很难满足人们的防盗需要,因此,需要设计一种价格较低廉的安全有效的新型锁具来代替传统机械锁具。随着大规模集成电路技术的发展,特别是单片机技术的应用[1-7],出现了带微处理器的智能密码锁,除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性和可靠性,可应用于安全性要求较高的场合。
为了降低电子密码锁的制作成本,提高电子密码锁的普及率,本文设计一种基于AVR单片机的电子密码锁系统,具有以下主要功能或特点:
(1)通过键盘面板输入完成开锁或修改开锁密码操作;(2)当键入的密码与开锁密码不一致时,提示密码不对,重新输入;(3)当键入错误密码的次数连续超过3次时,系统发出长约5min的长时警报;(4)报警期间不能进行开锁或者修改密码等操作,以防窃贼多次试探密码;(5)输入结束报警代码“000”可停止报警,该代码可由用户修改;(6)可设置1~16位的开锁密码,密码由数字0~9、字母A~Z组成;(7)长时无操作时系统进入睡眠(掉电)模式,以降低系统损耗;(8)设计了UPS不间断电源,以有效保证密码锁在停电时能保持正常工作。
1 电子密码锁系统设计
本系统主要由ATmega16L单片机、4×4矩阵键盘、1602液晶显示器、电源模块、开锁控制电路和报警控制电路等部分组成,整体框图如图1所示。其中ATmega16L单片机为主控芯片,利用单片机自带的EEPROM存储器保存开锁密码;矩阵键盘用于输入数字和字母组成的密码以及实现其他各种辅助功能;液晶屏用于显示输入提示、执行结果以及短时显示键入密码等。根据屏幕提示,从矩阵键盘输入一组密码,密码的每一位只会在液晶屏上显示1~2 s,然后以“*”代替,以防旁人窃取密码,增强密码锁的安全保护性。密码输入完毕后,将该密码和存储在EEPROM的开锁密码作比较,若一致,则开锁控制电路形成电流通路,将锁打开。若输入密码与开锁密码不一致,则发出提示声,屏幕显示“Password Error”,“Enter your password”等提示语;若输入错误密码次数连续超过3次,则报警控制电路发出警报声,以引起周边的注意。长时报警结束后提示“Enter your password”,方可进行新一轮操作。
图1 基于AVR单片机的电子密码锁系统总体结构示意图
2 系统的硬件设计
根据电子密码锁的总体设计示意图,系统以ATmega16L单片机为控制核心,其它部分以模块化进行设计。ATmega16L是增强的AVR RISC结构的低功耗8位CMOS微控制器,且含有EEPROM,不需要另外再设计外部存储器模块来保存开锁密码,使系统硬件设计更为简化、可靠。
2.1 4×4矩阵键盘的模块设计
键盘分为功能键和密码键。键盘面板如图2所示。功能键有切换键、设定键、删除键和确定键。密码键用于输入密码。密码键的字符为数字0~9以及字母A~Z.图2给出了键盘面板示意图,各按键具体的功能定义如表1所示。用户可采用数字和字母任意组合的方式编排自己的开锁密码,以提高密码的破译难度,增强电子锁的防盗性能。键盘电路设计[8]如图3所示。
图2 键盘面板示意图
表1 按键功能
图3 用5个I/O口实现4×4按键矩阵的原理图
从图3可见,键盘电路主要由行列式矩阵键盘和中断接口电路构成。为了降低系统的功耗,减少系统的维护,且在停电期间能延长UPS的使用时间,本系统使用了睡眠(掉电)模式,并采用外部中断0唤醒系统。当电子锁无操作,即无任何按键按下,约达10 min后,系统进入掉电模式;当有按键按下时,系统即被唤醒,并在显示屏上提示用户做出相应操作。矩阵键盘的模块设计中,把三极管T1的集电极连接到ATmega16L单片机的PD2(INT0)复用引脚,INT0采用低电平触发方式。
其工作过程可按如下步骤进行[8]:(1)定义PD端口的引脚PD2为带上拉电阻输入模式,PD4~PD7为高电平输出模式。当有键按下时,三极管T1的基极由低变高,T1导通,其集电极由高电平跳变成低电平,使PD2状态为“0”,通过检测PD2的状态可判断是否有键按下;(2)扫描按键码值:从引脚PD4开始,依次将引脚PD4~PD7置“1”输出,其余三个设置为输入模式(如PD4置“1”时,PD5~PD7为输入)。这样当有按键按下时,通过二极管D5~D8与该按键相连的引脚此时会为“1”.然后读入PD端口值,根据端口值可以得到该按键的码值。
值得指出的是,这是一种用N+1个I/O口实现N×N矩阵式键盘的方法[8],比如用5个I/O口实现4× 4按键矩阵,可有效节约单片机引脚资源。因此,还可以相应增加按键的数量,以对键盘的输入进行扩展,实现系统的更多功能。另外,PD2(INT0)引脚分别以查询和中断方式对启动键盘扫描和唤醒系统功能进行复用。
2.2 备用电源控制电路设计
为了保证电子密码锁在任何情况下的正常供电,本电路设计了UPS后备电源,主要由市电供电电路,电压检测及电子开关切换电路,蓄电池充电电路和蓄电池组成。电源模块采用变压器降压,经整流滤波后,采用线性稳压芯片KA7805E稳压,以提供+5 V直流电源,给系统供电。当直流电源小于4.5 V或者停电时,能自动进行电源切换,由蓄电池供电。电压检测及电子开关切换电路如图4所示。HT7044A是电压检测器[9],在+5 V直流电源正常供电的情况下,HT7044A输出高电平,由T3,T4构成的达林顿管使继电器通电,常开触点闭合与直流电源相连,常闭触点断开;当直流电源小于4.5 V或者停电时,继电器断电,常开触点断开,常闭触点恢复闭合,将常闭触点将蓄电池和电路相连,实现直流电源和蓄电池供电的切换,有效保证电子密码锁系统的正常工作。
图4 电压检测及电子开关切换电路
2.3 开锁控制电路
开锁控制电路如图5所示,单片机通过引脚PC1与该电路相连。PC1为高电平输出时,三极管T5截止,电磁锁的电磁线圈断电,电磁锁为“闭锁”状态;通过矩阵键盘输入的密码与开锁密码经比较验证一致后,PC1输出低电平,T5导通,电磁线圈通电动作,继而开锁。
图5 开锁控制电路图
3 系统软件设计
AVR单片机程序采用ATMEL公司推荐的ICCAVR编程软件开发[1]。电子密码锁系统程序由主程序、子程序和中断程序组成。子程序主要负责确定按键按下、扫描键盘、输入识别、密码的比较、密码设置、密码锁开关动作和报警、LCD显示等。定时器1中断程序负责计时以进入睡眠状态和长报警计时等。程序的编制和仿真在计算机上完成,仿真验证通过后把程序下载到ATmega16L进行调试和运行。
3.1 系统主程序与子程序设计
系统程序采用模块化设计,主要由端口初始化程序、LCD初始化程序、定时器1设置程序void Timer1_Init()、外部中断0设置程序void INT0_init()、按下按键查询与处理程序void qdd(),键盘扫描程序uchar keyscan()、键码识别程序void keyprocess()等构成。其中,为了实现开锁、设置密码、密码输错报警这些重要功能,键码识别程序中包含有开锁设密及报警程序void KSSM()。主程序流程图的设计如图6所示。
图6 主程序流程图
3.1.1 系统初始化程序
在系统开始工作的时候,先要对全局变量进行定义和初始化,再对整个系统的子程序进行声明。全局变量包括暂存键入代码的数组userpsw[16]、暂存第一遍新密码的数组Newpsw1[16]、按键按下标志keyon、切换键按下次数qhcount、长时报警标志alarm、输错次数errcount、输入位数inputbit、无键按下计数器sleepcount、长时报警计数器llarmcount、设置密码标志pswset、密码错误标志pswerr等;主程序中设定有变量按键值keyv.
3.1.2 定时器1设置程序
电子密码锁系统要对两种情况进行计时:一是系统无操作(即无按键按下)达10 min左右,单片机进入睡眠模式以降低系统功耗;二是当连续三次输错密码,电子锁系统发出5 min左右的长时报警。为了充分利用单片机的硬件资源,不占用CPU,优化系统程序运行,设置定时器1以中断方式计时。由于单片机采用8MHz晶振,因此,对于16位定时器1在Timer1_Init()中可配置如下:
{
SREG=0x80;
TCNT1H=0x85;
在碳水化合物不足的情况下,机体会动用脂肪供能维持生命,但脂肪在碳水化合物不足的情况下不能被彻底氧化而产生酮体,如果酮体不能及时被氧化就会在体内堆积而导致酮症酸中毒,过多的酮体对宝宝的神经发育和大脑发育不利,所以孕妇应该保证每日的碳水化合物的摄入,以维持正常的血糖水平和预防酮体的产生。每日碳水化合物不能少于150克,换算成主食大约为200克。
TCNT1L=0xEE;//置计数初值,设定时时间为//1 s
TCCR1A=0x00;//普通模式
TCCR1B=0x04;//256分频
TIMSK=0x04;//使能定时器溢出中断
}
以使单片机每过一秒进入定时器1中断子程序TIMER1_OVF_interrupt(),实现逐秒计时功能。
3.1.3 外部中断0设置程序和单片机睡眠模式
{
GICR&=0xBF;//关闭INT0中断
MCUCR=0x20;//INT0低电平触发;设睡//眠模式为掉电模式
GIFR=0x40;//清除INT0中断标志位
SREG|=BIT(7);//开启总中断
}
当无按键按下超过10 min,即计时时间sleepcount>=600(s)时,在主程序中用GICR|=0x40使能外部中断INT0;并置位寄存器MCUCR的SE位,即MCUCR|=0x40,然后执行指令SLEEP()使单片机进入睡眠状态。当有按键按下时,单片机的PD2(INT0)的输入会由“1”变“0”,使INT0低电平触发唤醒单片机。
3.1.4 键码识别程序和开锁设密及报警程序
当系统确定有键按下,即keyon为1时,系统进入键盘扫描子程序keyscan(),得到按键值keyv,再进入键码识别程序keyprocess(keyv),根据键值keyv调用不同的按键功能,见表1.键码识别程序流程图如图7所示。在开锁的过程中,用户键入的密码会逐位暂存在数组userpsw[]中。键入完密码后,按下确认键,系统进入开锁设密及报警程序KSSM(),把键入的密码与保存在EEPROM的开锁密码进行比较。如果密码校验为正确,则给出开锁信号,同时清零密码错误标志pswerr=0.如果键入代码与开锁密码不一致,则系统发出提示。若用户连续3次输入不正确,即输错次数errcount=3,密码锁将会发出约5min的长时报警声。若在报警期间,键入结束报警代码,可停止报警。电子锁要在长时报警结束后才允许新一轮开锁或设置新密码操作。用户若要设置新密码,则按下设定键,此时设置密码标志pswset=1、密码错误标志pswerr=1.只有在开锁成功的情况下,即pswerr= 0、pswset=1时,才允许设置新密码;为防止误设密码,要求输入两遍一致的新密码,密码设置才能成功。可见当按下确定后,开锁设密及报警程序根据不同的条件来分别实现开锁、设置密码、输入密码错误报警的功能,其流程图如图8所示。
图7 键码识别程序流程图
图8 开锁设密报警程序流程图
3.1.5 密码字符的切换
矩阵键盘上密码键只有12个,为了完整表示数字(0~9)和大写字母(A~Z)共36个字符,则要求每个密码键能表示3个字符(见图2)。因此,可设计切换键来切换同一密码键上的字符。实现切换的原理见图9.其工作原理大致如下:在输入代码过程中,若想得到某个密码键的第二或第三位代码,可先按切换键,再按密码键;系统会计算连续按下切换键的次数qhcount++,再对3求余,即qhcount=qhcount%3。当qhcount为0时(或不按切换键),键入为首位字符(0~9和A~B);当qhcount为1时,键入为第二位字符(C~N);qhcount为2时,则为第三位字符(O~Z).
图9 密码键字符切换流程图
3.2 定时器1中断子程序的设计
单片机每秒进入一次定时器1中断进行计时,在中断程序TIMER1_OVF_interrupt()中分别对两种情况计时:一是用语句sleepcount++计时无操作时间,以控制单片机进入睡眠模式;二是用长时报警计数器llarmcount++实现长时报警定时,当长时报警结束时间到,即计时到llarmcount>=300(s)时,发出结束报警指令。
4 结论
本文设计了一种以AVR单片机为控制核心的电子密码锁系统。单片机接受由矩阵键盘键入的密码后,与存贮在EEPROM的开锁密码作比较,如果密码输入正确,就将锁打开;如果密码输入错误,只要错误次数不超过三次,则允许重新输入密码开锁;若错误次数超过三次,则系统发出警报。用户还可以自行设置新密码。在设计中采用了UPS技术,从而大大提高了电子密码锁的安全可靠性。经实验验证密码锁系统设计达到了预期的效果,且成本低,易操作,可适用于家具、办公和住宅等智能控制系统中。
[1]马潮,詹卫前,耿德根.ATmega8原理及应用手册[M].北京:清华大学出版社,2003.
[2]Hutter M,Schwabe P.Multiprecision multiplication on AVR revisited[J].Journal of Cryptogra-phic Engineering,2014(06):1-14.
[3]Spale J.Home Automation with a low-cost AVR-based Board[J].IFAC-PapersOnLine,2015,48(4):398-403.
[4]潘雪峰,李腊元,杨威棣.单片机电子密码锁加密模块的研究与设计[J].自动化仪表,2012,33(05):70-72,76.
[5]王国龙.基于单片机的多功能电子密码锁[J].信息技术,2013(08):107-110.
[6]韩团军.基于单片机的电子密码锁设计[J].国外电子测量技术,2010(7):58-61.
[7]陈珍军,赵秋霞,李亚敏.基于ARM和ZigBee的智能家居系统研究与设计[J].中国科技论文,2015,10(5):584-587.
[8]张雪峰,李荣源,袁海文.一种用N+1个I/O口实现的N×N矩阵式键盘[J].单片机与嵌入式系统应用,2001(11):31-33.
[9]李学海.电压检测器HT70XX系列及其应用[J].现代通信,1999(3):24-25.
Design of an Electronic Lock Control System Based on AVR
XU Jian-qin1,LI Ke-ne2,LIANG Qi-feng1
(1.Engineering Training Center,Guangxi University of Science and Technology,Liuzhou Guangxi 545006,China;2.Guangxi University of Science and Technology,School of Electrical and Information Engineering,Liuzhou Guangxi545006,China)
The design of an electronic lock control system was presented in this article and ATmega16L was used as the main control unit for this system.This system memorized the password in the built-in EEPROM storage. With the matrix keypad operation,users could realize unlocking and password resetting functions.An UPS guaranteed the normal operation of the system even if there was a power failure.The efficiency of the system could be improved while using the sleep mode of the MCU,this would extend the working length of the UPS when it was out of power.The system could also reduce the load of the CPU by using the internal timer,and simultaneously,guarantee the stable operation of the system.The application of the MCU simplifies the design of the system and also boosts the safety of the system.
electronic lock;microcontroller;matrix keypad;password
TP368.1
A
1672-545X(2017)02-0063-05
2016-11-23
广西高等学校科研项目资助(2013YB175);广西科技大学博士启动基金(院科博12Z05)
徐剑琴(1979-),女,广西北海人,讲师,硕士研究生,主要从事电工电子技术方面的教学与研究。