《基于单片机的电子密码锁设计毕业设计说明书(论文)(29页).doc》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁设计毕业设计说明书(论文)(29页).doc(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于单片机的电子密码锁设计毕业设计说明书(论文)-第 24 页南京理工大学毕业设计说明书(论文)作 者:* 学 号:1004220* 系:电子工程与光电技术学院专 业:通信工程 题 目:基于单片机的保险柜电子密码锁的设计与实现高级工程师 *指导者: (姓 名) (专业技术职务)评阅者: (姓 名) (专业技术职务)2014 年 5 月设计说明书摘要摘要在日常生活和工作中,锁是每个人都离不开的,它是保护个人财产安全、保护资料档案的关键元素。随着电子技术的飞速发展,传统弹子锁的缺点渐渐被放大,社会对新式电子密码锁的需求越来越大,前景广阔。本次设计基于单片机,其主控芯片选择了单片机AT89S51,
2、显示模块选择了LCD1602,结合了自行设计的矩阵键盘、报警模块等外围电路,主控芯片的控制程序则使用C语言写成,完成了一套具有按键输入、显示、解锁、报警及密码修改等多种功能的电子密码控制系统。本论文详细叙述了各个模块的功能和设计方案,给出了系统各个功能的仿真结果截图。关键词 单片机 电子密码锁 矩阵键盘 LCD显示 报警 毕业设计说明书(论文)外文摘要Title The Design of Electronic Password Lock Based on SCM AbstractIn daily life and work, everyone is inseparable from the
3、lock, which is the protection of personal and property safety, the protection of data files. With the rapid development of electronic technology, the shortcomings of traditional tumbler lock gradually been enlarged, the demand for new electronic locks increasingly broad prospects. This design is bas
4、ed on the microcontroller, its main chip microcontroller chosen AT89S51, display module chosen LCD1602, a combination of self-designed matrix keyboard, alarm module and other peripheral circuits, the master chip control program is written in C language . From the design, we got an electronic passwor
5、d control system which has variety of functions: key input, display, unlock, password changing and alarm.This article details the features and design of each module, the simulation results of the various functions of the system screenshot.Keywords Electronic password lock SCM Matrix keyboard LCD Dis
6、play Alarm目 录 1 引言11.1 课题背景和意义11.2 电子密码锁的发展趋势11.3 本设计要实现的目标21.4 设计方案的选择22 主要原件介绍52.1 主控芯片AT89C51简介52.2 LCD1602显示器介绍72.3 晶体振荡器93 系统设计103.1 整体思路103.2 系统硬件部分设计113.2.1 键盘输入电路113.2.2 复位电路123.2.3 晶振电路123.2.4 显示电路133.2.5 报警、解锁提示电路143.3 系统软件部分设计153.3.1 主要程序流图153.3.2 按键检测子程序设计153.3.3 LCD显示子程序设计173.3.4 密码修改子程
7、序设计183.3.5 报警声音子程序设计194 仿真调试224.1 PROTEUS ISIS简介224.2 软件调试224.3 PROTEUS仿真245 结论29致谢30参考文献31附录A 电子密码锁程序源代码321 引言1.1 课题背景和意义自从人类脱离原始社会、开始有私有财产的概念以来,锁就是人们生活中的重要组成部分。它的存在,维护了人们的财产安全、人身安全,增加了人们的安全感,促进了社会和谐。因此,人们对锁的研究从未停止,但几千年来都未有较大的变化,直到20世纪30年代后,电子密码锁的概念出现,这一领域终于出现了日新月异的进步。得益于电子技术的飞速发展,电子密码锁的功能愈来愈完善,取密码
8、量相对较少、安全性不好的常规锁具已然是大势所趋。电子密码锁拥有太多机械锁完全无法相比的优点。它不但能完成“锁”自身的功用,还可以具有记忆、辨识、警报等特别的作用。因为电子密码锁更安全性、更便宜、易操作,越来越多人开始关注这一领域。当前在第一世界国家中,密码锁技术已经比较成熟,拥有不同的种类,在各类智能门禁系统中,电子密码锁的使用十分普遍,使得门禁的实现有了数种安全、可靠的技术来支持。总的来说,中国目前的密码锁技术还只有世界上70年代左右的水平,生产仍显昂贵。当前,按键式电子锁仍占据了中国市场的大头,国内有若干厂家引进了海外较为先进的按键式和卡片钥匙型锁。另一方面,中国自主研发的电子锁还没有形成
9、成型的产业链,尚未普及。现在国内有不少企业引进了当前世界上先进的技术,发展前景非常可观1。相信国内的厂商也会不断进步,使得电子密码锁普及在中国的土地上。1.2 电子密码锁的发展趋势在大家的日常生活中,住所和单位的安全保障,档案、财务报表和大多数私人资料、文件的保护基本用上锁的办式来实现。现在门锁大都使用弹子锁,这种锁钥匙易丢失、仿制也并不困难;保险箱最常见的就是使用机械密码锁,它的构造很麻烦,制作精度要有相当高的保障,这种情况下,成本就很难降下来,不仅如此,机械密码锁的缺点依然明显:故障率居高不下,使用者往往要携带数把钥匙,易用性很成问题。前述锁具有着这样多的不便,而人们对锁的需求又是巨大的,
10、一种使用密码来代替钥匙的锁具就成为了必然出现的产品。电子密码锁的出现,大大提高了人们的生活水平,提供了诸多便利,这也同时意味着巨大的市场,前景一片光明。由于电子器件的限制,上世纪制造的电子密码锁,不仅类型少、易破解,锁具最关键的开锁环节也仅仅是依赖基础的模拟电子开关,工艺简单却存在相当大的安全隐患;之后,数字电路的飞速发展,使得电子密码锁的电路结构复杂性逐渐增加、元件数量逐渐增多,早先单片机刚普及时也曾使用2051系列单片机来实现,但密码简单,易破解2 。随着电子技术的进一步发展和大众对保密要求的增强,电子密码锁的种类日益繁多、功能渐趋全面,操作更加便捷,安全保密性更强:由以往单纯的键入口令发
11、展到今天新增了感应元件(想要开锁,必须同时有密码和电子钥匙),做到了更加稳妥的电子保密。社会对电子密码锁安全性、易用性的需求,使得多种产品相继问世。但它们中的大多数仅仅是针对特定的声纹、指纹,并且无法做到远程控制,只能用在保密要求较高的私人用途上。事实上,数字、字母、图象、生物体征以及地点等因素都能够作为密钥的信息来源,上述信息的排列组合完全可以把电子密码锁的保密性推向更高的高度。与此同时,信息要素的组合也使得电子密码锁得到了无限拓展的可能性,产品将越来越多变,对用户而言就有了很大的挑选余地。由此可以看出组合使用电子信息是电子密码锁今后发展的趋势3。1.3 本设计所要实现的目标本设计基于单片机
12、。使用AT89C51作为主控芯片,结合外围电路组成一个电子密码控制系统。用户若想开锁,必须输入正确的密码,错误则有文字及声音提示并要求重新输入。密码锁同时具有修改密码的功能,修改密码时,必须键入正确的原密码进行验证,然后输入新密码。1.4 设计方案的选择1.4.1 主控部分选择方案一:采用数字电路控制。把74LS112双JK触发器当作系统的中心,搭配其他原件组成数字逻辑电路。在功能上,可以设置9个按键,选择其中4个作为有效的密码按键,并将其它按键均设定为干扰按键,当按下干扰按键时,就将键盘输入电路复位,使得前面输入的密码无效化,要求重输;如果用户输入密码的时间超过10秒,电路将报警20秒,若电
13、路连续报警三次,电路将锁定键盘2分钟,防止他人的非法操作4。采用数字电路设计方案时设计虽然简单,但控制的准确性和灵活性差。故不采用。方案二:采用单片机控制方案单片机当前的类型很多,各种型号的应用环境都各有不同,在选用时就有了更多的选择,使我们可以多加比较、以便选择最为合适的型号,获得更好的性能/价格比。下列关键词往往应该成为考虑时最需关注的方面:性能、串行接口、工作电压、存储器、模拟电路功能、抗干扰性、运行速度、封装形式、I/O口、功耗、定时/计数器、保密性。除此以外,在单片机开发过程中还会产生影响有开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等因素 5。 考虑到方方面面,本设
14、计采用了AT89C51作为核心芯片,单片机提供的I/O端口虽有限,但端口复用或扩展、结合有效的控制程序,实现基本的密码控制功能是十分简单的。单片机的外围电路主要包括:一块外接矩阵键盘(用来密码输入、控制程序流向),一块LCD显示屏(用来作为系统的输出,对用户的操作进行反馈)。当用户进行开锁时,首先利用键盘上的09完成密码的输入,而后确认,若正确则解锁,否则保持锁定状态并要求重新输入,在适当的时机可发出报警声。在用户进行密码修改操作时,首先要输入原密码,只有当输入和原密码匹配时才会允许设置新密码,新密码设置完成后按确认键则保存。显然,方案二的功能丰富,控制方便,有较好的准确性,在保证保密的同时还
15、能进行功能的拓展。基于以上原因,我在此采用方案二,即使用单片机AT89C51结合外围接口电路来完成本此设计。1.4.2 密码输入方式选择方案一:声纹输入识别所谓声纹(Voiceprint),是用电声学仪器显示的携带言语信息的声波频谱,人类语言的产生是人体语言中枢与发音器官之间一个复杂的生理物理过程6。人的发声器官大致有以下几种:舌、齿、头、肺、鼻,虽然人们都是用这些器官来发声,但不同人的这些器官会存在尺寸或外形的较大差别,因此任意两人的声纹图谱都会存在差别。另一方面,在一定的年龄段内,每个人的声音特征都不会发生太大变换,相对稳定,所以人们一般可以区分出不同人的声音或判断是否是某一个特定人的声音
16、。在作为电子锁的输入时,系统会分析所输入声音的声学特征(如反射系数、共振峰、频谱、倒频谱、基音等),并与先前保存的样本进行对比,通过计算机计算出两者的相似度,并以此判定输入的正确性。考虑到本方案过于复杂,且有不低的成本,因此我们不采用。方案二:矩阵键盘输入识别矩阵键盘的每一行、每一列均相连,引出连接到一个I/O口上,按键设在每一个行线和列线的交叉处,每当有一个键按下就使得某一条行线与某一条列线相接通,只要确定接触的是哪两条线,即哪两个I/O口线,就可以确定哪一个键被触动7。此方案相对简单、易于实现,因此采用之。2 主要元件介绍2.1 主控芯片AT89C51简介AT89C51是一款工作电压低、高
17、性能的8位微处理器(即通常所说的单片机)。这款单片机拥有自己的可编程可擦除只读存储器,容量为4K字节,可以反复擦写100次。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器8。2.1.1 主要特性 与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24MHz 三级程序存储器锁定 1288位内部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路2.1.2 管脚功能说明:AT89C51芯片的引脚图如下: 图2.
18、1 AT89C51芯片引脚图 VCC:供电电压。 GND:接地。 P0-P3口均为8位双向I/O端口,但又有所不同。P0口:第一次将P1口的管脚写为“1”的时候,这8位的端口都会变为高阻状态。P0可以用于连接外部程序数据存储器,同时,P0口也能被定义成数据/地址的低八位。P1口:内部提供上拉电阻,其缓冲器可以吸收的门电流量为4TTL。将P1口的管脚写为“1”时,整个P1端口会被内部的上拉电阻上拉为高电平。P2口:内部同样带有上拉电阻。P2口缓冲器既允许接收电流,又允许输出电流。当P2口被写“1”时,其作用与P1口完全相同。 P2口的特殊用途在于连接外部的程序存储器和16位地址的外部数据存储器。
19、若作为16位地址的一部分时,P2口输出所需地址高八位,和P0口相配合。除此以外,它还可以利用内部拥有上拉电阻的便利,当对外部的数据存储器实行读写操作(仅限8位地址)时,输出它特殊功能寄存器中的内容。P3口:P3口的基本用途和性质与其他端口并无不同,只是它可以作为单片机的特殊功能口,列于下表中:表2.1 P3口功能(P3口同时为闪烁编程和编程校验接收一些控制信号)2.1.3 振荡器特性 单片机AT89C51允许用户自行外接合适频率的晶体振荡器,最常使用的不外乎石晶振荡和陶瓷振荡。当配置为片内振荡器时,反向放大器输入端口应接XTAL1、输出端口应当接XTAL2。当使用外部时钟源时,不接XTAL2。
20、此处外部时钟信号的脉冲宽度可以是任意的。2.1.4 芯片擦除想在任何已存有信息的存储字节上重复编程,首先必须对芯片进行擦出操作。 AT89C51芯片的擦出方法为:ALE管脚接低电平10ms,同时搭配以适当的控制信号组合,此种操作会将代码阵列全部写为“1”。此外,AT89C51设有两种掉电模式。用户可以自主选择:一是“闲置模式”,此模式下CPU将会挂起,但RAM,定时器,计数器,串口以及中断系统仍会处于工作状态;二是“掉电模式”,此时保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止9。 2.2 LCD1602显示器介绍液晶显示模块主要用于为系统提供输出,可显示图形、数
21、字或专用符号等信息,这一元件在电子产品中相当常见。在本次设计中我们选用LCD1602显示模块,这一型号有诸多优点,如显示自由度高、体积小、耗能少等。 LCD1602可显示2*16 个字符,有RS,R/W,EN三个控制端口和8位数据总线D0-D7,工作电压为5V,并且具有字符对比度调节和背光功能10。它的主要特性如下:内含复位电路,对比度可调通过控制命令可以实现实现多种功能。内部有一显示数据存储器DDRAM,其容量为80字节。拥有200个5*7的字符发生器CGROM,其中8个可由用户自定义。1602型LCD的接口引脚说明如表2.2所示。表2.2 LCD1602引脚说明编号符号功能编号符号功能1V
22、SS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极1602型LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA模块最佳工作电压:5.0V字符尺寸:2.954.35mm(宽高)常用指令见下表:表2.3 LCD1602常见指令2.3晶体振荡器晶体振荡器(简称晶振)可以产生一定频率的时钟信号,这一信号经过调频后可成为处理器中各处的总线频率。现在使用最多当属石英晶体振荡器,也称石英晶体谐振器
23、。石英晶体振荡器具有精度高和稳定度高的优点,它同时可以作为一种晶体谐振元件实现LC谐振回路的功能:稳定频率和选择频率。石英晶体振荡器在生活中的电子设备里随处可见,为它们产生时钟信号,应用在在单片机中时也是如此。石英晶体具有压电效应,石英晶体振荡器就是利用这一特点制作成的,简称为石英晶体或晶体、晶振。大多数晶振是这样构成的:从特定角度切下矩形或圆形的石英晶体薄片,并在其对应面上敷银制成电极,并在上面各焊一根引线接到管脚上,再加上封装外壳 11。3 系统设计3.1 整体思路本系统主要包括单片机、矩阵键盘、复位电路、晶振电路和液晶显示器等部分。作为整个系统的输入,矩阵键盘担当着与用户交互的核心任务,
24、用户可以再此输入密码或控制程序的运行方向。功能上,首先由用户由矩阵键盘输入密码,而后与事先存储的密码进行比较,判断出密码的正确与否,然后单片机会控制特定引脚的电平以触发开锁电路或者报警电路。实用产品只须将单片机的负载由发光二极管替换为实际锁具的开锁电路即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈12。具体的讲,本设计可以分为硬件部分与软件部分俩大部分。其中硬件部分又分为键盘输入电路、复位电路、晶振电路、显示电路、报警或解锁提示电路等几大模块;相应的,软件部分由主程序、按键检测子程序、LCD显示子程序、密码修改子程序、报警声音子程序等组成。图3.1 系统框图3.2 系统硬件部分设计本系
25、统外围电路包括键盘输入电路、复位电路、晶振电路、显示电路、报警或解锁提示电路等。结合本设计的原定目标,键盘输入电路选择43矩阵键盘,显示电路选择显示屏LCD1602来完成。其原理图如图4.1所示。图3.2 系统原理图3.2.1 键盘输入电路单片机系统中,常用的键盘设计方式有独立式键盘和矩阵式键盘两种。独立式键盘是指每个I/O输入端口对应一个物理按键的键盘。其优点是键盘结构简单,按键识别容易;缺点是占用I/O口较多。矩阵式键盘适合用在按键数量较多的系统中,它将I/O口分别引出线,并分为行线和列线,在每一个行线和列线相交的地方放置一个按键,这种方案下,一个占用7个I/O端口的43的行列结构可以构成
26、一个12键的键盘。显然这种方式与独立式键盘相比节省了很多I/O端口,但算法相对复杂13。常用的矩阵式键盘扫描原理有反转和行/列扫描法。本设计中采用行扫描法,具体原理将在软件部分介绍。键盘功能及其引脚接法如图4.2所示:图3.3 键盘输入原理图3.2.2 复位电路单片机复位可以让整个系统(单片机芯片本身)从一个确定的初始状态开始工作。在单片机刚刚上电时、断电后和执行出错,复位都是必须的操作。RST为高电平并保持一定时间后,单片机进入复位状态,在此期间,P0口呈现高阻态,P1P3口均呈现高电平,同时PSEN信号无效、ALE为高电平。本设计在最基础的复位电路基础上,添加了一个按键以实现手动复位功能。
27、在刚接通电源时电容C1两端电势差很小,电阻R1上的电压接近电源电压,这会使得RST为高电平,接着,电容进入充电过程,RST端电势步降低,当RST端的电压表现为低电平时,CPU脱离复位状态,只要电容C3大小适当,就能够保证RST的高电平有效持续时间多于24个振荡周期,此时单片机就能够实现可靠的复位。手动复位按键的加入,使得死机时有了可靠的复位方法。在按下复位键后,电容C3将会经由R6进行放电,此过程结束后,RST端的电位就会由两个电阻的分压情况决定14。复位电路的原理如下图所示:图3.4 复位电路原理图3.2.3 晶振电路将晶体振荡器按下图所示方式连接到XTAL1引脚和XTAL2引脚上,就构成了
28、晶振电路。图示是一种电容三点式振荡器,振荡信号的频率取决于晶振频率和两个电容的容量,其中,晶振频率又是主要因素。一般而言,晶振频率的取值范围在033MHz之间,两个电容的取值范围在530pF之间。根据实际情况,本设计中采用24MHZ做系统的外部晶振。电容取值为22pF15。晶振电路原理图如图4.4所示:图3.5 晶振电路原理图3.2.4显示电路为了使密码锁的显示效果使人满意、电路简洁,此处使用了LCD1602作为显示模块的核心,而不是普通的数码管。接通电源后显示器处于等待开锁状态,提示用户输入密码,当用户需要开锁时,可以使用数字键09输入密码,每次按键都会把处理结果反馈到屏幕上。当密码输入结束
29、后,按下确认键,系统将会把输入的密码和事先保存的对比,若正确,LCD将显示“Unlock succeed!”,电子密码锁被打开;否则,LCD显示屏会显示“Wrong Password,Unlock Failed!”,电子密码锁保持原状态。在密码修改的过程中,LCD显示屏会显示更为多样的信息:“Change Password? (Y/N)”、“Old Password:”、“Wrong Password,Match Failed!”、“Enter New PW:”、“The Password must be 6 bits!”、“The Password has changed!”等等,电子锁当前
30、所处的状态一目了然。其显示部分及引脚接口如图4.5所示:图3.6 显示电路原理图3.2.5 报警、解锁提示电路本设计报警部分电路由蜂鸣器实现。当输入密码并确认后,单片机的P3.1引脚将输出特定频率的方波,则蜂鸣器被导通而发出声音。当密码错误时,发出的声音为短促的3声“嘟”,音高相同;当密码正确时,发出的声音为一小段乐声。当解锁成功时,接于P3.0端口的绿色LED灯将会亮起,提示锁已打开。在实际应用的电子密码锁产品中,可以把其替换为电磁继电器的输入,原理仍是不变。报警、解锁提示部分电路原理图如图4.6所示(图中led接P3.0口,air接P3.1口)。图3.7 报警、解锁提示电路原理图3.3 系
31、统软件部分设计本设计的软件部分由主程序、按键检测子程序、LCD显示子程序、密码修改子程序、报警声音子程序等组成。3.3.1 主程序流程图如图5.1所示为主程序流程图,系统上电后将进行初始化,然后开始进行键盘扫描,此时在键盘上输入密码,若密码正确,则开锁成功,播放成功提示音,密码错误则会提示,包括屏幕画面及声音。图3.8 主程序流程图3.3.2 按键检测子程序设计本设计中的的密码输入使用了4*3矩阵键盘,键盘上除数字键09以外还有2个功能键。该矩阵键盘的按键检测采用行扫描法,具体步骤如下:令第一行为低电平,其余行和列为高电平,即给P1口赋值0xFE。延时520ms再次进行检测,实现按键消抖。读P
32、1口的值,判断当前是否有键被按下。若无键按下,其值仍应为0xFE。若第一个按键按下,则第一列会被拉低,即P1口的读取值应为0xEE,即0xEE为第一行第一列按键的键码。同理可得第一行另两个按键的键码为0xDE、0xBE16。用同样的方法,令其它行为低电平,经上述3个步骤也可判断其它按键是否按下。根据上述过程,该矩阵键盘的按键检测扫描程序设计如下:uchar code rowScan=0xFE,0xFD,0xFB,0xF7; /行扫描码uchar code key12=0xEE,0xDE,0xBE,0xED,0xDD,0xBD,0xEB,0xDB,0xBB,0xE7,0xD7,0xB7 / 1
33、2 3 4 5 6 7 8 9 * 0 #uchar code keyValue=123456789*0#;#define KEY P1/=键盘扫描函数=uchar keyScan(void)/返回值:有键按下时获得的键盘值(1234567890*#),无键按下时返回字符$uchar k = 0,flag = 0;for(k = 0;k 4; k+)KEY = rowScank; /逐行扫描delay(10);/按键扫描if(KEY != rowScank)uchar i=0;for(i = 0; i 12; i+)if(KEY = key12i)/比较键码flag=1;break;while
34、(KEY != rowScank); /等待按键释放if(flag)return keyValuei;return $;3.3.3 LCD显示子程序设计LCD显示是本设计的核心模块之一,为了能在屏幕上总能显示恰当的信息,本设计中LCD显示子程序的功能,应为保障单个字符、字符串的显示,为主程序或其他子程序留出接口,以便需要时可以很容易调用。本着上述目的,LCD显示子程序的结构如下图所示,它的目的是提供字符与字符串的显示函数。不同层次的函数之间是被调用的关系。图3.9 显示模块结构图各函数原型及参数介绍如下:void LCDWriteData(uchar Data) / 写数据函数void LCD
35、WriteCmd(uchar Cmd) / 写指令函数void LCDPosition(uchar row,uchar column) /将坐标转换为LCD的坐标参数: row为所在行数(1或2),column为在行中的位置(015)在指定位置写数据函数void writeChar(uchar row,uchar column, char c)参数: row指定行,column指定列位置,c为待写入的数据。写字符串函数void writeString(uchar row,uchar column1,uchar column2, char *s)参数:row表示行,column1表示第一行起始地
36、址,column2表示下一行起始地址,均从1开始。 void moveString(char *s) /移动字符串函数 void LCDInit(void) /液晶初始化函数 LCDWriteCmd(0x38); /设置16*2显示,5*7点阵,8位数据接口 delay(30); LCDWriteCmd(0x01);/清屏 delay(30); LCDWriteCmd(0x06);/地址加一,整屏右移 delay(30); LCDWriteCmd(0x0f);/开显示,光标闪烁,显示光标3.3.4 密码修改子程序设计 在本设计中,密码修改功能是使用外部中断触发的,这意味用户得以随时进行密码的修
37、改,十分方便。因此,密码修改子程序同时也是外部中断0服务程序。若要修改密码,须先输入旧密码密码,密码验证通过后方可设置新密码,新密码输入结束后,验证位数,然后保存新密码。流程如图3.9所示。图3.10 密码修改程序流程图3.3.5 报警声音子程序设计本程序的设计类似于电子音乐盒,可以实现17七个音符的各种组合,理论上可以播放任意音乐,但音阶始终位于1个八度内。音调取决于物体振动的频率,频率越高,所发声音音调也就越高。本程序就是利用单片机产生不同频率的方波,来驱动蜂鸣器发出不同音调的声音。设计中,系统使用了定时中断的方法。这里以起中的音阶“1”为例说明,其初值设为0xF720,对应十进制数632
38、64,则计数65536 - 63264 = 2272次后溢出进入中断,若单片机外接24MHZ晶振,则计数一次对应0.5s,即计数1136s后溢出。一个音阶周期为1136s2 = 2272s,对应频率为1 / 2272s = 440Hz。次频率为音阶“1”所对应的频率值。其他频率对应的计数初值可按照此方法推算出来,具体见表3.1 17。表3.1 不同音阶所对应频率、计数初值音阶1234567频率/Hz440494523587659698784计数初值0xF7200xF8880xFC440xF9590xFA130xFA670xFB04由此,可得到报警声音模块的代码如下:sbit Beep = P3
39、1;uchar code scalesH = 0xf7,0xf8,0xfc,0xf9,0xfa,0xfa,0xfb; /7个音符所对应的计数器初值uchar code scalesL = 0x20,0x88,0x44,0x59,0x13,0x67,0x04;uchar note;/初始化函数void AlarmInit() TMOD = 0x01; /T/C0工作在方式一 ET0 = 1; /开定时器中断 EA = 1; /开总中断 TR0 = 0; /关闭定时器0/播放声音void play(uchar c) uint i;switch( c ) case 0 : note = 6; for
40、(i=0;i3;i+) TR0 = 1; delay(300); TR0 = 0; delay(300);break; case 1 :for(note=2;note6;note+) TR0 = 1; delay(300); TR0 = 0; delay(300);break;Beep = 1;/定时器0的中断服务函数void time0() interrupt 1 TH0 = scalesHnote; TL0 = scalesLnote; Beep = Beep;4 仿真调试4.1 Proteus ISIS简介 本设计硬件原理图的绘制使用了Proteus软件,Proteus软件是一款电路设计
41、与仿真软件,它基于VSM技术,相比其他软件有着诸多优点:它支持仿真的单片机型号很多,像MCS-51系列、PIC系列等均可,同时集成了多样的单片机外围电路,比如键盘、LED、LCD等等。Proteus软件使我们可以比较容易地获得一个功能多、易使用的单片机仿真平台。4.2 软件调试4.2.1 Keil软件简介本设计的软件编译环境使用了KeiluVision4,这是一款基于C语言的51系列兼容单片机软件开发系统。相比于汇编而言,C语言无论是在在功能上、结构性上,还是在可读性、可维护性上都有着巨大的优势,使人们得以编制更加复杂、精致的程序。除了语言优势,Keil C51软件生成的目标代码很紧凑,这加快
42、了运行速度,提高了效率。 使用者可以用任意编辑器编写代码源文件,添加到C51及A51编译器中就可以编译生成OBJ文件,然后连接定位库文件后生成ABS文件。ABS文件经过OH51的转换就可以得到标准的Hex文件,可以使用仿真器直接对目标进行调试18。4.2.2 程序调试在Keil软件上进行程序的调试,首先新建工程,在空白的代码编辑页输入程序,保存后进行程序编译,若报错修改报错处。经反复修改后,程序会提示编译成功,编译成功的画面如图4.1所示:图4.1 Keil编译成功Keil中的程序需生成51单片机可执行的HEX文件,需要对“目标1”的属性进行如图4.2和图4.3所示的操作。图4.2 目标1的选
43、项(1)图4.3 目标1的选项(2)4.3 Proteus仿真在Proteus中打开前面所制作的工程,双击单片机芯片,在其属性中填入上一部所生成的 E-lock.hex 文件,如图6.4所示:图4.4 AT89C51的属性点击“开始仿真”按钮后,就可以看到最终的制作成果了。初始状态如图6.5所示。图4.5 仿真初始状态现在就可以逐一实现电子密码锁的各种功能。以下是电子密码锁各种功能实现的具体仿真过程:(1)本电子密码锁在密码输入过程中,每输入一位密码,都会在显示屏上反应出来,仿真效果图如图6.6所示。图4.6 输入密码时的仿真图 (2)本设计设定的初始密码为111222,当在4*3矩阵键盘上输
44、入111222并按下确认键后,显示屏上将显示 “Unlock Succeed”,同时播放音乐,实现开锁功能。在本设计的仿真中使用发光二极管代替实际产品中的电磁锁,以发光二极管D1的发光代表锁打开。密码输入正确,实现开锁的仿真图如图6.7。图4.7 密码正确实现开锁的仿真图 (3) 当密码输入有误时,显示屏上将会显示“Wrong Password, Unlock Failed !”,同时播放短促的报警声,锁保持关闭,发光二极管D1不发光。密码输入错误,锁不打开的仿真图如图6.8所示。图4.8 密码错误不能开锁的仿真图(4) 电子密码锁的密码可修改。用户确认修改后会提示用户输入旧密码,当旧密码输入正确并验证通过后,即可设置新的密码。按下“修改密码”键后显示屏的显示情况如图6.9所示。图4.9 询问用户是否要修改图4.10 确认修改后画面(5) 如果旧密码输入错误