




已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
键入文字目 录1 概述- 1 -2 系统设计 - 2 - 2.1 结构设计- 2 -2.2 结构设计- 3 -3 硬件设计- 4 - 3.1 ats8952简介- 5 -3.2 液晶显示电路- 6 -3.3 发声电路- 12 -3.4 开锁控制电路- 13 -3.5 密码存储电路- 13 -3.6 键盘输入电路- 17 -3.7 手动复位电路- 18 -3.8 晶振电路- 19 -4 软件设计- 20 -4.1 系统主程序- 20 -4.2 系统相关子程序- 28 -5 系统调试与测试- 33 -6 结论- 36 -参考文献- 37 -谢 辞- 38 -附录一:- 39 -附录二:- 40 -附录三:- 79 -第 - 77 - 页,共 75 页1 概述 锁具是源流千古的社会性用品,主要用于日常生活和工作中,住宅与部门的安全防范。当前门锁的主流是弹子锁,其保密性不强,钥匙容易被仿制和意外丢失;且持有者需随时携带钥匙,使用不方便。保存贵重物件的保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高昂,且易出现故障。随着科技、经济和社会的发展,当今社会公共安全防范系统对锁具的保密性、牢固性、可靠性、耐用性以及安装使用等提出了新的更高的要求。针对原有锁具的特点和缺陷,为满足人们对锁的使用需求,增加其安全性,用密码代替钥匙的电子密码锁应运而生。早期开发的电子密码锁由于电子器件所限,种类不多,保密性差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但不安全。后来多是基于eda实现,其电路结构复杂,电子元件繁多,也有使用早先2051系列单片机来实现的,但密码简单,容易破解。随着电子元件的进一步发展,电子密码锁也出现了很多的种类,功能日益强大,使用更加方便,保密安全性更强;由以前的单密码输入发展到现在密码加感应元件,实现了真正的电子加密。电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。电子密码锁的出现给人们带来了极大的方便,有很广阔的市场前景。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁,特点有:l 保密性好,编码量多。l 随机开锁成功率几乎为零。l 密码可变。用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。l 误码输入保护。当输入密码多次错误时,报警系统自动启动。l 操作简单易行,一学即会。南华大南华大学机械工程学院毕业设计(论文)论文阐述基于美国atmel公司的at89s52单片机,采用液晶显示器1602作为输出显示系统提示信息的电子密码锁的设计与实现。2 系统设计2.1 功能设计本系统拟采用单片机为主控芯片,由于单片机种类繁多,各种型号都有其各自特点,应用于不同的环境,因此在选用时要多加比较。一般来说,在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、i/o口、定时/计数器、串行/并行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性等等。基于以上因素本设计选用单片机at89s52作为本设计的核心元件,利用该单片机灵活的编程设计和丰富的i/o端口,及其控制的准确性,实现基本的密码锁功能。在单片机i/o接口上外接输入键盘用于输入和一些功能的控制。考虑到密码的存在形式一般为数字或字母形式,而字母数量众多,并且排列不规则,不能使用矩阵式键盘排列字母;并且按键过多会大大增加系统的体积,对适用性极为不利,故只使用数字作为密码。阿拉伯数字不仅便于用户记忆,而且通用性极强,是作为密码的首选。10个数字需要1个不同的按键,故选用为4*4矩阵键盘;除去10个数字键,还剩6个按键可设置不同的功能。用户使用电子密码锁开锁的步骤为:用户输入数字密码,输入完毕后按确认键。如果密码正确,再按开锁键,即可开锁。如果密码错误则报警,如果密码错误多次,还会锁定键盘。这里需要蜂鸣器提示用户按键已按下,开锁需要继电器开关。液晶显示器则直观显示系统当前状态和提示用户需要做的操作。用户修改密码步骤为:首先输入旧密码,输入完毕后按确认键。如果密码正确再按改密键。输入两次新密码并确认。如果两次密码输入长度一致,则密码修改成功。如果两次输入不一致,则密码修改失败。失败后只能重新输入旧密码才能继续改密。为防止系统发生异常,还应提供复位开关,在系统无法正常运转时手动复位。2.2 结构设计单片机密码存储开锁部分液晶显示发声部分电源键盘复位晶振图2-1 系统结构图如图2-1所示,整个系统以单片机为核心,辅以若干外围电路。其中密码存储部分是输入输出双向结构,保证密码可以掉电保存,上电后读出。其余都是单向输入或输出。电源部分为整个系统供电,采用5v直流电源。键盘输入部分采用4*4矩阵行列键盘,需不断扫描检查有无按键按下。复位部分提供手动复位功能,当系统发生异常或未知错误时可以由用户手动复位单片机。晶振部分是提供外部石英晶体谐振器。系统输出有:液晶显示部分,为用户显示字符提示当前操作状态。蜂鸣器发声,提示用户按键已按下,以及密码正确的提示音,错误的警告音等。开锁电路部分是控制继电器,只有密码正确并选择开锁后,继电器内部的电磁铁才会吸合,发光二极管电路连通后发光,表示锁已打开。南华大学机械工程学院毕业设计(论文)3 硬件设计根据上面的结构设计思路,具体设计中选用一块20cm*10cm的通用pcb板做为系统焊接板。单片机为atmel公司的at89s52,电源部分为直流4.5v,3节5号电池供电,实验时也可以用直流5v电源供电。键盘输入部分为4*4矩阵薄膜键盘,不需上拉电阻,但扫描时需先给行线或列线供电。液晶显示器选用1602,可以显示两行,每行16个字符。蜂鸣器为有源5v。继电器为5脚5v。密码存储选用串行at24c02芯片,256b空间,足够存储密码,采用串行传输可以极大减少连线数目。系统原理电路图如图3-1所示。下面按系统的结构具体介绍一些电路及其所用的芯片。图3-1 系统原理电路图3.1 at89s52简介at89s52是一款低功耗、高性能cmos8位微控制器,具有8k可编程 flash存储器。使用 atmel 公司高密度非易失性存储器技术制造,与工业 80c51 产品指令和引脚完全兼容。at89s52具有以下标准功能:8k字节flash, 256字节ram,32 位 i/o 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个6向量 2级中断结构,全双工串行口,片内晶振及时钟电路。其引脚如图3-2所示,下面简要介绍其引脚功能:图3-2 at89s52引脚图vcc:电源。本设计中接电源正极。gnd:地。本设计中接电源负极。p0口:p0口是一个8位漏极开路的双向i/o口。作为输出口,每位能驱动8个ttl逻辑电平。对p0端口写1时,引脚用作高阻抗输入。 p1口:p1口是一个具有内部上拉电阻的8 位双向i/o口,p1输出缓冲器能驱动4个ttl逻辑电平。对 p1 端口写1时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。p2口:p2口是一个具有内部上拉电阻的8位双向i/o口,p2输出缓冲器能驱动4个ttl逻辑电平。对p2端口写1时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。p3口:p3口是一个具有内部上拉电阻的8位双向i/o口,p3输出缓冲器能驱动4个ttl逻辑电平。对p3端口写1时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。rst:复位输入。晶振工作时,rst脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,rst脚输出96个晶振周期的高电平。特殊寄存器auxr(地址8eh)上的disrto位可以使此功能无效。disrto默认状态下,复位高电平有效。ea/vpp:访问外部程序存储器控制信号。为使能从0000h到ffffh的外部程序存储器读取指令,ea必须接gnd。为了执行内部程序指令,ea应该接vcc。本设计中不需要外部程序存储器,因此需接高电平。ale/prog:地址锁存控制信号(ale)是访问外部程序存储器时,锁存低8位地址的输出脉冲。psen:外部程序存储器选通信号(psen)是外部程序存储器选通信号。当at89s52从外部程序存储器执行外部代码时,psen在每个机器周期被激活两次,而在访问外部数据存储器时,psen将不被激活。xtal1:振荡器反相放大器和内部时钟发生电路的输入端。xtal2:振荡器反相放大器的输出端。以上是at89s52的引脚功能介绍,下面简要介绍at89s52的存储器结构。at89s52有单独的程序存储器和数据存储器,外部程序存储器和数据存储器都可以64k寻址。程序存储器:如果ea引脚接地,程序读取只从外部存储器开始。对于at89s52,如果ea接vcc,程序读写先从内部存储器(地址为0000h1fffh)开始,接着从外部寻址,寻址地址为:2000hffffh。数据存储器:at89s52有256字节片内数据存储器。高128字节与特殊功能寄存器重叠。也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。当一条指令访问高于7fh的地址时,寻址方式决定cpu访问高128字节ram还是特殊功能寄存器空间。3.2 液晶显示电路3.2.1 lcd1602简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式lcd,市面上字符液晶绝大多数是基于hd44780液晶芯片,hd44780是带西文字库的液晶显示控制器,用户只需要向hd44780送ascii的字符码,hd44780就按照内置的rom点阵发生器自动在lcd液晶显示器上显示出来。所以,hd44780主要适用于显示西文ascii字符内容的液晶显示。图3-3 lcd1602引脚图1602字符型lcd能够同时显示16*2即32个字符(16列2行)。其内置192种字符(160个5*7点阵字符和32个5*10点阵字符),具有64个字节的自定义字符ram,可自定义8个5*8点阵字符或4个5*11点阵字符。1602通常有14条引脚线或16条引脚线两种,多出来的2条线是背光电源线和地线,带背光的比不带背光的略厚,控制原理与14脚的lcd完全一样,是否带背光在应用中并无差别。本设计中采用带背光16引脚线的。其主要技术参数为:显示容量:162个字符。芯片工作电压:4.5-5.5v。工作电流:2.0ma(5.0v)。模块最佳工作电压:5.0v。字符尺寸:2.954.35(wh)mm。lcd1602的16个引脚可参照图3-3,其引脚功能分别为:vss:电源地(gnd)。vcc:电源电压(5v)。v0:lcd驱动电压,液晶显示器对比度调整端。使用时可以通过一个10k的电位器调整对比度,接正电源时对比度最弱,接地电源时对比度最高。rs:寄存器选择输入端,选择模块内部寄存器类型信号。rs=0,进行写模块操作时指向指令寄存器,进行读模块操作时指向地址计数器。rs=1,无论进行读操作还是写操作均指向数据寄存器。图3-4 lcd1602写时序r/w:读写控制输入端,选择读/写模块操作信号。r/w=0,读操作;r/w=1,写操作。本设计中只需往lcd里写数据即可,写时序见图3-4。e:使能信号输入端。读操作时,高电平有效;写操作时,下降沿有效db0db7:数据输入/输出口,单片机与模块之间的数据传送通道。选择4位方式通讯时,不使用db0db3。bla:背光的正端+5v。blk:背光的负端0v。1602模块内部主要由lcd显示屏、控制器、列驱动器和偏压产生电路构成。控制器接受来自mpu的指令和数据,控制着整个模块的工作。主要由显示数据缓冲区ddram,字符发生器cgrom,字符发生器cgram,指令寄存器ir,地址寄存器dr,忙标志bf,地址计数器ac以及时序发生电路组成。模块通过数据总线db0db7和e、r/w、rs三个输入控制端与mpu接口。这三根控制线按照规定的时序相互协调作用,使控制器通过数据总线接受mpu发来的数据和指令,从cgrom中找到欲显示字符的字符码,送入ddram,在lcd显示屏上与ddram存储单元对应的规定位置显示出该字符。控制器还可以根据mpu的指令,实现字符的显示,闪烁和移位等显示效果。cgrom内提供的是内置字符码,cgram则是供用户存储自定义的点阵图形字符。模块字符在lcd显示屏上的显示位置与该字符的字符代码在显示缓冲区ddram内的存储地址一一对应。lcd1602模块内部具有两个8位寄存器:指令寄存器ir和地址寄存器dr,用户可以通过rs和r/w输入信号的组合选择指定的寄存器,进行相应的操作。表3-1中列出了组合选择方式:表3-1 寄存器选择组合rsr/w操 作00将db0db7的指令代码写入指令寄存器ir中01分别将状态标志bf和地址计数器ac内容读到db7和db6db010将db0db7的数据写入数据寄存器中,模块的内部操作将数据写到ddram或者cgram中的数据送入数据寄存器中11将数据寄存器内的数据读到db0db7,模块的内部操作自动将ddram或者cgram中的数据送入数据寄存器中1602提供了较为丰富的指令设置,通过选择相应的指令设置,用户可以实现多种字符显示样式。下面仅简要介绍本次设计中需要用到的一些指令设置。l 清屏指令 clear display清显示指令将空位字符码20h送入全部ddram地址中,时ddram中的内容全部清除,显示消失,地址计数器ac=0,自动增一模式。显示归位,光标闪烁回到原点(显示屏左上角),但不改变移位设置模式。清屏指令码见表3-2。表3-2 清屏指令码rsr/wdb7db6db5db4db3db2db1db00000000001l 进入模式设置指令 entry mode set 见表3-3,进入模式设置指令用于设定光标移动方向和整体显示是否移动。表3-3 模式设置指令码rsr/wdb7db6db5db4db3db2db1db000000001i/ds i/d:字符码写入或者读出ddram后ddram地址指针ac变化方向标志。i/d=1,完成一个字符码传送后,ac自动加1。i/d=0,完成一个字符码传送后,ac自动减1。 s:显示移位标志。s=1,完成一个字符码传送后显示屏整体向右(i/d=0)或向左(i/d=1)移位。s=0,完成一个字符码传送后显示屏不移动。l 显示开关控制指令 display on/off control 指令码见表3-4,该指令功能为控制整体显示开关,光标显示开关和光标闪烁开关。表3-4 显示开关控制指令码rsr/wdb7db6db5db4db3db2db1db00000001dcb d:显示开/关标志。d=1,开显示;d=0,关显示。关显示后,显示数据仍保持在ddram中,开显示即可再现。 c:光标显示控制标志。c=1,光标显示;c=0,光标不显示。不显示光标并不影响模块其他显示功能。显示5*8点阵字体时,光标在第八行显示;显示5*10点阵字符时,光标在第11行显示。 b:闪烁显示控制标志。b=1,光标所在位置会交替显示全黑点阵和显示字符,产生闪烁效果;b=0,光标不闪烁。l 功能设置指令 function set 功能设置指令用于设置接口数据位数,显示行数以及字形。指令码见表3-5。表3-5 功能设置指令码rsr/wdb7db6db5db4db3db2db1db000001dlnf* dl:数据接口宽度标志。dl=1,8位数据总线db7db0;dl=0,4位数据总线db7db4,db3db0不使用,此方式传送数据需分两次进行。 n:显示行数标志。n=0,显示一行;n=1,显示两行。f:显示字符点阵字体标志。f=0,显示5*7点阵字符;f=1,显示5*10点阵字符。1602模块内部设有上电自动复位电路,当外加电源电压超过+4.5v时,自动对模块进行初始化操作,将模块设置为默认的显示工作状态。初始化大约持续10ms左右。初始化进行的指令操作为:l 清显示l 功能显示dl=1:8位数据接口。n=0:显示一行。f=0:显示5*8点阵字符字体。l 显示开/关控制d=0:关显示。c=0:不显示光标。b=0:光标不闪烁。l 输入模式设置i/d=1:ac自动增一。s=0:显示不移位。 但是需要特别注意的是,倘若供电电源达不到要求,模块内部复位电路无法正常工作,上电复位初始化就会失败。因此,最好在系统初始化时通过指令设置对模块进行手动初始化。3.2.2 lcd1602电路图3-5 液晶显示电路图如图3-5,at89s52的p0口接1602的8位数据线,通过输出数据控制1602显示不同的提示字符。1602本身内置各种字符,还可以自定义显示字符。本设计中根据不同场合1602会显示各种提示字符,显示内容对应含义见表3-6。p3.0p3.2接1602控制端,其中p3.0接使能端e,写操作时,使能端下降沿有效。p3.1接读写控制端r/w,r/w=0,读操作;r/w=1,写操作。p3.2接寄存器选择端rs,rs=0,写操作时指向指令寄存器,读操作时指向地址寄存器;rs=1,无论读操作还是写操作都指向数据寄存器。lcd1602的vss为电源地,需接地;vdd为电源电压;v0为lcd驱动电压,接电位器,通过调节电位器控制显示的亮度,使lcd显示清晰而无黑影。背光电源线lcd正负两端分别接电源和地即可。3.3 发声电路发声部分的电路如图3-6,就是用p2.0口控制一个有源蜂鸣器发声,作为提示音或报警音。程序设定为每当识别到有一位按键被按下时,蜂鸣器发声0.1s;开锁时停顿2s发声2s,发声3次;密码错误时每次停顿0.5s发声1s,错误5次以内时错n次发n声,错误5次及以上发声10次。蜂鸣器有两个引脚,其中长脚为正极,短脚为负极。其发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它。由于单片机i/o引脚输出的电流较小,基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,一般使用三极管来放大电流就可以了。本设计中使用三极管9012,p2.0口高电平时三极管截至,蜂鸣器不发声;p2.0口低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制p2.0脚的电平来使蜂鸣器发出声音和关闭。图3-6 发生电路3.4 开锁控制电路开锁控制电路的功能就是在输入正确的密码后开锁。系统使用单片机p2.0引脚发出信号,经三极管放大之后,由继电器驱动电磁阀将锁打开。设计中用一个发光二极管模拟表现锁的开关,只有锁打开之后,继电器吸合至常开触电,发光二极管才会亮起;实际应用中用继电器控制开锁电路的开关。在现代自动控制设备中,都存在电子电路(弱电)与电气电路(强电)的相互连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(如电动机、电磁铁、电灯等),另一方面又要为电子线路的电气电路提供良好的电隔离,以保护电子电路和工作人员的人身的安全。继电器便能完成这一桥梁作用。继电器实际上是用较小的电流去控制较大电流的一种“自动开关”,在电路中起着自动调节、安全保护、转换电路等作用。在大多数情况下,继电器就是一个电磁铁,这个电磁铁的衔铁可以闭合或断开一个、数个触点。当电磁铁的绕组中有电流通过时,衔铁被电磁铁吸引,因而就改变了触点的状态。继电器也是感性器件,所以不能用单片机的i/o口直接控制,而且必须在三极管等控制器件上加反相保护电路。本设计中单片机通过p2.1引脚连接一只作为电子开关的pnp型三极管9012来驱动继电器,继电器的开、关完全由三极管的基极电平进行控制。当p2.1为高电平时,pnp型三极管截止,继电器不工作;反之p2.1为低电平时,三极管导通,继电器得电吸合。(实物中用发光二极管来模拟) 3.5 密码存储电路3.5.1 at24c02简介at24c02是美国atmel公司的低功耗cmos型e2prom,内含256*8位存储空间,具有工作电压宽(2.5v5.5v),擦写次数多(大于10000次),写入速度快(小于10ms),抗干扰能力强,数据不易丢失,体积小等特点。并且它是采用i2c总线式进行数据读写的串行操作,只占用很少的资源和i/o线。at24c02有一个16字节页写缓冲器,该器件通过i2c总线接口进行操作,还有一个专门的写保护功能。at24c02的引脚如图3-7,各引脚功能如下:scl:串行时钟输入管脚,用于产生器件所有数据发送或接收的时钟。sda:双向串行数据/地址管脚,用于器件所有数据的发送或接收。a0、a1、a2:器件地址输入端。这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。使用at24c02最大可级联8个器件,如果只有一个24c02被总线寻址,这三个地址输入脚a0、a1、a2可悬空或连接到vss。图3-7 at24c02引脚图wp:写保护。如果wp管脚连接到vcc,所有的内容都被写保护,只能读。当wp管脚连接到vss或悬空,允许器件进行正常的读/写操作。vss:电源地(gnd)。vcc:电源电压(5v)。at24c02支持i2c总线数据传送协议,i2c总线协议规定:任何将数据传送到总线的器件作为发送器,任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的,主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据发送或接收的模式。i2c总线协议定义如下:l 只有在总线空闲时才允许启动数据传送。l 在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允许有跳变,时钟线为高电平时,数据线的任何电平变化将被看作总线的起始或停止信号。图3-8 at24c02起始/停止时序如图3-8所示,时钟线保持高电平期间,数据线电平从高到低的跳变作为i2c总线的起始信号。时钟线保持高电平期间,数据线电平从低到高的跳变作为i2c总线的停止信号。主器件通过发送一个起始信号启动发送过程,然后发送它所要寻址的从器件的地址。8位从器件地址的高4位固定为1010(见表3-7),接下来的3位a2、a1、a0为器件的地址位,用来定义哪个器件以及器件的哪个部分被主器件访问。从器件8位地址的最低位作为读写控制位。1表示对从器件进行读操作,0表示对从器件进行写操作。在主器件发送起始信号和从器件地址字节后,at24c02监视总线并当其地址与发送的从地址相符时响应一个应答信号。通过sda线at24c02再根据读写控制位r/w的状态进行读或写操作。表3-7 at24c02控制字1010a2a1a0r/wi2c总线数据传送时,每成功地传送一个字节数据后,接收器都必须产生一个应答信号(见图3-9)。应答的器件在第9个时钟周期时将sda线拉低,表示其已收到一个8位数据。at24c02在接收到起始信号和从器件地址之后响应一个应答信号,如果器件已选择了写操作,则在每接收一个8位字节之后响应一个应答信号。图3-9 at24c02应答时序当at24c02工作于读模式时,在发送一个8位数据后释放sda线并监视一个应答信号。一旦接收到应答信号,at24c02继续发送数据,如主器件没有发送应答信号,器件停止传送数据且等待一个停止信号。 at24c02的写模式有字节写和页写两种。本设计中选择字节写模式,其时序见图3-10。该模式下,主器件发送起始命令和从器件地址信息(r/w位置零)给从器件。在从器件产生应答信号后,主器件发送at24c02的字节地址,主器件在收到从器件的另一个应答信号后,再发送数据到被寻址的存储单元。at24c02再次应答,并在主器件产生图3-10 at24c02字节写时序停止信号后开始内部数据的擦写。在内部擦写过程中at24c02不再应答主器件的任何请求。对at24c02读操作的初始化方式和写操作时一样,仅把r/w位置为1。有三种不同的读操作方式:立即地址读、选择读和连续读。设计中需要一次性读出16字节的密码,故用连续读方式。连续读操作可通过立即读或选择性读操作启动,在at24c02发送完一个8位字节数据后,主器件产生一个应答信号来响应,告知at24c02主器件要求更多的数据。对应每个主机产生的应答信号,at24c02将发送一个8位数据字节;当主器件不发送应答信号而发送停止位时结束此操作。连续读操作的时序可见图3-11。图3-11 at24c02连续读时序3.5.2 at24c02电路如图3-12所示,该部分电路的作用就是使用at24c02保存密码,使密码在单片机掉电之后仍能保存。at24c02只需要串行时钟scl引脚接p3.5,串行数据/地址sda引脚接p3.6,即可完成数据和指令的传送,比起并行传输节省i/o口资源。scl和sda各需接一个4.7k的上拉电阻。写保护wp接地,使at24c02可进行正常读写。系统初始化时,从at24c02中读出密码信息存储到单片机中,用户修改密码后再将新密码写入at24c02。这样即便单片机掉电,重启后仍能读取用户密码,从而达到掉电存储的目的。图3-12 at24c02电路3.6 键盘输入电路本设计中采用的4*4矩阵键盘共有16个键位,4根行线连p1口低四位,4根列线连p1口高四位(见图3-13所示)。在按键未被按下时,每一条行线与线列线的交叉处互不相通,当某个按键被按下后,该按键所在的行线和列线连通。这样在p1口的高4位和低4位中各有一位互相连通。通过行列扫描检测出这两位,即可识别出被按下的键。具体识别方式和按键功能完全由软件自定义。系统具体使用的键盘是一体式薄膜键盘,更轻薄更便捷,有印刷字符,无需连接上拉电阻。但键盘内部无电流通过,行扫描之前需给4根行线赋高电平,如果某行和某列相通,则高电平变低,可知该行有按键被按下。然后进行列扫描,同理可识别出按键所在列。确认行和列按键即被识别出来。图3-13 键盘输入电路3.7 手动复位电路为确保系统中电路稳定可靠工作,复位电路是必不可少的一部分。无论是哪种类型的单片机,用户在使用时都必须设计复位电路,以提高单片机在强磁场、电源尖峰等强干扰环境下的工作稳定性或实现从误操作中正确恢复初试状态。如果复位电路可靠性较差,将直接影响到整个单片机系统工作的稳定性,造成系统调试成功后出现死机或“程序跑飞”等现象。图3-14 手动复位电路图单片机复位是使cpu和系统的其他功能部件都处在一个确定的初试状态,并从这个状态开始工作,无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。完成复位操作共需24个状态周期,复位结束后,单片机从地址0000h开始执行程序。0000h0002h是系统的启动单元,而0003h002ah是程序存储器中的特殊保留单元,所以一般在启动单元中存放一条无条件转移指令,以便直接转去执行指定的应用程序。复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防止复位开关闭合过程中引起的抖动而影响复位。图3-14所示的复位电路可以基本实现上述功能,该电路在最基本的复位电路基础上增加了一个手动复位开关,当人为按下按钮时,则vcc的高电平就会直接加到rst端。由于人的动作再快也会使按钮保持接通达数十毫秒,所以完全能够满足复位的时间要求。3.8 晶振电路图3-15 晶振电路图单片机本身是一个复杂的同步时序电路,为保证同步工作方式的实现,必须提供时钟信号,以使其系统在时钟信号的控制下按时序协调工作。单片机的时钟电路由振荡电路和分频电路组成,其中振荡电路由反向器以及其并联外接的石英晶体和电容构成,用于产生振荡脉冲。而分频电路则用于把振荡脉冲分频,以得到所需要的时钟信号。 晶振是晶体振荡器的简称,它用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十,高级的精度更高。电路中的晶振即石英晶体振荡器,它与电容构成振荡回路,为片内放大器提供正反馈和振荡所需的相移条件,从而构成一个稳定的自激振荡器。如图3-15所示,at89s52芯片中的高增益反向放大器输入端为引脚xtal1,输出端引脚为xtal2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(一般取30pf)。这两个电容叫晶振的负载电容,它是根据晶振厂家提供的晶振要求负载电容选值的;换句话说,晶振的频率就是在它提供的负载电容下测得的,能最大限度的保证频率值的误差,也能保证温漂等误差。南华大学机械工程学院毕业设计(论文)4 软件设计系统的软件设计采用汇编语言编码。设计方法是先用文本编辑器编写源码,然后用软件keil c51编译,如果没有错误,可连接生成.hex格式的文件(需事先在keil c51中设置)。如果有错误则无法连接,但可在生成的.obj文件中找到代码错误的地方,便于修改。当然也可以直接在keil中编码。生成的hex文件是记录文本行的ascii文本文件,在hex文件中,每一行是一个hex记录,由十六进制数组成的机器码或者数据常量。hex文件经常被用于将程序或数据传输存储到rom、eprom,大多数编程器和模拟器使用hex文件。在keil中生成的hex文件需要烧写到单片机rom中,系统上电运行后才能看出程序运行的实际效果。烧写需要的设备是烧写器和配套软件superpro280,将单片机引脚放入烧写器并卡紧,打开烧写器,打开软件,选定单片机的型号,at89s52。烧写之前需擦除rom内原有的内容,然后载入上面生成的.hex文件,选择文件格式为intel,然后写入。完成后校验,无误后即可关掉烧写器,取下单片机。4.1 系统主程序图4-1 主程序流程图按键识别按键重定位对应按键处理程序开始初始化按键测试按键按下?否是系统的主程序如图4-1所示。由于用户在使用系统的过程中,可能在任何时刻按下任何按键,而程序都必须对此做出正确响应。所以主程序流程的主要思路是是根据按键的不同进行不同的程序处理,下面具体介绍主程序的流程。4.1.1 初始化及按键识别如图4-2,系统的初始化包括堆栈起始地址的设定,两个定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化,蜂鸣器初始化发声等操作。如果at24c02里没有存储密码,或者读取at24c02失败,则载入系统初始化密码;如果at24c02里有掉电存储的密码,则会读出该密码。系统初始化并读取密码完成后,液晶显示password:,提示用户可以输入密码。此时程序即不断测试按键,检查是否有按键被按下。如果有,则进行按键识别;行列扫描法识别出的键位与对应buff的值如表4-1所示。如果没有按键按下,或者按下的按键没有被识别,buff赋值0ffh,并跳转至按键测试。实际程序运行时,绝大部分时间都在测试按键,等待用户输入。图4-2 初始化及按键识别流程图有按键按下?否是按键测试子程序按键识别子程序按键重定位延时0.5s否识别成功?是开始系统初始化读取密码提示输入密码读取成功?否是载入初始密码4.1.2 按键重定位之所以要进行按键重定位,是因为按键识别子程序的功能只限于确认某个按键被按下,不包括确认按键的意义。根据表4-1可知,识别出的按键排列不符合用户使用习惯,也不利于程序的后续处理,需要重新定位。对buff重新赋值,新的键位值见表4-2,按键左3列仿照手机的9宫格按键,便于用户输入密码。剩下的6个按键为功能按键,各键位对应的功能设定如表4-3。根据不同的按键,程序跳转至不同的程序段,进行对应按键处理,具体流程可见图4-3。表4-1 buff初值表4-2 buff重赋值表4-3 按键对应功能程序开始时,先驱动蜂鸣器发声0.1秒,提示用户程序已经检测到刚才的按键。然后根据buff的初始值进行一系列的对比。如果buff的值是0,1,2,4,5,6,8,9,0中的一个,则按键是属于数字键。分别将buff重赋值为1,2,3,4,5,6,7,8,9,0。然后程序跳转至保存密码部分,将数字密码保存至密码缓冲区。除了两个未定义功能键(buff=0bh或0fh)程序不作任何处理,删除键(buff=0eh)程序直接清空密码缓冲区,然后返回至按键测试之外,其他3个功能按键也有各自的处理程序段。确认键处理当确认键按下后的程序流程,开锁键处理当开锁键按下后的准备开锁流程,改密处理当确认键按下后的预备修改密码流程,稍后将分别详细介绍。开始蜂鸣器发声0.1s数字键?是否确认键?是否删除键?是否开锁键?是否改密键?是否未定义键确认键处理数字重定位保存密码开锁键处理改密键处理清空密码缓冲区跳转至按键测试图4-3 按键重定位流程图开始密码长度+1长度为17?是否保存密码至对应缓冲区跳转至按键测试提示密码超长清空密码缓冲区显示密码长度个*号图4-4 保存密码流程图4.1.3 保存密码如图4-4,该程序段的功能是将密码信息保存至对应的缓冲区。程序设置了一个16字节的密码缓冲区(ps1ps16)和一个16字节缓冲区存储正确的密码(at1at16)。为便于比较,第一次输入的密码保存至ps1,第二次输入的密码保存至ps2,依此类推。后面没有输入的位填充默认值0ffh。为保密起见,输入的密码不能在液晶显示器上显示出来,而以“*”号代替。每输入一位密码,增加一位星号,便于用户直观察觉已经输入的密码位数。另外,密码超长也在此程序段处理。因为密码超长并不涉及其他功能键,在保存密码之前可判断当前密码的长度。如果超过缓冲区16位长度,即认为密码超长,无法继续保存密码。此时清空密码缓冲区所有密码,等待重新输入。4.1.4 确认键处理该程序段就是在识别到按键为确认键之后程序的执行流程,如图4-5所示。输入密码完成后会按确认键,但是输入的密码有三种情况:旧密码,新密码第一次,新密码第二次,三种情况所做的操作也不一样。程序设置有新密码第一次标志位ps_new1和新密码第二次标志位ps_new2,默认都是0。如果ps_new1被置1,则表明输入的密码是新密码第一次,需将缓冲区ps1ps16的信息转存至new1new16,然后ps_new1清0,ps_new2置1,提示重新输入新密码第二次。如果ps_new2被置1,则输入的密码是新密码第二次,会进行新密码校验,调用密码校验子程序判断两次输入的新密码是否一致,然后将ps_new2清0。如果两个标志位均没有被置1,则没有进行改密操作,程序进行密码校验,调用密码校验子程序判断输入密码是否正确。密码正确会有声光提示,并且密码正确标志位psw_f置1,然后提示用户选择开锁(a)还是改密(b)。如果密码错误,系统也有声光警示,此时无法进行开锁或改密操作。程序开始后会首先判别buff值是否匹配(buff=0f5h),如果buff值不匹配,说明程序异常,不是从按键重定位处跳转过来的,应重启程序。以下几个按键的处理程序段开头也有类似的buff值检测,不再做赘述。如果密码长度小于等于2,则密码太短,不进行任何比较,直接清空缓冲区重新检测,可节省程序运行时间。图4-5 确认键处理流程图跳转初始化程序出错跳转至按键测试清空密码缓冲区开始buff=f5?否是长度2 ?否是新密码一次?否是转存新密码提示输入新密码提示密码太短新密码二次?否是新密码校验密码校验子程序密码正确?否是提示选择a or b?提示密码错误4.1.5 开锁键处理跳转初始化程序出错开始buff=f1?否是密码正确?否是跳转至按键测试开锁提示密码错误清空密码缓冲区图4-6 开锁键处理流程图该程序段是程序识别到开锁键被按下后的流程,如图4-6所示。此段并不需校验密码,这里只需检查密码正确标志位psw_f的状态。如果psw_f=1,则前面输入的密码正确,可以开锁。如果psw_f=0,说明密码错误,甚至根本没有校验密码(输入密码后没有按确认键,或者直接按下开锁键),此时提示用户密码错误,无法开锁。开锁过程就是将p2.0口置0,继电器得到低电平就会自动吸合,点亮发光二极管;可以配合液晶显示器和蜂鸣器发声,提示用户锁已被打开。整个过程可持续若干时间,然后p2.0口置1,清空密码缓冲区,标志位psw_f清0,重新检测新的按键。4.1.6 改密键处理跳转初始化程序出错开始buff=f2?否是密码正确?否是跳转至按键测试提示输入新密码提示密码错误清空密码缓冲区图4-7 改密键处理流程图 如图4-7,可以看出,改密键的处理流程跟开锁键类似,都需检查密码正确的标志位,只有psw_f被置1才可以进行改密。不同之处在于,如果密码正确,程序会将新密码第一次的标志位ps_new1置位,这样在下一次按确认键时,程序可以判别出此次输入的密码是新密码第一次。4.1.7 校验新密码新密码的校验用于当新密码第二次的标志位ps_new2=1时,按下确认键后程序判定当前新密码已经输入两次,继而执行新密码校验,即判断两次输入的新密码是否一致。图4-8 校验新密码流程图清空密码缓冲区跳转至按键测试开始密码校验子程序密码一致?否是写入at24c02读出at24c02密码一致?否是调用初试密码提示改密成功提示密码错误如图4-8所示,校验两次输入的新密码是否一致的方法仍然是调用密码校验子程序段。然后查询密码正确标志位psw_f,如果psw_f=1,则表明两次输入的新密码一致,可以修改密码,即可调用at24c02写子程序保存新密码。若psw_f=0,则两次输入不一致,无法修改密码;程序提示密码修改失败,清空密码缓冲区,重新测试按键。因为新密码写入存储器的过程可能发生异常,故写入后马上调用at24c02读子程序读出密码,然后调用密码校验子程序进行对比,即可判断密码是否被正确写入。如果psw_f=1,则密码写入无误,才提示用户修改密码成功。如果psw_f=0,则表明读出的密码跟要用户准备修改的密码不一致,密码修改异常。此时程序可尝试调用at24c02写子程序重新写一遍,再次读出并对比。若仍然不一致,则只能调用系统初试密码,这个密码是系统最初写入单片机rom内部的密码,仅在at24c02无法正常读写的时候启用。4.2 系统相关子程序4.2.1按键检测子程序按键按下?否是开始没有按键p1口低4位写1读p1口p1口高4位写1读p1口p1.0=0?否是buff=00hp1.0=0?否是buff=04hp1.0=0?否是buff=08hp1.0=0?否是buff=0chp1.4=0?否是buff+00hp1.5=0?否是buff+01hp1.6=0?否是buff+02hp1.7=0?否是buff+03h返回buff=0ffh图4-9 按键识别子程序流程图 按键识别子程序按键识别子程序的功能是行列扫描矩阵键盘并识别按键送入buff值,如图4-9所示。尽管进入子程序的前提条件是按键检测子程序检测到有按键被按下,但扫描前仍再次调用按键检测子程序;因为人为按键的速度再快也会持续几十毫秒,远远低于程序的处理速度,所以若是用户正常按下按键,此处的按键检测子程序仍可检测到。此处调用按键检测子程序可以防止因按键抖动产生的不必要识别。前面提到,薄膜按键没有上拉电阻,扫描行列之前需先给行列写1。程序的处理方法是在读行线之前先给p1口低4位送高电平,然后再读p1口低4位;被按下的按键所在行高电平会因为行列导通,高电平被拉低;故p1口低4位中低电平所在行就是被按下的行。同理,在读列线之前先给p1口高4位送高电平,然后再读出,低电平所在的列就
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江苏苏州市张家港市美利肯纺织(张家港)有限公司招聘10人笔试参考题库附带答案详解
- 2025广西玉柴铸造有限公司实习生招聘100人笔试参考题库附带答案详解
- 2025年甘肃西北永新集团招聘11人笔试参考题库附带答案详解
- 2025年河南省储备粮管理集团有限公司招聘12人笔试参考题库附带答案详解
- 2025年四川绵阳机场(集团)有限公司春季招聘18人笔试参考题库附带答案详解
- 2025年中核嘉华公司春季招聘66人笔试参考题库附带答案详解
- 2025国网中兴有限公司高校毕业生招聘(第二批)笔试参考题库附带答案详解
- 2025四川日报报业集团春季招聘22人笔试参考题库附带答案详解
- 2025中核集团所属中核二二社会招聘4人笔试参考题库附带答案详解
- 2025中亚能源有限责任公司境外投资项目中大中国石油公司招聘61人笔试参考题库附带答案详解
- 2025年9月江苏扬州市第二人民医院(苏北人民医院北区医院) 招聘备案制工作人员12人考试参考题库及答案解析
- 2025年修订《仲裁法》学习
- 患者走失应急演练脚本(2篇)
- 数据挖掘教学课件
- 2022年混凝土预制U型槽单元工程质量评定表
- 井喷及井喷失控案例教育
- 职业发展与就业创业指导ppt课件完整版
- 挠度计算模板表格(自动版)
- 宝钢集团生产安全事故案例汇编
- 为老年人更换纸尿裤评分标准
- 热力厂锅炉车间2#锅炉大修施工方案
评论
0/150
提交评论