基于单片机多功能密码锁的设计.docx
《基于单片机多功能密码锁的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机多功能密码锁的设计.docx(28页珍藏版)》请在冰点文库上搜索。
基于单片机多功能密码锁的设计
基于单片机多功能密码锁的设计
摘要
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点。
单片机技术是智能化检测与控制领域应用非常普及并且具有很大潜力的技术。
论文阐述一个基于单片机的液晶显示电子密码锁的设计与实现。
系统采用美国Atmel公司的AT89S52单片机作为系统核心,液晶显示器LCD1602作为输出设备显示系统提示信息,4*4矩阵薄膜键盘作为输入设备,CMOS串行E2PROM存储器AT24C02作为数据存储器,配合蜂鸣器、继电器等电路构成整个系统硬件;系统软件采用汇编语言编写。
设计的系统液晶显示,密码修改方便,具有报警、锁定等功能,使用便捷简单,符合住宅、办公用锁需求,具有一定的实用价值。
关键词:
单片机;密码锁;AT89S52;LCD1602;AT24C0
Abstract
Inourdailylife,thesecurityofhouse,companydepartment,documentsandfinanceforms,alsosomepersonalinformationalwaysusedthelocktoprotectthem.Ifusethenormalkeystolockoutthedoor,weshouldtakenmanykeyswithourself.Thatissodifficulttouse.Andifwelostthekeyswithcareless,thesecuritylooksveryeasytobreakout.Asthedevelopingofthetechnology,peopleaskforhighsecurtymachines.Forsatisfythisrequest,thecipherlockisappeared.Thecipherhashighersecurity,lowercost,lowerpowerandeasytouse.
SCMtechnologyisverypopularandhasgreatpotentialinapplicationofintelligentdetectionandcontrolfield.ThisthesisdescribesthedesignandimplementationofLCDelectronicpassword-locksystembasedonSCM.ThesystemusestheproductofAmericaAtmelcorporationAT89S52asthecoreofsystem,liquidcrystalmonitor1602astheoutputdevicedisplayingthepromptinformationofsystem,4*4matrixmembranekeyboardastheinputdevice,serialE2PROMmemoryAT24C02asthedatastorage,withbuzzer,relay,andothercircuitstogetherconstitutethesystemhardware.Thesoftwareofthesystemiswritteninassemblylanguage.ThedesignedsystemdisplayinLCD,changepasswordeasily,hasthefunctionofalarming,locking,andsoon.Thissystemissimpleandeasytouse,meetsthedemandofresidential,officelockneeds,hassomepracticalvalue.
Keywords:
SCM;Password-Lock;AT89S52;LCD1602;AT24C02
1绪论
锁具是源流千古的社会性用品,主要用于日常生活和工作中,住宅与部门的安全防范。
当前门锁的主流是弹子锁,其保密性不强,钥匙容易被仿制和意外丢失;且持有者需随时携带钥匙,使用不方便。
保存贵重物件的保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高昂,且易出现故障。
随着科技、经济和社会的发展,当今社会公共安全防范系统对锁具的保密性、牢固性、可靠性、耐用性以及安装使用等提出了新的更高的要求。
针对原有锁具的特点和缺陷,为满足人们对锁的使用需求,增加其安全性,用密码代替钥匙的电子密码锁应运而生。
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
电子密码锁的出现给人们带来了极大的方便,有很广阔的市场前景。
现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。
其性能和安全性已大大超过了机械锁,特点有:
●保密性好,编码量多。
●随机开锁成功率几乎为零。
●密码可变。
用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。
●误码输入保护。
当输入密码多次错误时,报警系统自动启动。
●操作简单易行,一学即会。
论文阐述基于美国Atmel公司的AT89S52单片机,采用液晶显示器1602作为输出显示系统提示信息的电子密码锁的设计与实现。
2系统设计
2.1功能设计
本系统拟采用单片机为主控芯片,由于单片机种类繁多,各种型号都有其各自特点,应用于不同的环境,因此在选用时要多加比较。
一般来说,在选取单片机时从下面几个方面考虑:
性能、存储器、运行速度、I/O口、定时/计数器、串行/并行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性等等。
基于以上因素本设计选用单片机AT89S52作为本设计的核心元件,利用该单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。
在单片机I/O接口上外接输入键盘用于输入和一些功能的控制。
考虑到密码的存在形式一般为数字或字母形式,而字母数量众多,并且排列不规则,不能使用矩阵式键盘排列字母;并且按键过多会大大增加系统的体积,对适用性极为不利,故只使用数字作为密码。
阿拉伯数字不仅便于用户记忆,而且通用性极强,是作为密码的首选。
10个数字需要1个不同的按键,故选用为4*4矩阵键盘;除去10个数字键,还剩6个按键可设置不同的功能。
用户使用密码锁开锁的步骤为:
用户输入数字密码,输入完毕后按确认键。
如果密码正确,再按开锁键,即可开锁。
如果密码错误则报警,如果密码错误多次,还会锁定键盘。
这里需要蜂鸣器提示用户按键已按下,开锁需要继电器开关。
液晶显示器则直观显示系统当前状态和提示用户需要做的操作。
用户修改密码步骤为:
首先输入旧密码,输入完毕后按确认键。
如果密码正确再按改密键。
输入两次新密码并确认。
如果两次密码输入一致,则密码修改成功。
如果两次输入不一致,则密码修改失败。
失败后只能重新输入旧密码才能继续改密。
为防止系统发生异常,还应提供复位开关,在系统无法正常运转时手动复位。
2.2结构设计
如图一所示,整个系统以单片机为核心,辅以若干外围电路。
其中密码存储部分是输入输出双向结构,保证密码可以掉电保存,上电后读出。
其余都是单向输入或输出。
电源部分为整个系统供电,采用5V直流电源。
键盘输入部分采用4*4矩阵行列键盘,需不断扫描检查有无按键按下。
复位部分提供手动复位功能,当系统发生异常或未知错误时可以由用户手动复位单片机。
晶振部分是提供外部石英晶体谐振器。
系统输出有:
液晶显示部分,为用户显示字符提示当前操作状态。
蜂鸣器发声,提示用户按键已按下,以及密码正确的提示音,错误的警告音等。
开锁电路部分开锁电路部分是控制继电器,只有密码正确并选择开锁后,继电器内部的电磁铁才会吸合,发光二极管电路连通后发光,表示锁已打开。
3硬件设计
3.1AT89S52简介
AT89S52是一款低功耗、高性能CMOS8位微控制器,具有8K可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
AT89S52具有以下标准功能:
8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
其引脚如图2所示,下面简要介绍其引脚功能:
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:
振荡器反相放大器的输出端。
3.2液晶显示电路
3.2.1LCD1602简介
如图3所示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引脚线的。
3.3发声电路
发声部分的电路如图4,就是用P2.1口控制一个有源蜂鸣器发声,作为提示音或报警音。
程序设定为每当识别到有一位按键被按下时,蜂鸣器发声0.1S;开锁时停顿2S发声2S,发声3次;密码错误时每次停顿0.5S发声1S,错误5次以内时错N次发N声,错误5次及以上发声10次。
蜂鸣器有两个引脚,其中长脚为正极,短脚为负极。
由于单片机I/O引脚输出的电流较小,基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,一般使用三极管来放大电流就可以了。
本设计中使用三极管9012,P2.1口高电平时三极管截至,蜂鸣器不发声;P2.1口低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。
因此,我们可以通过程序控制P2.1脚的电平来使蜂鸣器发出声音和关闭。
3.4开锁控制电路
开锁控制电路如图5,电路的功能就是在输入正确的密码后开锁。
系统使用单片机P2.0引脚发出信号,经三极管放大之后,由继电器驱动电磁阀将锁打开。
设计中用一个发光二极管模拟表现锁的开关,只有锁打开之后,继电器吸合至常开触电,发光二极管才会亮起;实际应用中用继电器控制开锁电路的开关。
继电器也是感性器件,所以不能用单片机的I/O口直接控制,而且必须在三极管等控制器件上加反相保护电路。
本设计中单片机通过P2.0引脚连接一只作为电子开关的PNP型三极管9012来驱动继电器,继电器的开、关完全由三极管的基极电平进行控制。
当P2.0为高电平时,PNP型三极管截止,继电器不工作;反之P2.0为低电平时,三极管导通,继电器得电吸合。
3.5密码存储电路
3.5.1AT24C02简介
AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含256*8位存储空间AT24C02的引脚如图6,各引脚功能如下:
SCL:
串行时钟输入管脚,用于产生器件所有数据发送或接收的时钟。
SDA:
双向串行数据/地址管脚,用于器件所有数据的发送或接收。
A0、A1、A2:
器件地址输入端。
这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。
使用AT24C02最大可级联8个器件,如果只有一个24C02被总线寻址,这三个地址输入脚A0、A1、A2可悬空或连接到VSS。
WP:
写保护。
如果WP管脚连接到Vcc,所有的内容都被写保护,只能读。
当WP管脚连接到Vss或悬空,允许器件进行正常的读/写操作。
VSS:
电源地(GND)。
VCC:
电源电压(5V)。
3.6键盘输入电路
本设计中采用的4*4矩阵键盘共有16个键位,4根行线连P1口低四位,4根列线连P1口高四位(见图7所示)。
在按键未被按下时,每一条行线与线列线的交叉处互不相通,当某个按键被按下后,该按键所在的行线和列线连通。
这
样在P1口的高4位和低4位中各有一位互相连通。
通过行列扫描检测出这两位,即可识别出被按下的键。
具体识别方式和按键功能完全由软件自定义。
3.7手动复位电路
为确保系统中电路稳定可靠工作,复位电路是必不可少的一部分。
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
图8所示的复位电路可以基本实现上述功能,该电路在最基本的复位电路基础上增加了一个手动复位开关,当人为按下按钮时,则Vcc的高电平就会直接加到RST端。
由于人的动作再快也会使按钮保持接通达数十毫秒,所以完全能够满足复位的时间要求。
3.8晶振电路
晶振是晶体振荡器的简称,它用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十,高级的精度更高。
电路中的晶振即石英晶体振荡器,它与电容构成振荡回路,为片内放大器提供正反馈和振荡所需的相移条件,从而构成一个稳定的自激振荡器。
3.9系统结构
根据以上设计思路,得到系统原理图如图10所示,本设计中单片机为Atmel公司的AT89S52,电源部分为直流4.5V,3节5号电池供电,实验时也可以用直流
5V电源供电。
键盘输入部分为4*4矩阵薄膜键盘,不需上拉电阻,但扫描时需先给行线或列线供电。
液晶显示器选用1602,可以显示两行,每行16个字符。
蜂鸣器为有源5V。
继电器为5脚5V。
密码存储选用串行AT24C02芯片,256B
空间,足够存储密码,采用串行传输可以极大减少连线数目。
4软件设计
系统的软件设计采用汇编语言编码。
设计方法是先用文本编辑器编写源码,然后用软件KeilC51编译,如果没有错误,可连接生成.HEX格式的文件(需事先在KeilC51中设置)。
如果有错误则无法连接,但可在生成的.OBJ文件中找到代码错误的地方,便于修改。
当然也可以直接在Keil中编码。
生成的HEX文件是记录文本行的ASCII文本文件,在HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。
HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用HEX文件。
4.1系统主程序
系统的主程序如图11所示。
由于用户在使用系统的过程中,可能在任何时刻按下任何按键,而程序都必须对此作出正确响应。
所以主程序流程的主要思路是是根据按键的不同进行不同的程序处理,下面具体介绍主程序的流程。
4.1.1初始化及按键识别
如图12,系统的初始化包括堆栈起始地址的设定,两个定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化,蜂鸣器初始化发声等操作。
如果AT24C02里没有存储密码,或者读取AT24C02失败,则载入系统初始化密码;如果AT24C02里有掉电存储的密码,则会读出该密码。
系统初始化并读取密码完成后,液晶显示"Password:
",提示用户可以输入密码。
此时程序即不断测试按键,检查是否有按键被按下。
实际程序运行时,绝大部分时间都在测试按键,等待用户输入。
4.1.2按键重定位
之所以要进行按键重定位,是因为按键识别子程序的功能只限于确认某个按键被按下,不包括确认按键的意义。
根据表1可知,识别出的按键排列不符合
用户使用习惯,也不利于程序的后续处理,需要重新定位。
对BUFF重新赋值,
新的键位值见表2,按键左3列仿照手机的9宫格按键,便于用户输入密码。
剩下的6个按键为功能按键,各键位对应的功能设定如表3。
根据不同的按键,程序跳转至不同的程序段,进行对应按键处理,具体流程可见图15。
程序开始时,先驱动蜂鸣器发声0.1秒,提示用户程序已经检测到刚才的按键。
然后根据BUFF的初始值进行一系列的对比。
如果BUFF的值是0,1,2,4,5,6,8,9,D中的一个,则按键是属于数字键。
分别将BUFF重赋值为1,2,3,4,5,6,7,8,9,0。
然后程序跳转至保存密码部分,将数字密码保存至密码缓冲区。
除了两个未定义功能键(BUFF=0BH或0FH)程序不作任何处理,删除键(BUFF=0EH)程序直接清空密码缓冲区,然后返回至按键测试之外,其他3个功能按键也有各自的处理程序段。
确认键处理当确认键按下后的程序流程,开锁键处理当开锁键按下后的准备开锁流程,改密处理当确认键按下后的预备修改密码流程。
4.1.3保存密码
如图14,该程序段的功能是将密码信息保存至对应的缓冲区。
程序设置了一个16字节的密码缓冲区(PS1~PS16)和一个16字节缓冲区存储正确的密码(AT1~AT16)。
为便于比较,第一次输入的密码保存至PS1,第二次输入的密码保
存至PS2,依此类推。
后面没有输入的位填充默认值0FFH。
为保密起见,输入的密码不能在液晶显示器上显示出来,而以“*”号代替。
每输入一位密码,增加一位星号,便于用户直观察觉已经输入的密码位数。
另外,密码超长也在此程序段处理。
因为密码超长并不涉及其他功能键,在保存密码之前可判断当前密码的长度。
如果超过缓冲区16位长度,即认为密码超长,无法继续保存密码。
此时清空密码缓冲区所有密码,等待重新输入。
4.1.4确认键处理
该程序段就是在识别到按键为确认键之后程序的执行流程,如图15所示。
输入密码完成后会按确认键,但是输入的密码有三种情况:
旧密码,新密码第一次,新密码第二次,三种情况所做的操作也不一样。
程序设置有新密码第一次标志位PS_NEW1和新密码第二次标志位PS_NEW2,默认都是0。
如果PS_NEW1
被置1,则表明输入的密码是新密码第一次,需将缓冲区PS1~PS16的信息转存至NEW1~NEW16,然后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.1.5开锁键处理
该程序段是程序识别到开锁键被按下后的流程,如图16所示。
此段并不需校验密码,这里只需检查密码正确标志位PSW_F的状态。
如果PSW_F=1,则前面输入的密码正确,可以开锁。
如果PSW_F=0,说明密码错误,甚至根本没有校验
密码(输入密码后没有按确认键,或者直接按下开锁键),此时提示用户密码错误,无法开锁开锁过程就是将P2.0口置0,继电器得到低电平就会自动吸合,点亮发光二极管;可以配合液晶显示器和蜂鸣器发声,提示用户锁已被打开。
整个过程可持续若干时间,然后P2.0口置1,清空密码缓冲区,标志位PSW_F清0,重新检测新的按键。
4.1.6改密键处理
如图17,可以看出,改密键的处理流程跟开锁键类似,都需检查密码正确的标志位,只有PSW_F被置1才可以进行改密。
不同之处在于,如果密码正确,程序会将新密码第一次的标志位PS_NEW1置位,这样在下一次按确认键时,程序可以判别出此次输入的密码是新密码第一次。
4.1.7校验新密码
新密码的校验用于当新密码第二次的标志位PS_NEW2=1时,按下确认键后程序判定当前新密码已经输入两次,继而执行新密码校验,即判断两次输入的新密码是否一致。
如图18所示,校验两次输入的新密码是否一致的方法仍然是调用密码校
验子程序段。
然后查询密码正确标志位PSW_F,如果PSW_F=1,则表明两次输入的新密码一致,可以修改密码,即可调用AT24C02写子程序保存新密码。
若PSW_F=0,则两次输入不一致,无法修改密码;程序提示密码修改失败,清空
密码缓冲区,重新测试按键。
因为新密码写入存储器的过程可能发生异常,故写入后马上调用AT24C02读子程序读出密码,然后调用密码校验子程序进行对比,即可判断密码是否被正确写入。
如果PSW_F=1,则密码写入无误,才提示用户修改密码成功。
如果PSW_F=0,则表明读出的密码跟要用户准备修改的密码不一致,密码修改异常。
此时程序可尝试调用AT24C02写子程序重新写一遍,再次读出并对比。
若仍然不一致,则只能调用系统初试密码,这个密码是系统最