版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 课程设计题 目:电子密码锁设计学院(系):工业学院专业年级:07级1班机械设计制造及其自动化学生姓名:指导教师:完成日期:2010-1-5摘 要单片机技术是智能化检测与控制领域应用非常普及并且具有很大潜力的技术。论文阐述一个基于单片机的液晶显示电子密码锁的设计与实现。系统采用美国atmel公司的at89s52单片机作为系统核心,液晶显示器lcd1602作为输出设备显示系统提示信息,4*4矩阵薄膜键盘作为输入设备,cmos串行e2prom存储器at24c02作为数据存储器,配合蜂鸣器、继电器等电路构成整个系统硬件;系统软件采用汇编语言编写。设计的系统液晶显示,密码修改方便,具有报警、锁定等功能
2、,使用便捷简单,符合住宅、办公用锁需求,具有一定的实用价值。关键词:密码锁;单片机;at89s52;lcd1602;at24c021 引言 锁具是源流千古的社会性用品,主要用于日常生活和工作中,住宅与部门的安全防范。当前门锁的主流是弹子锁,其保密性不强,钥匙容易被仿制和意外丢失;且持有者需随时携带钥匙,使用不方便。保存贵重物件的保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高昂,且易出现故障。随着科技、经济和社会的发展,当今社会公共安全防范系统对锁具的保密性、牢固性、可靠性、耐用性以及安装使用等提出了新的更高的要求。针对原有锁具的特点和缺陷,为满足人们对锁的使用需求,增加其安全性
3、,用密码代替钥匙的电子密码锁应运而生。2 系统设计2.1 功能设计本系统拟采用单片机为主控芯片,由于单片机种类繁多,各种型号都有其各自特点,应用于不同的环境,因此在选用时要多加比较。一般来说,在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、i/o口、定时/计数器、串行/并行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性等等。基于以上因素本设计选用单片机at89s52作为本设计的核心元件,利用该单片机灵活的编程设计和丰富的i/o端口,及其控制的准确性,实现基本的密码锁功能。单片机密码存储开锁部分液晶显示发声部分电源键盘复位晶振图2-1 系统结构图在单片机i/o接口上外接
4、输入键盘用于输入和一些功能的控制。考虑到密码的存在形式一般为数字或字母形式,而字母数量众多,并且排列不规则,不能使用矩阵式键盘排列字母;并且按键过多会大大增加系统的体积,对适用性极为不利,故只使用数字作为密码。阿拉伯数字不仅便于用户记忆,而且通用性极强,是作为密码的首选。10个数字需要1个不同的按键,故选用为4*4矩阵键盘;除去10个数字键,还剩6个按键可设置不同的功能。用户使用电子密码锁开锁的步骤为:用户输入数字密码,输入完毕后按确认键。如果密码正确,再按开锁键,即可开锁。如果密码错误则报警,如果密码错误多次,还会锁定键盘。这里需要蜂鸣器提示用户按键已按下,开锁需要继电器开关。液晶显示器则直
5、观显示系统当前状态和提示用户需要做的操作。用户修改密码步骤为:首先输入旧密码,输入完毕后按确认键。如果密码正确再按改密键。输入两次新密码并确认。如果两次密码输入长度一致,则密码修改成功。如果两次输入不一致,则密码修改失败。失败后只能重新输入旧密码才能继续改密。为防止系统发生异常,还应提供复位开关,在系统无法正常运转时手动复位。2.2 结构设计如图2-1所示,整个系统以单片机为核心,辅以若干外围电路。其中密码存储部分是输入输出双向结构,保证密码可以掉电保存,上电后读出。其余都是单向输入或输出。电源部分为整个系统供电,采用5v直流电源。键盘输入部分采用4*4矩阵行列键盘,需不断扫描检查有无按键按下
6、。复位部分提供手动复位功能,当系统发生异常或未知错误时可以由用户手动复位单片机。晶振部分是提供外部石英晶体谐振器。系统输出有:液晶显示部分,为用户显示字符提示当前操作状态。蜂鸣器发声,提示用户按键已按下,以及密码正确的提示音,错误的警告音等。开锁电路部分是控制继电器,只有密码正确并选择开锁后,继电器内部的电磁铁才会吸合,发光二极管电路连通后发光,表示锁已打开。3 硬件设计图3-1 系统原理电路图根据上面的结构设计思路,具体设计中选用一块20cm*10cm的通用pcb板做为系统焊接板。单片机为atmel公司的at89s52,电源部分为直流4.5v,3节5号电池供电,实验时也可以用直流5v电源供电
7、。键盘输入部分为4*4矩阵薄膜键盘,不需上拉电阻,但扫描时需先给行线或列线供电。液晶显示器选用1602,可以显示两行,每行16个字符。蜂鸣器为有源5v。继电器为5脚5v。密码存储选用串行at24c02芯片,256b空间,足够存储密码,采用串行传输可以极大减少连线数目。系统原理电路图如图3-1所示。下面按系统的结构具体介绍一些电路及其所用的芯片。3.1 at89s52简介at89s52是一款低功耗、高性能cmos8位微控制器,具有8k可编程 flash存储器。使用 atmel 公司高密度非易失性存储器技术制造,与工业 80c51 产品指令和引脚完全兼容。at89s52具有以下标准功能:8k字节f
8、lash, 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时,内部上拉电阻把端口拉高,此时可以作
9、为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。p2口:p2口是一个具有内部上拉电阻的8位双向i/o口,p2输出缓冲器能驱动4个ttl逻辑电平。对p2端口写1时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。p3口:p3口是一个具有内部上拉电阻的8位双向i/o口,p3输出缓冲器能驱动4个ttl逻辑电平。对p3端口写1时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。rst:复位输入。晶振工作时,rst脚持续2个机器周期高电平将使单片机
10、复位。看门狗计时完成后,rst脚输出96个晶振周期的高电平。特殊寄存器auxr(地址8eh)上的disrto位可以使此功能无效。disrto默认状态下,复位高电平有效。ea/vpp:访问外部程序存储器控制信号。为使能从0000h到ffffh的外部程序存储器读取指令,ea必须接gnd。为了执行内部程序指令,ea应该接vcc。本设计中不需要外部程序存储器,因此需接高电平。ale/prog:地址锁存控制信号(ale)是访问外部程序存储器时,锁存低8位地址的输出脉冲。psen:外部程序存储器选通信号(psen)是外部程序存储器选通信号。当at89s52从外部程序存储器执行外部代码时,psen在每个机器
11、周期被激活两次,而在访问外部数据存储器时,psen将不被激活。xtal1:振荡器反相放大器和内部时钟发生电路的输入端。xtal2:振荡器反相放大器的输出端。以上是at89s52的引脚功能介绍,下面简要介绍at89s52的存储器结构。at89s52有单独的程序存储器和数据存储器,外部程序存储器和数据存储器都可以64k寻址。程序存储器:如果ea引脚接地,程序读取只从外部存储器开始。对于at89s52,如果ea接vcc,程序读写先从内部存储器(地址为0000h1fffh)开始,接着从外部寻址,寻址地址为:2000hffffh。数据存储器:at89s52有256字节片内数据存储器。高128字节与特殊功
12、能寄存器重叠。也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。当一条指令访问高于7fh的地址时,寻址方式决定cpu访问高128字节ram还是特殊功能寄存器空间。3.2 液晶显示电路3.2.1 lcd1602简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式lcd,市面上字符液晶绝大多数是基于hd44780液晶芯片,hd44780是带西文字库的液晶显示控制器,用户只需要向hd44780送ascii的字符码,hd44780就按照内置的rom点阵发生器自动在lcd液晶显示器上显示出来。所以,hd44780主要适用于显示西文ascii字符内容的液晶显示。图3-3 lc
13、d1602引脚图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
14、(wh)mm。lcd1602的16个引脚可参照图3-3,其引脚功能分别为:vss:电源地(gnd)。vcc:电源电压(5v)。v0:lcd驱动电压,液晶显示器对比度调整端。使用时可以通过一个10k的电位器调整对比度,接正电源时对比度最弱,接地电源时对比度最高。rs:寄存器选择输入端,选择模块内部寄存器类型信号。rs=0,进行写模块操作时指向指令寄存器,进行读模块操作时指向地址计数器。rs=1,无论进行读操作还是写操作均指向数据寄存器。r/w:读写控制输入端,选择读/写模块操作信号。r/w=0,读操作;r/w=1,写操作。本设计中只需往lcd里写数据即可,写时序见图3-4。e:使能信号输入端。读
15、操作时,高电平有效;写操作时,下降沿有效db0db7:数据输入/输出口,单片机与模块之间的数据传送通道。选择4位方式通讯时,不使用db0db3。bla:背光的正端+5v。blk:背光的负端0v。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,
16、读操作;r/w=1,写操作。p3.2接寄存器选择端rs,rs=0,写操作时指向指令寄存器,读操作时指向地址寄存器;rs=1,无论读操作还是写操作都指向数据寄存器。lcd1602的vss为电源地,需接地;vdd为电源电压;v0为lcd驱动电压,接电位器,通过调节电位器控制显示的亮度,使lcd显示清晰而无黑影。背光电源线lcd正负两端分别接电源和地即可。3.3 发声电路图3-6 发声电路图发声部分的电路如图3-6,就是用p2.1口控制一个有源蜂鸣器发声,作为提示音或报警音。程序设定为每当识别到有一位按键被按下时,蜂鸣器发声0.1s;开锁时停顿2s发声2s,发声3次;密码错误时每次停顿0.5s发声1
17、s,错误5次以内时错n次发n声,错误5次及以上发声10次。蜂鸣器有两个引脚,其中长脚为正极,短脚为负极。其发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它。由于单片机i/o引脚输出的电流较小,基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,一般使用三极管来放大电流就可以了。本设计中使用三极管9012,p2.1口高电平时三极管截至,蜂鸣器不发声;p2.1口低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制p2.1脚的电平来使蜂鸣器发出声音和关闭。图3-7 开锁控制电路图3.4 开锁控制电路开锁控制电路如图3-7
18、,电路的功能就是在输入正确的密码后开锁。系统使用单片机p2.0引脚发出信号,经三极管放大之后,由继电器驱动电磁阀将锁打开。设计中用一个发光二极管模拟表现锁的开关,只有锁打开之后,继电器吸合至常开触电,发光二极管才会亮起;实际应用中用继电器控制开锁电路的开关。在现代自动控制设备中,都存在电子电路(弱电)与电气电路(强电)的相互连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(如电动机、电磁铁、电灯等),另一方面又要为电子线路的电气电路提供良好的电隔离,以保护电子电路和工作人员的人身的安全。继电器便能完成这一桥梁作用。继电器实际上是用较小的电流去控制较大电流的一种“自动开关”,在电
19、路中起着自动调节、安全保护、转换电路等作用。在大多数情况下,继电器就是一个电磁铁,这个电磁铁的衔铁可以闭合或断开一个、数个触点。当电磁铁的绕组中有电流通过时,衔铁被电磁铁吸引,因而就改变了触点的状态。3.5.1 at24c02简介at24c02是美国atmel公司的低功耗cmos型e2prom,内含256*8位存储空间,具有工作电压宽(2.5v5.5v),擦写次数多(大于10000次),写入速度快(小于10ms),抗干扰能力强,数据不易丢失,体积小等特点。并且它是采用i2c总线式进行数据读写的串行操作,只占用很少的资源和i/o线。at24c02有一个16字节页写缓冲器,该器件通过i2c总线接口
20、进行操作,还有一个专门的写保护功能。at24c02的引脚如图3-9,各引脚功能如下:scl:串行时钟输入管脚,用于产生器件所有数据发送或接收的时钟。sda:双向串行数据/地址管脚,用于器件所有数据的发送或接收。图3-9 at24c02引脚图a0、a1、a2:器件地址输入端。这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。使用at24c02最大可级联8个器件,如果只有一个24c02被总线寻址,这三个地址输入脚a0、a1、a2可悬空或连接到vss。wp:写保护。如果wp管脚连接到vcc,所有的内容都被写保护,只能读。当wp管脚连接到vss或悬空,允许器件进行正常的读/写操作。图
21、3-14 密码存储电路图3.5.2 at24c02电路如图3-14所示,该部分电路的作用就是使用at24c02保存密码,使密码在单片机掉电之后仍能保存。at24c02只需要串行时钟scl引脚接p3.5,串行数据/地址sda引脚接p3.6,即可完成数据和指令的传送,比起并行传输节省i/o口资源。scl和sda各需接一个5.1k的上拉电阻。写保护wp接地,使at24c02可进行正常读写。系统初始化时,从at24c02中读出密码信息存储到单片机中,用户修改密码后再将新密码写入at24c02。这样即便单片机掉电,重启后仍能读取用户密码,从而达到掉电存储的目的。3.6 键盘输入电路图3-15 键盘输入电
22、路图本设计中采用的4*4矩阵键盘共有16个键位,4根行线连p1口低四位,4根列线连p1口高四位(见图3-15所示)。在按键未被按下时,每一条行线与线列线的交叉处互不相通,当某个按键被按下后,该按键所在的行线和列线连通。这样在p1口的高4位和低4位中各有一位互相连通。通过行列扫描检测出这两位,即可识别出被按下的键。具体识别方式和按键功能完全由软件自定义。系统具体使用的键盘是一体式薄膜键盘,更轻薄更便捷,有印刷字符,无需连接上拉电阻。但键盘内部无电流通过,行扫描之前需给4根行线赋高电平,如果某行和某列相通,则高电平变低,可知该行有按键被按下。然后进行列扫描,同理可识别出按键所在列。确认行和列按键即
23、被识别出来。3.7 手动复位电路为确保系统中电路稳定可靠工作,复位电路是必不可少的一部分。无论是哪种类型的单片机,用户在使用时都必须设计复位电路,以提高单片机在强磁场、电源尖峰等强干扰环境下的工作稳定性或实现从误操作中正确恢复初试状态。如果复位电路可靠性较差,将直接影响到整个单片机系统工作的稳定性,造成系统调试成功后出现死机或“程序跑飞”等现象。图3-16 手动复位电路图单片机复位是使cpu和系统的其他功能部件都处在一个确定的初试状态,并从这个状态开始工作,无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。完成复位操作共需24个状态周期,复位结束后,单片机从地址0000h开始执
24、行程序。0000h0002h是系统的启动单元,而0003h002ah是程序存储器中的特殊保留单元,所以一般在启动单元中存放一条无条件转移指令,以便直接转去执行指定的应用程序。 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防止复位开关闭合过程中引起的抖动而影响复位。图3-16所示的复位电路可以基本实现上述功能,该电路在最基本的复位电路基础上增加了一个手动复位开关,当人为按下按钮时,则vcc的高电平就会直接加到rst端。由于人的动作再快也会使按钮保持接通达数十毫秒,所以完全能够满足复位的时间要求。3.8 晶
25、振电路图3-17 晶振电路图单片机本身是一个复杂的同步时序电路,为保证同步工作方式的实现,必须提供时钟信号,以使其系统在时钟信号的控制下按时序协调工作。单片机的时钟电路由振荡电路和分频电路组成,其中振荡电路由反向器以及其并联外接的石英晶体和电容构成,用于产生振荡脉冲。而分频电路则用于把振荡脉冲分频,以得到所需要的时钟信号。晶振是晶体振荡器的简称,它用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十,高级的精度更高。电路中的晶振即石英晶体振荡器,它与电容构成振荡回路,为片内放大器提供正反馈和振荡所需的相移条
26、件,从而构成一个稳定的自激振荡器。如图3-17所示,at89s52芯片中的高增益反向放大器输入端为引脚xtal1,输出端引脚为xtal2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(一般取30pf)。这两个电容叫晶振的负载电容,它是根据晶振厂家提供的晶振要求负载电容选值的;换句话说,晶振的频率就是在它提供的负载电容下测得的,能最大限度的保证频率值的误差,也能保证温漂等误差。4 软件设计系统的软件设计采用汇编语言编码。设计方法是先用文本编辑器编写源码,然后用软件keil c51编译,如果没有错误,可连接生成.hex格式的文件(需事先在keil c51中设置)。如果有错误则无法连接,但可在
27、生成的.obj文件中找到代码错误的地方,便于修改。当然也可以直接在keil中编码。生成的hex文件是记录文本行的ascii文本文件,在hex文件中,每一行是一个hex记录,由十六进制数组成的机器码或者数据常量。hex文件经常被用于将程序或数据传输存储到rom、eprom,大多数编程器和模拟器使用hex文件。在keil中生成的hex文件需要烧写到单片机rom中,系统上电运行后才能看出程序运行的实际效果。烧写需要的设备是烧写器和配套软件superpro280,将单片机引脚放入烧写器并卡紧,打开烧写器,打开软件,选定单片机的型号,at89s52。烧写之前需擦除rom内原有的内容,然后载入上面生成的.
28、hex文件,选择文件格式为intel,然后写入。完成后校验,无误后即可关掉烧写器,取下单片机。4.1 系统主程序系统的主程序如图4-1所示。由于用户在使用系统的过程中,可能在任何时刻按下任何按键,而程序都必须对此作出正确响应。所以主程序流程的主要思路是是根据按键的不同进行不同的程序处理,下面具体介绍主程序的流程。图4-1 主程序流程图按键识别按键重定位对应按键处理程序开始初始化按键测试按键按下?否是4.1.1 初始化及按键识别如图4-2,系统的初始化包括堆栈起始地址的设定,两个定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化,蜂鸣器初始化发声等操作。如果a
29、t24c02里没有存储密码,或者读取at24c02失败,则载入系统初始化密码;如果at24c02里有掉电存储的密码,则会读出该密码。系统初始化并读取密码完成后,液晶显示password:,提示用户可以输入密码。此时程序即不断测试按键,检查是否有按键被按下。如果有,则进行按键识别;行列扫描法识别出的键位与对应buff的值如表4-1所示。如果没有按键按下,或者按下的按键没有被识别,buff赋值0ffh,并跳转至按键测试。实际程序运行时,绝大部分时间都在测试按键,等待用户输入。4.1.2 按键重定位之所以要进行按键重定位,是因为按键识别子程序的功能只限于确认某个按键被按下,不包括确认按键的意义。根据
30、表4-1可知,识别出的按键排列不符合用户使用习惯,也不利于程序的后续处理,需要重新定位。对buff重新赋值,新的键位值见表4-2,按键左3列仿照手机的9宫格按键,便于用户输入密码。剩下的6个按键为功能按键,各键位对应的功能设定如表4-3。表4-1 buff初值表4-2 buff重赋值根据不同的按键,程序跳转至不同的程序段,进行对应按键处理,具体流程可见图4-3。表4-3 按键对应功能程序开始时,先驱动蜂鸣器发声0.1秒,提示用户程序已经检测到刚才的按键。然后根据buff的初始值进行一系列的对比。如果buff的值是0,1,2,4,5,6,8,9,d中的一个,则按键是属于数字键。分别将buff重赋
31、值为1,2,3,4,5,6,7,8,9,0。然后程序跳转至保存密码部分,将数字密码保存至密码缓冲区。除了两个未定义功能键(buff=0bh或0fh)程序不作任何处理,删除键(buff=0eh)程序直接清空密码缓冲区,然后返回至按键测试之外,其他3个功能按键也有各自的处理程序段。确认键处理当确认键按下后的程序流程,开锁键处理当开锁键按下后的准备开锁流程,改密处理当确认键按下后的预备修改密码流程,稍后将分别详细介绍。开始密码长度+1长度为17?是否保存密码至对应缓冲区跳转至按键测试提示密码超长清空密码缓冲区显示密码长度个*号图4-4 保存密码流程图4.1.3 保存密码如图4-4,该程序段的功能是将
32、密码信息保存至对应的缓冲区。程序设置了一个16字节的密码缓冲区(ps1ps16)和一个16字节缓冲区存储正确的密码(at1at16)。为便于比较,第一次输入的密码保存至ps1,第二次输入的密码保存至ps2,依此类推。后面没有输入的位填充默认值0ffh。为保密起见,输入的密码不能在液晶显示器上显示出来,而以“*”号代替。每输入一位密码,增加一位星号,便于用户直观察觉已经输入的密码位数。另外,密码超长也在此程序段处理。因为密码超长并不涉及其他功能键,在保存密码之前可判断当前密码的长度。如果超过缓冲区16位长度,即认为密码超长,无法继续保存密码。此时清空密码缓冲区所有密码,等待重新输入。4.1.4
33、确认键处理该程序段就是在识别到按键为确认键之后程序的执行流程,如图4-5所示。输入密码完成后会按确认键,但是输入的密码有三种情况:旧密码,新密码第一次,新密码第二次,三种情况所做的操作也不一样。程序设置有新密码第一次标志位ps_new1和新密码第二次标志位ps_new2,默认都是0。如果ps_new1被置1,则表明输入的密码是新密码第一次,需将缓冲区ps1ps16的信息转存至new1new16,然后ps_new1清0,ps_new2置1,提示重新输入新密码第二次。如果ps_new2被置1,则输入的密码是新密码第二次,会进行新密码校验,调用密码校验子程序判断两次输入的新密码是否一致,然后将ps_
34、new2清0。如果两个标志位均没有被置1,则没有进行改密操作,程序进行密码校验,调用密码校验子程序判断输入密码是否正确。密码正确会有声光提示,并且密码正确标志位psw_f置1,然后提示用户选择开锁(a)还是改密(b)。如果密码错误,系统也有声光警示,此时无法进行开锁或改密操作。程序开始后会首先判别buff值是否匹配(buff=0f5h),如果buff值不匹配,说明程序异常,不是从按键重定位处跳转过来的,应重启程序。以下几个按键的处理程序段开头也有类似的buff值检测,不再做赘述。如果密码长度小于等于2,则密码太短,不进行任何比较,直接清空缓冲区重新检测,可节省程序运行时间。4.1.5 开锁键处
35、理跳转初始化程序出错开始buff=f1?否是密码正确?否是跳转至按键测试开锁提示密码错误清空密码缓冲区图4-6 开锁键处理流程图该程序段是程序识别到开锁键被按下后的流程,如图4-6所示。此段并不需校验密码,这里只需检查密码正确标志位psw_f的状态。如果psw_f=1,则前面输入的密码正确,可以开锁。如果psw_f=0,说明密码错误,甚至根本没有校验密码(输入密码后没有按确认键,或者直接按下开锁键),此时提示用户密码错误,无法开锁。开锁过程就是将p2.0口置0,继电器得到低电平就会自动吸合,点亮发光二极管;可以配合液晶显示器和蜂鸣器发声,提示用户锁已被打开。整个过程可持续若干时间,然后p2.0
36、口置1,清空密码缓冲区,标志位psw_f清0,重新检测新的按键。4.1.6 改密键处理跳转初始化程序出错开始buff=f2?否是密码正确?否是跳转至按键测试提示输入新密码提示密码错误清空密码缓冲区图4-7 改密键处理流程图 如图4-7,可以看出,改密键的处理流程跟开锁键类似,都需检查密码正确的标志位,只有psw_f被置1才可以进行改密。不同之处在于,如果密码正确,程序会将新密码第一次的标志位ps_new1置位,这样在下一次按确认键时,程序可以判别出此次输入的密码是新密码第一次。4.1.7 校验新密码新密码的校验用于当新密码第二次的标志位ps_new2=1时,按下确认键后程序判定当前新密码已经输
37、入两次,继而执行新密码校验,即判断两次输入的新密码是否一致。如图4-8所示,校验两次输入的新密码是否一致的方法仍然是调用密码校验子程序段。然后查询密码正确标志位psw_f,如果psw_f=1,则表明两次输入的新密码一致,可以修改密码,即可调用at24c02写子程序保存新密码。若psw_f=0,则两次输入不一致,无法修改密码;程序提示密码修改失败,清空密码缓冲区,重新测试按键。因为新密码写入存储器的过程可能发生异常,故写入后马上调用at24c02读子程序读出密码,然后调用密码校验子程序进行对比,即可判断密码是否被正确写入。如果psw_f=1,则密码写入无误,才提示用户修改密码成功。如果psw_f
38、=0,则表明读出的密码跟要用户准备修改的密码不一致,密码修改异常。此时程序可尝试调用at24c02写子程序重新写一遍,再次读出并对比。若仍然不一致,则只能调用系统初试密码,这个密码是系统最初写入单片机rom内部的密码,仅在at24c02无法正常读写的时候启用。4.2 系统相关子程序4.2.1 按键识别子程序按键识别子程序的功能是行列扫描矩阵键盘并识别按键送入buff值,如图4-9所示。尽管进入子程序的前提条件是按键检测子程序检测到有按键被按下,但扫描前仍再次调用按键检测子程序;因为人为按键的速度再快也会持续几十毫秒,远远低于程序的处理速度,所以若是用户正常按下按键,此处的按键检测子程序仍可检测
39、到。此处调用按键检测子程序可以防止因按键抖动产生的不必要识别。前面提到,薄膜按键没有上拉电阻,扫描行列之前需先给行列写1。程序的处理方法是在读行线之前先给p1口低4位送高电平,然后再读p1口低4位;被按下的按键所在行高电平会因为行列导通,高电平被拉低;故p1口低4位中低电平所在行就是被按下的行。同理,在读列线之前先给p1口高4位送高电平,然后再读出,低电平所在的列就是被按下的列。确定buff初值的方法是行扫描时送该行第一个按键的值入buff,4行的首个按键键值分别为00h,04h,08h,0ch。然后在列扫描时给buff加上按键所在列的值,分别加00h,01h,02h,03h。即可得到buff
40、初值。至于buff的重赋值,则在按键重定位中根据初值对应修改。4.2.2 液晶显示子程序 液晶显示子程序在每次更新显示内容时都会被调用,其流程如图4-10所示。每次更新显示内容前,需清显示清空lcd原先的显示内容,清屏指令的指令码为01h,即将p0口赋值01h,然后写入指令寄存器ir。lcd1602要显示的内容是根据其控制器内置的字符码表,事先列出要显示的ascii字符串。每次送一个字符的ascii码入p0口,然后写入数据寄存器dr,最后将字符地址加一,lcd1602会将写入的ascii码对应的字符依次显示出来。由于显示字符串的长度不尽相同,约定每串字符以00h结尾;程序检测到字符码为00h时
41、,即停止写入,返回。lcd显示的内容在下次更新前会一直保持。4.2.3 at24c02子程序at24c02的子程序包括从at24c02中读取信息和将信息写入at24c02,首先介绍at24c02的读程序。如图4-11所示,单片机作为主器件,发送起始信号和要寻址的从器件的地址;因为此时即随后的发送读取地址操作都是单片机往at24c02写入控制信息,所以r/w要置0。本设计中只用一个at24c02,从器件地址为0,对应代码为0a0h。at24c02接收到信号后,发送应答信号。单片机接收到应答信号后,再发送要读取信息在从器件上的地址;本设计中从0地址开始读,则送00h。再次接收到从器件的应答信号后,
42、单片机重新发送起始信号和读模式信号,将r/w位置1,对应代码为0a1h,正式开始读取信息。本设计中需要连续读取16字节的信息,所以选择连续读方式;即是单片机每接收到一字节的信息后,存入正确密码缓冲区(at1at16),然后产生一个应答信号,告知at24c02要求更多的数据。当单片机不发送应答信号而发送停止信号时表示读取结束。写入at24c02的子程序流程如图4-12所示。单片机发送起始信号,接着发送从器件at24c02所在地址(0a0h)。这里与读at24c02子程序不同的是,从开始到结束都是单片机控制at24c02写入信息,所以r/w置1无需更改。对应地址上的从器件at24c02接收到地址信
43、号后发送应答信号。主器件在接收到应答信号后,发送要写入信息欲保存在从器件上的地址,本设计中从0地址开始保存,故地址为00h。单片机再次接收到从器件的应答信号后即可开始写入信息。本设计中采用字节写模式,即at24c02在每接收一个8位字节之后响应一个应答信号,单片机在接收到应答信号后认为该字节成功写入,便准备下一字节的数据。直到所有数据发送完毕,单片机发送停止信号,结束写操作。5 系统调试与测试系统的软硬件设计都完成后,还不能直接上电运行;需要对系统进行详细的调试,以消除在设计过程中出现的各种错误。单片机系统的硬件调试和软件调试是不能分开的,很多硬件错误是在软件调试中被发现和纠正的。但通常是先排
44、除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。所以硬件的调试是基础,如果硬件调试不通过,软件设计则是无从做起。当硬件设计从布线到焊接安装完成之后,就开始进入硬件调试阶段。首先应该确认电源电压是否正常,用电压表测量接地引脚跟电源引脚之间的电压,看是否是电源电压。接下来就是检查复位引脚电压是否正常。分别测量按下复位按钮和放开复位按钮的电压值,看是否正确。然后再检查晶振是否起振了,一般用示波器来看晶振引脚的波形,注意应该使用示波器探头的“x10”档。另一个办法是测量复位状态下的io口电平,按住复位键不放,然后测量io口(没接外部上拉的p0口除外)的电压,看是否是高电平,如果不是高电平,
45、则多半是因为晶振没有起振。另外还要注意的地方是,如果使用片内rom的话,一定要将ea引脚拉高,否则会出现程序乱跑的情况。如果系统运行不稳定的话,有时是因为电源滤波不好导致的。在单片机的电源引脚跟地引脚之间接上一个0.1uf的电容会有所改善。如果电源没有滤波电容的话,则需要再接一个更大滤波电容,例如220uf的。遇到系统不稳定时,就可以并上电容,越靠近芯片越好。系统的键盘输入电路,蜂鸣器发声电路,at24c02密码存储电路,继电器开锁电路,液晶显示电路,这几个部分在检查硬件无误后,需要结合软件调试。可编写单独控制某一部分的程序,运行看是否可以正确控制。如蜂鸣器发声电路,可编写程序控制单片机p2.
46、1口电平,上电运行看是否正常发声。一些无法直接观测出运行效果的电路,如键盘输入电路和密码存储电路,则需结合液晶显示器调试。如键盘输入电路,需加上按键显示程序显示被按下按键的buff值。6 结论本设计利用单片机at89s52作为主控芯片,配合液晶显示器lcd1602,串行传输存储器at24c02,4*4矩阵薄膜键盘,蜂鸣器,继电器以及其他外围电路,用单片机汇编语言编写的控制程序,成功设计出一款利用密码开锁,可以随时改密,丰富声光提示信息,具有适用价值的电子密码锁。本系统发挥出单片机应有的价值,完成了电子密码锁的基础功能。利用单片机控制矩阵键盘输入密码,液晶显示器显示英文字符,继电器开锁,蜂鸣器发
47、声等部件都运转良好,密码锁运行的效果也可以正确呈现。附 录;电子密码锁 汇编 源代码;*buff equ 6fh ;当前输入的密码timers2 equ 6eh ;密码输入错误的次数timers equ 6dh ;输入数字的位数;密码输入缓冲区ps1 equ 6chps2 equ 6bhps3 equ 6ahps4 equ 69hps5 equ 68hps6 equ 67hps7 equ 66hps8 equ 65hps9 equ 64hps10 equ 63hps11 equ 62hps12 equ 61hps13 equ 60hps14 equ 5fhps15 equ 5ehps16 eq
48、u 5dh;at24c02读取缓冲区at1 equ 5chat2 equ 5bhat3 equ 5ahat4 equ 59hat5 equ 58hat6 equ 57hat7 equ 56hat8 equ 55hat9 equ 54hat10 equ 53hat11 equ 52hat12 equ 51hat13 equ 50hat14 equ 4fhat15 equ 4ehat16 equ 4dh;新密码输入缓冲区new1 equ 4chnew2 equ 4bhnew3 equ 4ahnew4 equ 49hnew5 equ 48hnew6 equ 47hnew7 equ 46hnew8 e
49、qu 45hnew9 equ 44hnew10 equ 43hnew11 equ 42hnew12 equ 41hnew13 equ 40hnew14 equ 3fhnew15 equ 3ehnew16 equ 3dhps_new1 bit 20h ;新密码第一次标志位ps_new2 bit 21h ;新密码第二次标志位psw_f bit 22h ;密码是否正确的标志位rd_f bit 23h ;读取密码是否成功标志wr_f bit 24h ;写入密码是否成功标志;lcd1602控制位e bit p3.0 ;使能端,读操作时,高电平有效;写操作时,下降沿有效rw bit p3.1 ;读操作为0
50、,写操作为1rs bit p3.2 ;寄存器选择输入端;at24c02控制位scl bit p3.6sda bit p3.7org 0000hajmp startorg 0030h;*start: ;初始化mov sp, #70hmov tmod, #11hmov th0, #3chmov tl0, #0b0hmov th1, #3chmov tl1, #0b0hmov p0,#01h ;清除屏幕,地址计数器ac=0,自动增一模式lcall enablemov p0,#38h ;8位数据总线,显示两行lcall enablemov p0,#38hlcall enablemov p0,#38hl
51、call enablemov p0,#06h ;显示模式,ac自动增一,显示不位移lcall enablemov p0,#0ch ;开显示,不显示光标lcall enablesetb p2.0 ;低电平开锁clr p2.1 ;低电平蜂鸣器响mov buff,#0ffh mov timers2,#00hclr psw_fclr rd_fclr wr_flcall initps ;初始化密码lcall initatlcall initnewlcall secsetb p2.1 ;关蜂鸣器lcall at_rd ;读取at24c02中存储的密码jb rd_f,setlcdlcall setat ;读
52、取密码失败则载入初始密码setlcd:nopmov dptr,#show_pslcall lcdlcall t100msd;*main: ;程序开始mov buff,#0ffhlcall ks ;检查有没有按键按下jnz lk1 ;有按键按下则跳转lcall t500msdajmp main ;没有则继续检查lk1:lcall t10msdlcall sbie ;按键识别子程序mov r4, buffcjne r4, #0ffh,ch_kf ;识别到按键则跳转lcall t100msdajmp main ;否则继续检查键盘;*ch_kf: ;重新定位按键nopclr p2.1 ;密码输入一位,
53、鸣叫一声lcall t100msdsetb p2.1lcall t100msdlcall t100msdmov r4,buff;输入开锁键,开锁!cjne r4, #03h,ri_key_chmov buff, #0f1hajmp openri_key_ch: ;输入修改密码键cjne r4, #07h,ri_key_admov buff, #0f2hajmp ps_chri_key_ad: ;未设置功能的按键cjne r4, #0bh,ri_key_demov buff, #0f3hajmp er_keyri_key_de: ;未设置功能的按键cjne r4, #0fh,ri_key_enm
54、ov buff, #0f4hajmp er_keyri_key_en: ;输入确认键cjne r4, #0ch,ri_key_remov buff, #0f5hajmp ps_enri_key_re: ;输入删除键,重来cjne r4, #0eh,ri_key_1mov buff, #0f6hajmp ps_reri_key_1:cjne r4, #00h,ri_key_2mov buff, #01hajmp key_digri_key_2:cjne r4, #01h,ri_key_3mov buff, #02hajmp key_digri_key_3:cjne r4, #02h,ri_key_4mov buff, #03hajmp key_digri_key_4:cjne r4, #04h,ri_key_5mov buff, #04hajmp key_digri_key_5:cjne r4, #05h,ri_key_6mov buff, #05hajmp key_digri_key_6:cjne r4, #06h,ri_key_7mov buff, #06hajmp key_digri_key_7:cjne r4, #08h,ri_key_8mov buff, #07hajmp key_digri_key_8:cjne r4, #09h,ri_key_9mov buff, #
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年上海房屋装修工程调解合同
- 2024年度二手房出售合同中的附件:房产证复印件及交易证明
- 2024年度承包合同园林绿化工程承包合同(04版)
- 2024年度汽车销售代理权合同
- 保洁个人年终工作总结
- 2024年库房火灾保险合同
- 2024年奶制品销售协议
- 2024双方关于电商平台运营合作的合同
- 2024丙丁双方广告发布与代理合同
- 2024年建筑工程施工安全防护补充协议
- JTG∕T F30-2014 公路水泥混凝土路面施工技术细则
- 2024年高中语文学业水平过关测试四-名句名篇默写积累过关训练(全国通用)学生版
- 糖尿病性舞蹈病
- 医学类-教学查房异位妊娠(宫外孕)
- 眼视光技术职业生涯规划大赛
- 《第八课 我的身体》参考课件
- 肥料创业计划书
- 信息通信网络运行管理员(高级)理论考试题库(学员用)
- 公司卷烟物流管理规范
- 报告医疗器械不良事件
- 物联网安全分析报告
评论
0/150
提交评论