湖南文理学院芙蓉学院本科生毕业论文(设计)题 目: 电子密码锁设计 学生姓名: 皇 俊 学 号: 08090121 专业班级: 电信0801班 指导教师: 王 先 春 完成时间: 2012年5月 目 录摘要第一章 绪论 1.1背景 …………………………………………………………………………21.2电子密码锁的发展趋势………………………………………………………21.3电子密码锁的特点 …………………………………………………………31.4设计方案简介…………………………………………………………………3第二章 硬件系统构成2.1设计原理………………………………………………………………………42.2电路总体构成…………………………………………………………………52.3键盘输入电路…………………………………………………………………62.4密码存储电路…………………………………………………………………62.5复位电路………………………………………………………………………72.6晶振电路………………………………………………………………………82.7显示电路………………………………………………………………………82.8报警电路………………………………………………………………………92.9开锁电路 ……………………………………………………………………10第三章 软件程序设计3.1主程序流程图…………………………………………………………………113.2按键软件设计…………………………………………………………………123.3密码设置软件设计……………………………………………………………133.4开锁软件设计…………………………………………………………………14第四章 调试与实现4.1硬件调试 ……………………………………………………………………154.2软件调试 ……………………………………………………………………164.3 Pruteus仿真 ………………………………………………………………16结论 致谢 参考文献 附录 电子密码锁设计电子密码锁设计电子信息科学与技术专业学生:皇俊指导老师:王先春摘要:本文从经济实用的角度出发,采用美国Atmel公司的单片机AT89C51作为主控芯片与数据存储器单元,结合外围的矩阵键盘输入、LCD液晶显示、报警、开锁等,用C语言编写的主控芯片控制程序与EEPROM AT24C02读写程序相结合,并用Keil软件进行编译,设计了一款可以更改密码,具有报警功能的电子密码控制系统。
这种密码锁的电路设计具有防试探按键输入、智能控制上锁、开锁、报警、修改密码等多种功能关键词: 密码锁 单片机 LCD显示 Design of Electric Password LockElectronics and Information Science and Technology Candidate:huangjunAdvisor:wangxianchunAbstract:This article is based on the economical and practical point of view, uses the United States Atmel Corporation AT89C51 microcontroller as a master chip and the data memory unit, it combines with the external matrix keyboard input, LCD digital display, alarm, unlock and so on circuits, dominates by the C programming language chip EEPROM of the control procedures and carries on the translation with Keil software, the password can be changed , the electronic the password control also has the alarming function. This password lock circuit design has anti-test button input, intelligent control lock, unlock, alarm and change the password multiple functions. Key Words: Password lock; MCU; LCD Display 第一章 绪 论1.1 背景随着社会物质财富的日益增长,安全防盗已成为社会问题。
而锁自古以来就是把守门户的铁将军,人们对它要求甚高,既要安全可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题目前国内,大部分人使用的还是传统的机械锁然而,眼下假冒伪劣的机械锁泛滥成灾,互开率非常之高所谓互开率,是各种锁具的一个技术质量标准,也就是1把钥匙能开几把锁的比率经国家工商局、国家内贸局、中国消协等部门对锁具市场的调查,发现个别产品的互开率居然超标26倍为何弹子锁的“互开率”会如此之高?据有关专家人士剖析,弹子锁质量好坏主要取决于弹子数量的多少以及弹子的大小,而弹子的多少和大小受一定条件的限制此外,即使是一把质量过关的机械锁,通过急开锁,甚至可以在不损坏锁的前提下将锁打开机械锁的这些弊端为一种新型的锁---电子密码锁,提供了发展的空间1.2 电子密码锁的发展趋势日常生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决目前门锁主要用弹子锁,其钥匙容易丢失;保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高,且易出现故障,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣针对这些锁具给人们带来的不便若使用机械式钥匙开锁,为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
由于电子器件所限,以前开发的电子密码锁,其种类不多,保密性差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但很不安全,在后为多是基于EDA来实现的,其电路结构复杂,电子元件繁多,也有使用早先的20引角的2051系列单片机来实现的,但密码简单,易破解随着电子元件的进一步发展,电子密码锁也出现了很多的种类,功能日益强大,使用更加方便,安全保密性更强,由以前的单密码输入发展到现在的,密码加感应元件,实现了真真的电子加密,用户只有密码或电子钥匙中的一样,是打不开锁的,随着电子元件的发展及人们对保密性需求的提高出现了越来越多的电子密码锁出于安全、方便等方面的需要许多电子密码锁已相继问世但这类产品的特点是针对特定有效卡、指纹或声音有效,且不能实现远程控制,只能适用于保密要求高且供个人使用的箱、柜、房间等由于数字、字符、图形图像、人体生物特征和时间等要素均可成为钥匙的电子信息,组合使用这些信息能够使电子防盗锁获得高度的保密性,如防范森严的金库,需要使用复合信息密码的电子防盗锁,组合使用信息也能够使电子防盗锁获得无穷扩展的可能,使产品多样化,对用户而言是“千挑百选、自得其所”可以看出组合使用电子信息是电子密码锁以后发展的趋势。
1.3 电子密码锁的特点电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的其性能和安全性已大大超过了机械锁,主要特点如下:1. 保密性好,编码量多,远远大于弹子锁随机开锁成功率几乎为零2. 密码可变 用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降3. 误码输入保护当输入密码多次错误时,报警系统自动启动,防止试探密码1.4 设计方案简介采用以单片机为核心的控制方案:由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理选择,以期获得最佳的性价比一般来说在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些的还有一些最基本的比如:中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等基于以上因素本设计选用单片机AT89C51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。
在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接AT24C02芯片用于密码的存储,外接LCD1602显示器用于显示作用当用户需要开锁时,先按键盘开锁键之后按键盘的数字键0-9输入密码密码输完后按下确认键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;当用户需要修改密码时,先按下键盘设置键后输入原来的密码,只有当输入的原密码正确后才能设置新密码新密码输入无误后按确认键使新密码将得到存储,密码修改成功第二章 硬件系统设计2.1 电子密码锁设计原理本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成其中矩阵键盘用于输入数字密码和进行各种功能的实现由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈本系统共有两部分构成,即硬件部分与软件部分其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
AT89C51键盘输入复位电路存储电路晶振电路电源输入显示电路报警电路开锁电路图 1 电子密码锁原理框图2.2 电路总体构成在确定了选用什么型号的单片机后,就要确定在外围电路,其外围电路包括电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,根据实际情况键盘输入部分选择4*4矩阵键盘,显示部分选择字符型液晶显示LCD1602,密码存储部分选用AT24C02芯片来完成图 2 电路原理图2.3 键盘输入电路由于本设计所用到的按键数量较多而不适合用独立按键式键盘采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多/O口本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等键盘的每个按键功能在程序设计中设置 其大体功能(看键盘按键上的标记)及与单片机引脚接法如图3所示:图 3 键盘输入原理图2.4 密码存储电路AT24C02是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。
其电路如图4所示图4密码存储电路图中1、2、3脚是三条地址线,用于确定芯片的硬件地址,在AT89S51上它们都能接地,第5脚和第8脚分别为正、负电源AT24C02中带有片内地址寄存器,每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个储存单元的读写,所有字节均以单一操作方式读取2.5 复位电路单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC=0000H,使单片机从第—个单元取指令无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位在复位期间(即RST为高电平期间),P0口为高组态,P1-P3口输出高电平;外部程序存储器读选通信号PSEN无效地址锁存信号ALE也为高电平根据实际情况选择如图2-8所示的复位电路该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。
增加手动复位按键是为了避免死机时无法可靠复位当复位按键按下后电容C1通过R5放电当电容C1放电结束后,RST端的电位由R11与R15分压比决定由于R11<
当密码输入完成时,按下确认键,如果输入的密码正确的话, LCD子显示“RIGHT”,单片机其中P2.0引角会输出低电平,使三极管T2导通,电磁铁吸合,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“ERROR”,P2.0输出的是高电平,电子密码锁不能被打开通过LCD显示屏,可以清楚的判断出密码锁所处的状态 其显示部分引脚接口如图7所示:图 7 显示电路原理图2.8 报警电路报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P2.1引脚为低电平,三极管T3导喇叭发出噪鸣声报警如图8所示:图 8 报警电路原理图2.9 开锁电路通过单片机开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的其原理如图9所示单片机控制器开锁驱动电路电磁锁图 9密码锁开锁机构示意图当用户输入的密码正确时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的电路由驱动和开锁两级组成由D1、R12、Q1组成驱动电路,其中Q1可以选择普通的小功率三极管如8050、9018都可以满足要求D1是开锁指示灯;由D2、C5组成开锁。
其中D2、C5是为了消除电磁锁可能产生的反向高电压以及可能产生的电磁干扰电磁锁的选用要视情况而定,但是吸合力要足够且有一定的余量在设计中,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁 图10 开锁电路原理图第三章 软件程序设计本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成3.1主程序流程图如图11 为主程序流程图,开始接上电源,程序进行初始化设置,然后在键盘上输入密码,此系统进行键盘扫描,密码正确,开锁成功,密码错误3次出错报警,选择是否修改密码,若要修改密码,先输入旧密码,密码正确后设置新密码,错误时报警,需要两次确认新密码,确认后,密码修改成功,否则结束最终返回然后启动程序,进行保护,再次在键盘上输入密码,系统进行扫描,如果和之前一样,则执行相同程序,如不是,则执行另一种程序开始初始化次数加1输入密码密码正确?返回NYY开锁程序开锁?N修改密码?次数>3?报警程序修改程序YNNY图11主程序流程图3.2 按键软件设计如图12按键功能流程图,在按键当中,有与输入、开锁、清除、设置、确认的程序相对应的按键,并按顺序与输入的数相比较,当输入正确时,进入密码程序,错误时进行清除,输入两次新密码正确时,可进行重新设置密码,最后确认程序。
开始键值=‘输入’?键值=‘开锁’?键值=‘清除’?键值=‘设置’?键值=‘确认’?密码输入程序设置程序清除程序开锁程序确认程序YYYYYNNNN返回N图12 按键功能流程图3.3 密码设置软件设计如图13为密码设置流程图,开始按下设置键,输入旧密码,如果错误累计三次,进行报警程序如果输入正确,可以修改密码,确认后再次输入新密码,如果两次输入一样,则输入成功如果两次输入的新密码不一样,则修改密码失败,重新返回设置新密码输入旧密码N按下设置键开始所输入旧密码正确?输入次数加1报警程序N返回次数>3?输新密码Y再次输新密码Y设置成功NY两次新密码输入相同? 图13 密码设置流程图3.4 开锁软件设计如图14开锁流程图,开始时按开锁键,输入密码,如果输入正确,则开锁成功如果输入错误累计达到三次,则执行报警程序初始化按开锁键输入密码按确认键所输入密码正确?Y开锁开始输入次数加1次数>3?报警程序返回NYN 图14 开锁流程图 第四章 调试与实现4.1 硬件调试单片机应用系统的硬件调试和软件调试是分不开的.许多硬件故障只有通过软、硬件联调才能发现,但一般是先排除系统中比较明显的硬件故障后才和软件一起联调。
常见的硬件故障: (1)逻辑错误 硬件的逻辑错误是由于设计错误和焊接过程中的工艺错误而造成的,包括错线、开路、短路等,其中最常见的是短路故障 (2)元器件错误 元器件错误的原因有器件损坏或性能不符合要求,电解电容、二极管的极性接反或集成块装反等 (3)可靠性差 应用系统可靠性差的原因很多,如内部和外部的干扰、电压纹波系数过大、器件负载过重等均会造成系统的可靠性差另外,走线和布置的不合理也会造成系统可靠性差 (4)电源故障 电源故障包括:电压值不符合设计要求、电源功率不足、负载能力差、纹波太重等 硬件调试办法 脱机调试是在加电前,先用万用表等工具,按图纸仔细核对线路是否正确,并对元器件的安装、型号、规格等进行仔细检查,特别焊接时有无走线之间相互短路等 4.2 软件调试程序在KEIL C51上调试,采用模块程序设计技术,则逐个模块调好后再进行系统程序总调 对于模块结构程序.要一个个子程序分别调试调试时,一定要符合入口条件和出口条件,调试可用单步运行和断点运行方式,通过检查用者系统的CPU现场情况、RAM的内容和I/O口的状态,检测程序执行结果是否符合设计要求,有无循环错误、有无机器码错误以及转移地址的错误,同时,还可以发现系统中存在的硬件设计错误和软件算法错误。
各程序模块通过后,则可以把相关功能块连在一起进行总调这个阶段若有故障,可以考虑各子程序运行时是否破坏了现场,缓冲单元、工作寄存器是否发生冲突,标志位的建立和清除是否有误,堆栈区是否有溢出,输入设备的状态是否正常等等,若用者系统是在开发机的监控程序下运行时,还要考虑用者缓冲单元是否和监控程序的工作单元发生冲突 单步和断点调试后,还应进行连续调试,用以确定定时精度、CPU的实时响应等问题 当全部调试和修改完成后,将程序固化到AT89S51中进行整机调试各功能实现则调试完成4.3 Proteus仿真在硬件和软件都能实现的条件下,利用Proteus进行仿真,通过不停的调试与改正, 最后终于实现了密码锁的功能,Proteus仿真结果如图15所示: 图15 仿真图当连好各个模块电路的导线后,导入芯片程序,运行该密码锁仿真电路,通过按键可以进行密码锁的开锁,修改密码,错误密码3次以上报警的操作,LCD显示屏显示相应的操作现象,密码正确可以开锁,进而可以修改密码,密码错误三次以上由喇叭发出报警声,如果系统出现错误还可以通过复位电路进行复位总之,在原有的理论基础上,通过Proteus能够成功的进行密码锁基本操作的仿真,实现了相关的功能。
结 论本设计从经济实用的角度出发,采用美国Atmel公司的单片机AT89C51与低功耗CMOS型E2PROM AT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、显示、报警、开锁等电路并用汇编编写主控芯片的控制程序,研制了一款可以多次更改密码具有报警功能的电子密码锁设计完全可行可以达到设计目地使用单片机制作的电子密码锁具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方便等特点,可应用于住宅、办公室的保险箱及档案柜等需要防盗的场所,有一定的实用性该电路设计还具有按键有效提示,输入错误提示,控制开锁电平,控制报警电路,修改密码等多种功能可在意外泄密的情况下随时修改密码保密性强,灵活性高 致 谢四年的大学生活不知不觉中就要结束了,在这段难忘的生活中,有许多美好的回忆,在毕业论文设计之中,我的老师和我的同学都不吝的指导我,我需要感谢的人太多太多,首先要感谢我的学校,感谢在这四年中让我领悟到诚实做人,踏实做事,扎实做学问的深刻道理,让我从一个懵懂得高中生变成一个成熟的大学生,其次我要感谢的是我的导师王先春老师虽然生老师平日里工作繁多,但在我做毕业设计的每个阶段,都给予我悉心的指导和帮助,关心我们每个阶段所做的工作,当然,还要感谢寝室的兄弟们在我完成论文的过程中给予我的帮助和鼓励,也是他们陪我度过了这四年的生活,感谢能有这段美好的记忆。
参考文献[1]谢维成,杨加国.单片机原理与应用及C51程序设计[M].北京:清华大学出版社[2] 何立民. 单片机高级教程[M]. 北京;航空航天大学出版社[3] 周立功. 单片机实验与实践教程[M]. 北京;航空航天大学出版社[4] 江志红. 51单片机技术与应用系统开发[M]. 清华大学出版社[5]林志琦,郎建军,李会杰等.基于PROTEUS的单片机可视化软硬件仿真[M].北京:北京航空航天大学出版社[6] http://172.16.209.164/dzqk.htm湖南文理学院图书馆电子文献资料 附 录/*电子密码锁*/void convert_code(uchar *string) //密码转换{ uchar counter=0; for(counter=0;counter<6;counter++) { switch(*string) { case no0: *string=0x00; break; case no1: *string=0x01; break; case no2: *string=0x02; break; case no3: *string=0x03; break; case no4: *string=0x04; break; case no5: *string=0x05; break; case no6: *string=0x06; break; case no7: *string=0x07; break; case no8: *string=0x08; break; case no9: *string=0x09; break; default: break; } string++; }}bit compare_string(uchar *string1,uchar *string2) //密码比较{ uchar counter; for(counter=0;counter<6;counter++) { if(string1[counter]!=string2[counter]) return(0); } return(1);}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)) { lcm_write_data('*'); keysound(); password[counter]=key; } if(key==backspace) { if(counter>0) { lcm_setxy(--counter,2); lcm_write_data(' '); password[counter]=0x00; lcm_setxy(counter,2); counter--; keysound(); } } if(key==enter) { lcm_setxy(0,1); keysound(); return(0); } } if(counter==6) { do{ key=get_key(); } while((key!=backspace)&&(key!=enter)); if(key==backspace) { lcm_setxy(--counter,2); lcm_write_data(' '); password[counter]=0x00; lcm_setxy(counter,2); counter--; keysound(); } if(key==enter) { keysound(); return(1); } } }}void int_service(void) using 0 interrupt 0 //密码初始化中断函数{ EA=0; EX0=0; lcm_write_cmd(0x01); lcm_write_cmd(0x06); lcm_setxy(0,1); lcm_write_string(" reset success! "); longdelay(3); I2C_send_string(temp5_password,6,0x00); EA=1; EX0=1; return; } void main(void){ IT0=1; EX0=1; EA=1; led=1; lcm_init(); while(1) { lock(); }} 20。