《毕业设计(论文)基于单片机电子密码锁.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于单片机电子密码锁.doc(47页珍藏版)》请在三一办公上搜索。
1、摘 要随着社会物质财富的日益增长和人们生活水平的提高,安全成为居民最为重视的问题。传统的机械锁由于其构造的简单,被撬的事件屡见不鲜。电子密码锁是由电子电路控制锁体的新型锁具,它采用触摸键盘方式输入开锁密码,操作方便。触摸式电子锁的输入部分采用触摸开关(键盘输入),其优势在于传统的机械开关之出在于其保密性高,使用灵活性好,安全系数高,无活动零件,不会磨损,电子密码锁受到很多人的喜欢。出于成本问题本次设计只采用按钮替代触摸式按键。在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
2、随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。电子密码锁种类繁多,但这类产品的特点是针对特定有效卡、指纹或声音有效,且不能实现远程控制,只能适用于保密要求高且供个人使用的箱、柜、房间等。而且卡片式IC卡还有易丢失等特点,加上其成本一般较高,一定程度上限制了这类产品的普及和推广。电子密码锁具有安全性高、成本低、功耗低、易操作等优点。在科学技术不断发展的今天,电子密码防盗锁作为防盗卫士的作用也日趋重要。本设计采用单片机AT89S52作为单片机的核
3、心单元,设计了一款具有本机开锁和报警功能的电子密码锁,既简单又适用。关键词:单片机 AT89S52 密码锁 矩阵键盘 汇编语言目录1前言42设计的基础依据42.1关于汇编语言42.2主控芯片AT89S5262.2.1AT89S52性能简介72.2.2AT89S52引脚功能说明83文献综述114总体方案确定124.1电子密码锁的设计分析124.2系统总体方案设计134.3初步设计思路155硬件电路设计155.1晶振电路155.2LED显示电路165.3键盘电路设计175.4复位部位185.5开锁电路195.6报警电路206软件设计216.1软件设计思路216.2主程序设计216.3子程序设计22
4、6.3.1显示子程序226.3.2按键判断子程序236.3.3按键功能子程序246.3.4数字键输入子程序256.3.5退格键子程序266.3.6enter键子程序276.3.7设置键子程序296.3.8退设置键子程序306.3.9Close子程序317实验及调试328结论33致 谢35参 考 文 献36附 录371 前言目前,机械锁是我们目前最常用的锁,其机构简单、使用方便、价格便宜。但在使用中暴露了很多缺点:一是机械锁是靠金属制成的钥匙上的不同齿形与锁芯的配合来工作的。据统计,每4000把锁中就有两把锁的钥匙齿牙相同或类似,故安全性低。根据国外的统计资料,装有电子防盗装置的商业区或居民区盗
5、窃犯罪率平均下降30左右。二是钥匙一旦丢失,无论谁捡到都可以将锁打开。三是机械锁的材料大多为黄铜,质地较软,容易损坏。四是机械锁钥匙易于复制,不适于诸如宾馆等公共场所使用。出于安全、方便等方面的需要,许多智能锁(如指纹辨别、IC卡识别)已相继问世,但这类产品的特点是针对特定指纹或有效卡,只能适用于保密要求高且仅供个别人使用的箱、柜、房间等。另外,卡片式的IC卡易丢失,加上其成本一般较高,在一定程度上限制了这类产品的普及和推广。随着人们生活水平的提高,电子密码防盗锁作为防盗卫士的作用日趋重要。电子密码防盗锁用密码代替钥匙,不但省去了佩戴钥匙的烦恼,也从根本上解决了普通门锁保密性差的缺点。同时可设
6、多组密码,其中有一组是管理员密码,可以增加用户密码又清除所有用户密码。电子密码锁是目前流行的防盗工具,研究电子密码锁有一定的重要性。2 文献综述随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作
7、等优点。电子工业的迅速发展,数字电子技术已经深入到了人们生活的各个层面,在国内外各种各样的电子产品也正在日新月异地向着高精尖技术发展。在安全技术防范领域,具有防盗报警功能的电子密码锁代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。在实际应用中,由于程序容易跑飞,系统的可靠性能较差。基于现场可编程逻辑门阵列器件的电子密码锁,用门电路构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。由于门电路也具有现场可编程功能
8、,当设计需要更改时,只需更改门电路中的控制和接口电路,无需更改外部电路的设计,大大提高了设计的效率。从目前的技术水平和市场认可程度看,国内外使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和金库,还有一部分应用于保管箱和运钞车。键盘式电子密码在键盘上输入,与打电话差不多,因而易于掌握,其突出优点是“密码”是记在被授权人脑子里的数字和字符,既准确又可靠,不会丢失,难以被窃。但是密码不能太简单,太简单了就容易被他人在键盘上试探出来,或者可能被旁观者窥测出来,造成保密性不足。当然,密码又不能太复杂,太复杂了可能自己都糊涂了,或者输入密码操作成功率低,造成使用不便。因此,为了发扬优点、
9、克服弱点,键盘式电子密码也在不断发展中,如“任意设定密码”技术使得被授权人可以根据自己的需要或喜好设定密码,常用常新;而“更改密码”技术使得本次输入的密码将自动更改成下次应输入的密码,更改的规律不为他人所知,因而不怕旁观者窥测,显示的窄小角度只能由操作者正面看得到,因而即使旁观者看见操作动作也难以窥测出密码。总之,尽管新式电子防盗锁层出不穷,但键盘式电子密码防盗锁仍然“老树发新芽”,不仅在市场上居于主流地位,而且,还经常作为其他类型电子防盗锁的辅助输入手段。3 设计的基础依据3.1 汇编语言的简单介绍汇编语言是计算机及电子信息类专业十分重要的基础课程,学好微机原理、操作系统、编译原理的知识准备
10、。它能充分发和利用计算机硬件特性的语言,能够完成高级语言难以胜任甚无法完成的任务。一、汇编语言特点汇编语言是计算机能提供给用户的最快而又最有效的语言,时能够利用计算机所有硬件特性并能直接控制硬件。所以高级言简单、易学且开发效率高,而汇编语言复杂、难懂、开发效低。对汇编语言的课程特点主要表现在以下两个方面:(一)汇编语言的优点。主要变现在以下两个方面:第一,汇编语言容易得到高时空效率的程序 。由于汇编语言本质上就机器语言,可直接、有效地控制计算机硬件,因而与高级语言比,容易得到运行速度快、执行代码短、占用内存空间少的高空效的目标程序 。第二,用汇编语言能设计出高级语言无法实的程序。正是由于与机器
11、的密切相关性,使得汇编语言能充分用计算机的硬件特性,编写出与硬件紧密相关而高级语言又无实现的程序来。 (二)汇编语言的缺点。主要表现在两点:第一,汇编语言难、难理解、难调试难维护等。第二,汇编语言程序可移植性差。 3.2 主控芯片AT89S52单片机也被称为微控制器(Microcontroller unit),英文缩写MCU,它最早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。单片机按用途大体上可分为两大类,一是通用型单片机,二是专用型单片机。单
12、片机用途十分广泛,比如手机,家电,工业控制,机械人,都是一些自动的,或智能装置,在我们生活当中随时可以找到单片机的存在,然而本次密码锁设计也是利用单片机工作。由于单片机对成本是敏感的,所以目前占统治地位的软件是最低级汇编语言,它是除了二进制机器码以上最低级的语言了,所以在我的密码锁设计中也是用汇编语言编程。 AT89S52是一个有20个引脚的芯片,引脚配置如图1所示。与8051相比,AT89S52减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system
13、programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C52引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。3.2.1 AT89S52性能简介AT89S52具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双
14、工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。图 1 AT89S52芯片引脚图其主要功能特性: 1、4k可反复擦写(1000次)ISP Flash ROM2、32个双向I/O口 3、4.5-5.5V工作电压4、2个16位可编程定时/计数器 5、时钟频率0-33MHz6、全双工U
15、ART串行中断口线 7、128x8 bit内部RAM8、2个外部中断源 9、低功耗空闲和省电模式10、中断唤醒省电模式 11、3级加密位12、看门狗(WDT)电路 13、软件设置空闲和省电功能14、灵活的ISP字节和分页编程15、双数据寄存器指针 可以看出AT89S52提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时器/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟。同时,AT89S52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM
16、,定时/计数器,串行通信口及中断系统继续工作。掉电方式何在RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直接到一个硬件复位。3.2.2 AT89S52引脚功能说明1、Vcc:电源电压2、GND:接地3、P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口,作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端口。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。4、P1口:P1是一个带内
17、部上拉电阻的8位双向I/O口,P1的输出缓冲器可驱动(吸收或输出电流)4个TTL逻辑门电路。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 表 1 P1口第二功能端口引脚第二功能P1.5MOSI(用于ISP编程)P1.6MISO(用于ISP编程)P1.7SCK(用于ISP编程)5、P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输
18、出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。6、P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端口时,被外部拉低的P3口将用上拉电阻输出电流I。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,P3口
19、的第二功能如下表3-2。P3口也可作为AT89S52的一些特殊功能口,如下表2所示: 7、P3.0 RXD(串行输入口) 8、P3.1 TXD(串行输出口) 9、P3.2 /INT0(外部中断0) 10、P3.3 /INT1(外部中断1) 11、P3.4 T0(记时器0外部输入) 12、P3.5 T1(记时器1外部输入) 13、P3.6 /WR(外部数据存储器写选通) 14、P3.7 /RD(外部数据存储器读选通) 15、P3口同时为闪烁编程和编程校验接收一些控制信号。表 2 P3口的第二功能端口功能第二功能端口引脚第二功能RXD(P3.0)串行输入口T0(P3.4)定时/计数器0外部输入TX
20、D(P3.1)串行输出口T1(P3.5)定时/计数器1外部输入INT0(P3.2)外中断0WR(P3.6)外部数据存储器写选通INT1(P3.3)外中断1RD(P3.7)外部数据存储器读选通16、RST:复位输入。当振荡工作时,RST引脚出现两个机器周期上高电平将使单片机复位。WDT益出将使该引脚输出高电平,设置SFR AUXR 的 DISRTO 位(地址8EH)可打开或关闭该功能。DISRTO 位缺省为RESET输出高电平打开状态。17、ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的
21、1/6输出的正脉冲信号,因此它可对外输出时钟或用于定时目地,要注意的是:第当访问外部数据存储器时将跳过一个ALE脉冲。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位禁位后,只有一条MOVX 和MOVC指令ALE才会被激活。此外,该引脚伎被微弱拉高,单片机执行外部程序时,应设置ALE无效。18、PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。当访问外部数据存储器,高有两次有效的PSEN信号。19、EA/VPP:外部访问允许。欲使CP
22、U公访问外部程序存储器(地址0000HFFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上12V的编程电压Vpp。20、XTAL1:振荡器反相放大器及内部时钟发生器的输入端。21、XTAL2:振荡器反相放大器的输出端。4 总体方案确定4.1 电子密码锁的设计分析在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥
23、匙丢失后安全性即大打折扣。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作等优点。在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。在国内外电子
24、防盗锁应用于金融业,其根本的作用是“授权”,即被“授权”的人才可以存取钱、物。广义上讲,金融业的“授权”主要包括以下三种层次的内容:1、授予保管权,如使用保管箱、保险箱和保险柜;2、授予出入权,如出入金库、运钞车和保管室;3、授予流通权,如自动存取款。目前,金融行业电子防盗锁的应用主要集中在前两个层面上。下面将介绍几种在金融行业中使用较多的电子防盗锁以及它们的技术发展方向。当然,以上所说的授权技术再高超,都必须由精良的“锁具”担当承载结构部件,实现开启、闭锁的功能,而且承担实体防护作用,抵抗住或尽量延迟破坏行为,让电子防盗锁“软、硬不吃”。一般情况下,锁具防盗的关键是锁身外壳、闭锁的部件(如伸
25、缩的锁舌或锁栓、锁扣盒锁扣板以及依靠电磁力直接闭锁的电磁部件等)的强度(应有足够的机械强度和刚度,能够承受一定数值、一定方向的静压力和冲击力以及力矩)、锁止型式(能承受某些方式和工具的作用)、配合间隙(防止采用机械的、电子的方法探入锁具内部而被开启)和布局(将薄弱的、与锁的开启直接相关的零部件和电路置于壳体保护之下,并且不易被识别出来)。提高电子防盗锁之防护能力的必然途径是报警,在许多场所有人值守、有电视监控,具有报警功能,可以综合物理防范和人力防范两种作用。报警的前提是具备探测功能,根据电子防盗锁的使用场所和防护要求,可选择多种多样的探测手段。在中国的城市金融业中,实现联网报警已经成为对各金
26、融网点的基本要求。根据国内外的实践经验,安全防范风险等级很有必要,即依据使用的防盗报警器材的性能、安装布局和人员值守状况等,可以评估被防护物或区域的防护能力,得出风险等级,其中,电子防盗锁的性能至关重要。4.2 系统总体方案设计本设计采用单片机AT89S52为核心的单片机控制方案。单片机是一块集成芯片,可以利用它的灵活的编程设计和丰富的IO端口,实现电子密码锁的功能。由于单片机是集成芯片,可以更精确的控制密码锁的功能实现。利用单片机进行控制密码锁,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能,为了节省本次设计的成本,这次设计没用到声光提示或遥控控制。其基本原理如图
27、12所示。矩阵键盘控制89S52单片机输入错误锁定键盘延时报警控制电路修改密码开锁控制电路指示电路串口显示电路图 2 单片机控制方案与数字电路控制相比较,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。本方案采用一种是用以AT89S52为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。本设计的任务采用单片机AT89S52作为单片机的核心单元,利用单片机的串行发射、接收等功能设计一款具有本机开锁和报警功能的电子密码锁,主要分为四个部分: 1)选择密码:将编好的密码程序存储在E
28、PROM中,用户通过密码选择键进行选择。具体操作过程:首先按下密码选择键,然后在逐渐输入号码,最后按下确认键即可。2)密码显示:为了防止密码泄露,以一个字母号提醒用户是否有键按下,有键按下就是显示“-”,没有就不显示。3)键盘程序:4*4键盘程序,p1.0-p1.3为列线,p1.4-p1.7为行线。4)本机键开锁:用户键入正确的密码,在按确认键后,便会自动开锁。如果不正确系统就会报警,由扬声器发出5秒报警声。当连续三次出现密码错误时,系统会长期报警不止,必须按复位方可停止。5)不开锁时,锁关闭。6)报警电路,包括两个报警,密码错误一次报警5秒,密码连续错误3次连续报警,必须按复位键方可停止报警
29、。7)新增修改密码功能4.3 初步设计思路输入密码用矩形键盘,包括数字键和功能键。(下面的电路介绍的时候,能否对着一个整体的电路结果框图来介绍比较直观)LED数码管显示输入密码,用74ls06驱动数码管发光显示数码,用单片机p0公共端,p2作段码,控制各位显示器分时进行显示。开锁电路,开锁用12伏电源驱动,启动时候为锁关状态,当P3.1为零自动变为锁开状态,按CLOSE恢复锁状态。报警电路,包括两个报警,密码错误一次报警5秒,密码连续错误3次连续报警,必须按复位键方可停止报警。打开电源后,显示器不显示,设原始密码为“123456”,只要输入此密码便开门。当有密码输入时,在数码管上显示“-”。这
30、样使得系统启动时处于闭锁状态。键盘包括:数字键09功能键back,退格键功能键ENTER,若密码与设定密码相同,则开锁。密码输入错误一次报警五秒,密码输入错误三次一直报警不听。报警解除,当密码输入错误三次,必须按复位键,解除报警关锁键close,开锁后,必须按close锁合上5 硬件电路设计5.1 晶振电路图 3 晶振电路AT89S52引脚XTAL1和XTAL2与晶体振荡器及电容C2、C1按图4-7所示方式连接。晶振、电容C1C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在033MHz之间,电容C1、C
31、2取值范围在530pF之间。根据实际情况,本设计中采用12MHZ做为系统的外部晶振。电容取值为20pF。5.2 LED显示电路用单片机驱动LED数码管有很多方法,按显示方式可分静态显示和动态(扫描)显示;按译码方式可分硬件译码和软件译码。静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据更新时才会显示新的数据。静态显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。这两种显示方式各有利弊,静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬
32、件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。LED数码管的外围电路一般需要一个限流电阻和加大驱动电流的晶体管。 图 4 共阳极、共阴极发光管硬件电路位码接p0,段码接p2,单片机p0口出来接反相器,再接到数码管公共端。整个显示过程中采用动态显示,即6位显示器逐一轮流显示,每位持续1ms,10ms或20ms之内循环一遍,当然可以适当进行更改,但刷新速度不要小于每秒三十桢。这样,由于视觉暂留现象,我们看到的便是6只显示器同时在显示。显示电路如下图5:图 5 显示电路5.3 键盘电路设计由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键
33、键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。键盘的每个按键功能在程序设计中设置。其大体功能(看键盘按键上的标记)及与单片机引脚接法如图6图 6 键盘电路5.4 复位部位单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC0000H,使单片机从第个单元取指令。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。在复位期间(即RST为高电平期间),P0口
34、为高组态,P1P3口输出高电平;外部程序存储器读选通信号PSEN无效。地址锁存信号ALE也为高电平。根据实际情况选择如图4-6所示的复位电路。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C1通过R5放电。当电容C1放电结束后,RST端的电位由R5与R6分压比决定
35、。由于R5R6因此RST为高电平,CPU处于复位状态,松手后,电容C1充电,RST端电位下降,CPU脱离复位状态。R5的作用在于限制按键按下瞬间电容C1的放电电流,避免产生火花,以保护按键触电。图 7 复位电路原理图5.5 开锁电路开锁控制电路的功能是当输入正确的密码后将锁打开。系统使用单片机其中一引脚线发出信号,经三极管放大后,由继电器驱动电磁阀动作将锁打开。用户通过键盘任意设置密码,并储存在EEPROM中作为锁码指令。只有用户操作键盘时,单片机的电源端才能得到3V电源,否则单片机处于节电工作方式。开锁步骤如下:首先按下键盘上的开锁按键,然后利用键盘上的数字键09输入密码,最后按下确认键。当
36、用户输入一密码后,单片机自动识码,如果识码不符,则报警。只有当识码正确,单片机才能控制电子锁内的微型继电器吸台。当继电器吸台以后带动锁杆伸缩,这时,锁勾在弹簧的作用下弹起,完成本次开锁。开锁以后,单片机自动清除掉由用户输人的这个密码。如图8所示:图 8开锁电路5.6 报警电路报警电路由两个PNP9012驱动,接到单片机p3.3,报警部分由陶瓷压电发声装置及外围电路组成,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P3.3引脚为低电平,三极管导通轰鸣器发出噪鸣声报警。如图9所示:图 9 报警电路6 软件设计6.1 软件设计思路本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描
37、程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。先把显示程序编号,在Proteus里仿真,显示程序可以很方便检查整体的正确性;然后再把键盘程序完成。现实程序和键盘程序是本次设计的关键,只要把这两个程序做完整,后面的开锁,报警都很简单。6.2 主程序设计主程序设计首先是初始化,把需要的口地址,标志位,初始密码初始化,把初始密码设置为“123456”,然后不断循环执行显示子程序和扫描键盘程序,主程序流程框图如下图10:开始初始化显示程序键盘扫描 图 10 主程序流程图 6.3 子程序设计6.3.1 显示子程序首先初始化显示子程序,不显示,当有密码输入时候,为了防止密码泄露,以
38、一个字母号提醒用户是否有键按下,有键按下就是显示“-”,没有就不显示。在此程序中显示用到动态显示,如果将程序中的段码表0bfh,改为共阳极段码表,动态显示就是对应的数字,如果为0bfh则输入全部显示“-”。显示缓冲区为30h-35h,按30h-35h循序一次显示,动态显示程序框图如下图11:显示30h单元显示33h单元显示32h单元显示31h单元显示34h单元返回显示34h单元显示子程序图 11 显示子程序流程图6.3.2 按键判断子程序扫描键盘方法为线翻转法,先把行和列分别置1和置0,即mov p1,#0f0h,当有按键输入时候p1的值发生改变,证明有键按下,之后再确认是那个键按下。确认那个
39、键按下使用37h,39h做循环次数,不断扫描,先把p1.0置0,扫描第一个键,当p1端口置等于扫描到的键码值时候,证明是键按下,如果不相等继续扫描。按键判断子程序流程图如下图12:扫描键盘是否有键按下二次确认按键密码输入程序按键功能子程序确认那个键按下退格程序显示子程序NNYY返回图 12 扫描键盘子程序流程图6.3.3 按键功能子程序键值存放在40h单元里面,判断键值等于那个数字,分别执行不同的子程序,然后返回.按键功能子程序流程图如下图13:键功能程序键值09?键值back?键值enter?键值设置?键值退出设置?数字输入序设置程序开锁程序退格程序退出设置序YYYYYNNNN返回N键值cl
40、ose?关锁程序Y图 13 按键功能子程序流程图6.3.4 数字键输入子程序首先判断是否在报警,再判断数字是否已经输入六个,将31h单元送到30h,将32h单元送到31h,将33h单元送到32h,将34h单元送到33h,将35h单元送到34h,将35h单元送到40h,40H在按键子程序中存放键盘的值。数字键输入子程序流程图如下图14:31h单元送到30h34h单元送到33h33h单元送到32h32h单元送到31h35h单元送到34h返回40h单元送到35h是否在报警是否输入满6个数字键输入子程序NYY图 14 数字键输入子程序流程图6.3.5 退格键子程序首先判断是否在报警,再判断数字是否已经
41、有数字输入,34h单元送到35h,将33h单元送到34h,将32h单元送到33h,将31h单元送到32h ,将30h单元送到31h,将#0ah单元送到30h,其中#0ah未段码表中的#0ffh,在数码管上为不显示。程序框图如下图15:34h单元送到35h31h单元送到32h32h单元送到33h33h单元送到34h30h单元送到31h返回#0ah单元送到30h是否在报警是否已经开锁退格键子程序NYY是否有数字输入NYYYN图 15 退格键子程序流程图6.3.6 enter键子程序首先判断是否在报警,是则返回,否则再判断数字键是否已经输入满六个,是则初始化显示,否则返回。初始化显示后再判断密码是否
42、正确,正确执行开锁电路,否则执行报警程序。密码输入错误,错误次数3bh单元内容加1,判断密码次数是否满三次,未满3次,开中断报警定时5秒;满三次则一直循环报警,除复位键,任何按键按下无效。按复位键恢复开机状态。enter键子程序流程图如下图16:返回是否在报警数字输入是否满六个Enter子程序NY判断密码是否正确NYNY初始化显示开锁电路设置键是否按下设置键子程序密码错误程序图 16 enter键子程序流程图返回密码错误是否满3次密码错误程序Y一直报警按下无效除复位键,任何按键必须按复位键恢复初始状态报警次数加1报警五秒,按下无效除复位键,任何按键图 17 密码错误子程序流程图6.3.7 设置
43、键子程序首先判断是否处于报警状态,是则返回,否则在判断是否处于锁开状态,是则将新密码输入标志位置为1,再把数字输入个数清零,让键盘可以继续输入新密码否则返回。新密码标志位置1设置键标志位置1数字输入个数清零返回是否在报警是否已经开锁设置键子程序NNYY图 18 设置键子程序流程图6.3.8 退设置键子程序首先判断是否处于报警状态,是则返回,否则再判断是否处于设置状态,是则恢复开锁状态,将新密码赋给密码储存单元,否则返回。新密码赋给密码存储单元返回是否在报警是否处于设置设置键子程序NNYY图 19 退设置键子程序流程图6.3.9 Close子程序首先判断是否处于报警状态,是则返回,否则再判断是否
44、处于开锁状态,是则恢复关锁状态,否则返回。恢复初始状态返回是否在报警是否已经处于开锁状态Close子程序NYNY 图 20 close键功能流程图7 实验及调试在本次设计中,我采用的是汇编语言,首先我用wave6000一段一段的编写程序,然后再用proteus软件进行仿真,经过努力软件编程部分基本完成,在proteus里面仿真能实现毕业设计任务书的要求,当有密码输入时候,数码管显示“-”,但是如果把断码改为共阴极段码,当有密码输入时候,数码管显示乱码。软件编程结束的同时,硬件也焊接好了。开始调试,调试的结果跟proteus调试不一样,首先段码怎么改数码管显示总是乱码,其次是干扰太大。我在想乱码
45、应该是我软件出现问题了,我请教了别的同学,怎么解决乱码问题,然后我把动态显示的程序改了,把本来p0口右移显示用rr a循环扫描,改为一个一个显示先setb p0.0显示第一个,然后clr p0.0,setb p0.1关闭第一个,显示第二个如此类推。程序进行proteus仿真,不会再出现乱码;然而在硬件了调试却不是这样,还是出现乱码,这时候我可以确认是硬件出现问题。硬件的调试不成功,我们把矛头指向干扰,我们开始把一些菊花链不断修改过来,但是任凭我们如何修改,乱码一直出现,但是这时候可以发现数码管不会乱跳,证明干扰已经减少,排除了干扰和软件问题,这时候我们确认是硬件电路的问题。显示出现乱码,表示显
46、示电路出现问题,数码管用的是共阴极,没加反相器,马上就加上74ls06,反相器出来接一个排阻,把硬件电路焊好,继续调试,结果还是一样,乱码。但是幸运的是,输入密码按确认键能正常工作,这时候就剩下显示问题。显示乱码还是显示电路出现问题,然后我去请教别的同学,讨论得出结论p0.0接数码管公共端必须接上拉电阻,我马上把上拉电阻接好,继续调试,结果终于出来了,不会再出现乱码,完全能正常工作。在实验的调试过程我们经过了排除软件,排除干扰,确认电路出现问题,修改电路,调试成功。下图为Proteus软件仿真:图21 proteus软件仿真图8 结论很多人把毕业设计作为一个艰难的任务,但是从我的角度来看,我很喜欢这样的设计,在大学的四年里我最喜欢的也是设计课程,所以我不会把它当做是一个任务,我只把它当做是一个兴