智能电子密码锁设计

天 津 大 学 网 络 教 育 学 院

专科毕业论文

题目:智能电子密码锁设计

完成期限:2016年1月8日 至 2016年4月20日

学习中心:嘉兴

专业名称:电气自动化技术

学生姓名:姚建林

学生学号:[1**********]7

指导教师:刘伯颖

智能电子密码锁设计

1 引言

随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,因而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等,但较实用的还是按键式电子密码锁。

20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。

目前,在西方发达国家,密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全、可靠的技术实现大门的管理。在我国密码锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。 2 系统方案论证

2.1 主控部分的选择

方案一:采用数字电路控制

用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,将密码保存在JK触发器中,与输入密码通过比较器比较,判断结果是否相符合。采用数字电路设计的方案好处就是设计简单,但控制的准确性和灵活性差,故不

采用。

方案二:采用以单片机为核心的控制方案

选用单片机作为系统的核心部件,实现控制与处理的功能。单片机具有资源丰富、速度快、编程容易等优点。利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接数码管显示(LED),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标,因此综合考虑,本系统采用方案二。

2.2 密码输入方式的选择

方案一:指纹输入识别

指纹识别技术主要涉及四个功能:读取指纹图像、提取特征、保存数据和比对。通过指纹读取设备读取到人体指纹的图像,然后要对原始图像进行初步的处理,使之更清晰再通过指纹辨识软件建立指纹的特征数据。软件从指纹上找到被称为“节点”(minutiae)的数据点,即指纹纹路的分叉、终止或打圈处的坐标位置,这些点同时具有七种以上的唯一性特征。通常手指上平均具有70个节点,所以这种方法会产生大约490个数据。这些数据,通常称为模板。通过计算机模糊比较的方法,把两个指纹的模板进行比较,计算出它们的相似程度,最终得到两个指纹的匹配结果,从而判断输入结果的正确与否。考虑到本方案软硬件太过复杂,而且成本也高,故不采用。

方案二:矩阵键盘输入识别

由各按键组成的矩阵键盘每条行线和列线都对应一条I/O口线,键位设在行线和列线的交叉点,当一个键按下就会有某一条行线与某一条列线接触,只要确定接触的是哪两条线,即哪两个I/O口线,就可以确定哪一个键被触动。

行线设计成上拉口线,初始时被置高电位,列线悬空,初始置低。通过不断读行线口线,或者中断方式触发键位扫描。当发现有键按下,将列线逐一置低,其他列线置高,读行线口线。当某条列线置低时,某条行线也被拉低,则确定这两条线的交点处的按钮被按下。每个按键都可通过程序赋予功能,从而完成密码识别。本方案简单易行,故采用。

3 系统总体设计和主要芯片介绍

3.1 系统总体设计

本设计主要由单片机、矩阵键盘、数码管显示以及开锁报警等部分组成。其

中矩阵键盘用于输入数字密码和进行各种功能的实现,由用户通过连接单片机的矩阵键

所设定

驱动芯

数码管

入的数

经过单

用户输

码与自盘输入的密码,片驱动显示输字,后片机对入的密己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁(黄灯亮)还是报警(红灯亮)。系统整体框图如图3-1所示。

图3-1 系统结构框图

各模块具体功能如下:

1.键盘输入模块:分为密码输入的数字按键与几个功能按键,用于完成密码的

输入功能。

2.复位电路:完成系统的复位。

3.密码存储模块:用于完成掉电存储功能,使密码断电后仍能保存。

4.驱动电路:用于驱动数码管对键盘所输入的数字进行实时显示。

5.显示模块:用于完成对系统状态的显示及操作提示功能。

6.报警电路:应用发光二极管模拟报警,用于完成密码输入错误时候的指示。

7.开锁电路:应用发光二极管模拟开锁,完成开锁及开锁提示。

3.2 主要芯片介绍

3.2.1 主控芯片AT89S52

AT89S52单片机是一个低功耗,高性能CMOS8位单片机,片内含8KBytesISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高

性价比的解决方案。

AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52的管脚分布如图3-2。

图3-2 AT89S52芯片管脚

其各引脚功能如下:

PSEN(29引脚):程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP(31引脚):外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),

CPU

则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2(18引脚):振荡器反相放大器的输出端。

ALE/PROG(30引脚):当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

RST(9脚):当振荡器运行时,在此引脚上出现两个机器周期的高电平,使得单片机复位。

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出

P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)

P1.5 MOSI(在系统编程用)——下载线

P1.6 MISO(在系统编程用)——下载线

P1.7 SCK(在系统编程用)——下载线

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P3口作为AT89S52的一些特殊功能管脚备选功能:

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口) P3.2 INT0(外部中断0) P3.3 INT1(外部中断1)

P3.4 T0(记时器0外部输入)

P3.5 T1(记时器1外部输入) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通)

AT89S52主要特性如表1所示。

表1 AT89S52主要特性

3.2.2 存储芯片AT24C1024

AT24C1024是美国Atmel公司的低功耗CMOS型E²PROM,内含256×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I²C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。AT24C1024中带有的片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。I²C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串

行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件。AT24C1024正是运用了I²C规程,使用主/从机双向通信,主机(通常为单片机)和从机(AT24C1024)均可工作于接收器和发送器状态。主机产生串行时钟信号(通过SCL引脚)并发出控制字,控制总线的传送方向,并产生开始和停止的条件。无论是主机还是从机,接收到一个字节后必须发出一个确认信号ACK(确认应答)。AT24C1024的控制字由8位二进制数构成,在开始信号发出以后,主机便会发出控制字,以选择从机并控制总线传送的方向。具体管脚描述如下:

SCL为串行时钟(Serial Clock Input):串行时钟输入管脚用于产生器件所有数据发送或接收的时钟这是一个输入管脚。串行时钟上升沿时,数据输入芯片(写入);串行时钟下降沿时,数据从芯片输出(读出)。

SDA为串行数据/地址(Serial DAta):双向串行数据/地址管脚用于器件所有数据的发送或接收SDL,该端为漏极开路驱动,可与任意数量的其他漏极开路或集电极开路器件“线或”。

A1为器件/页面地址输入端(DevicPage Addresses):当使用24C1024时最大可级联8个器件,如果只有一个24C1024被总线寻址,地址输入脚A1可悬空或连接到Vss。

WP为写保护:如果WP管脚连接到Vcc所有的内容都被写保护只能读当WP,管脚连接到Vss或悬空,允许器件进行正常的读/写操作。管脚图如图3-3所示。

图3-3 AT24C1024芯片管脚

3.2.3 驱动芯片74LS138

74LS138用于高性能的存贮译码或要求传输延迟时间短的数据传输系统,在高性能存贮器系统中,用这种译码器可以提高译码系统的效率。将快速赋能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时间通常小于存贮器的典型存取时间,

这就是说由肖特基钳位的系统译码器所引起的有效系统延迟可以忽

略不计。

74LS138基本功能:74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式,其工作原理如下:当一个选通端(E1)为高电平,另两个选通端(/(E2)和/(E3))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。74LS138的作用:利用E1、/(E2)和/(E3)可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器。若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器以及与非门组成的3线-8线译码器74LS138等。其引脚功能如下:

A、B、C译码地址输入端

E1选通端/(E2)和/(E3)选通端(低电平有效)

Y0—Y7译码输出端(低电平有效)

其功能表如表2所示。

表2 3线-8线译码器74LS138的功能表

74LS138的八个输出管脚,任何时刻要么全为高电平1—芯片处于不工作状态,要么只有一个为低电平0,其余7个输出管脚全为高电平1。如果出现两个输出管脚在同一个时间为0的情况,说明该芯片已经损坏。74LS138有三个附加的控制端,当输出为高电平(S=1),译码器处于工作状态。否则,译码器被禁止,所有的输出端被封锁在高电平,如功能表所示。这三个控制端也叫做“片选”输入端,利用片选的作用可以将多篇连接起来以扩展译码器的功能。带控制输入端的译码器又是一个完整的数据分配器。在电路中如果把作为“数据”输入端(同时)

,而将作为“地址”输入端,那么从送来的数据只能通过所指定的一根

输出线送出去。图3-4是74LS138译码器芯片引脚图,图中小圆圈表示低电平有效。

图3-4 74LS138芯片管脚

4 系统硬件设计

本系统外围电路包括键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、驱动部分,开锁以及报警等部分组成。根据实际情况键盘输入部分选择4×4矩阵键盘,显示部分选择字符型8位七段数码管显示,密码存储部分选用芯片AT24C1024,驱动部分选用74LS138芯片来完成,报警及开锁部分由LED灯模拟来控制。

4.1 键盘输入模块 由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩

阵式按键键盘,它由行和列组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,能减少键盘与单片机连接时所占用的I/O线的数目。本设计中使用的这个4×4键盘不但能完成密码的输入还能作特别功能键使用。其行线和单片机P1.0~P1.3相连,列线与单片机P1.4~P1.7相连,共有16个按键。本设计用到了其中的12个,如图4-1所示,包括0~9十个数字键,确认和清除两个控制键(作为密码输入时的确定和清除键),本设计中的键盘扫描采用行扫描法,即依次置行线中的每一行为低电平,其余均为高电平,扫描列线电平状态,为低电平即表示该键按下。

图4-1 键盘输入模块

具体的按键功能设置如下

4.2 密码存储模块

密码存储采用AT24C1024传输方式I2C总线式,占用的单片机端口少,它能掉电存储数据。掉电存储单元的作用是在系统电源断开的时候,存储当前设定的密码数据。密码读写存储模块当比较密码的时候,需要将存储在AT24C1024的数据读到RAM中,然后和输入的密码相比较。图4-2所示AT24C1024的2脚是地址线,用于确定芯片的硬件地址。在AT89S52试验开发板上接地,第5脚SDA为串行数据输入/输出,数据通过这条双向I²C总线串行传送,在AT89S52试验开发板上和单片机的P2.6连接。第6脚SCL为串行时钟输入线,在AT89S52试验开发板上和单片机的P2.5连接。SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。第7脚接地。AT24C1024中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。

图4-2 密码存储电路

4.3 复位和晶振模块

单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C3通过R10放电。R10的作用在于限制按键按下瞬间电容C3的放电电流,避免产生火花,以保护按键触电。

AT89S52引脚XTAL1和XTAL2与晶体振荡器及电容C1、C2按图4-3所示方式连接。晶振、电容C1/C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C1、C2取值范围在5~30pF之间。根据实际情况,本设计中采用12MHZ作为系统的外部晶振。电容取值为10pF。复位和晶振电路图如图4-3所示。

图4-3 复位和晶振电路

4.4 显示模块

显示部分由一组八个LED数码管来完成。当单片机上电后,从左到右第八位数码管会闪亮,说明显示屏已经接通电源正等待密码的输入。开锁时,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个数字,输入多少位就显示多少个数字。当密码输入完成时,按下确认键,如果输入的密码正确的话,LED显示屏第八位数码管闪亮且不再显示以后输入的数字,单片机其中P2.0引脚会输出高电平,电子密码锁被打开(黄灯亮);若输入密码错误,显示屏无任何显示,单片机其中P2.1引脚会输出高电平,电子密码锁不能打开且报警(红灯亮),错误确认密码不能超过三次,超过三次,显示屏将不再显示输入的任何数字,键盘自动锁定。通过LED显示屏,可以清楚地判断出密码锁所处的状态。显示电路如图4-4所示。

图4-4 显示电路

4.5 开锁和报警模块

开锁和报警部分各由一个LED灯来完成,当单片机上电后可自动识别密码。若输入密码与设定的密码相同时,即可开锁(黄灯亮);当输入密码与设定的密码不相同时,即可报警(红灯亮);该密码锁有三次输入密码的机会:若一次就确认密码输入正确,则开锁(黄灯亮)且显示器不再显示以后任何输入的数字;若三次都确认输入错误密码,则报警(红灯亮)三次且显示器不再显示任何输入的数字,即键盘自动锁定。单片机断电后即可清除原有记录,上电后可再次输入密码进行有关操作。开锁和报警部分电路如图4-5所示。

图4-5 开锁和报警电路

5 系统软件设计

系统软件设计与硬件电路相关联,本电子密码锁系统的软件设计分为以下几个模块:主程序模块,键盘扫描模块,密码读写存储模块,LED显示模块,报警模块等等。软件设计思路:电子密码锁工作的主要过程是LED数码管提示开始输入密码,通过键盘输入密码,同时LED显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。当输入密码连续输入错误3次时,锁定键盘10s。

A. 主程序模块在主程序模块中要完成系统初始化,检测按键,调用存储模块以及调用显示模块等功能。

B. 键盘扫描子程序模块该模块在主程序中调用,具备判断键盘上有无键按下、逐列扫描键盘以确定被按键的位置即行列号、形成键值并将键值存入指定的数据缓冲区等功能。键盘扫描子程序中采用行扫描法,扫描方式为查询方式,当键盘无键按下时,程序一直在该模块中循环,当有键按下时,程序立即计算键值并在LED显示相应的值。

C. 密码读写存储模块当比较密码的时候,需要将存储在AT24C1024芯片内的数据读到RAM中,然后和输入的密码相比较。

D. 显示子程序模块实现显示子程序的关键是编写LED的串口驱动程序。在想要显示数值的时候,只要在程序中写好要显示的数字,然后直接调用LED的串口驱动程序就可以实现在数码管上显示的数字。有多位需要同时显示时,可以采用动态刷新的方法,就可以得到稳定的输出。

5.1 系统总程序流程图

主程序主要完成初始化,有无按键按下以及调用显示等等。主程序的流程图如图5-1所示。

图5-1 主程序流程图

5.2 密码比较及开锁流程图

图5-2 密码比较及开锁流程图

6 软件调试及性能分析 6.1 软件介绍 6.1.1 KeilC51简介

随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展。Keil是目前最流行的51单片机开发软件,它提供了一个集成开发环境uVision,它包括C编译器,宏汇编,连接器,库管理和一个功能强大的仿真调试器。这样在开发应用软件的过程中,编辑、编译、汇编、连接、调试等各阶段都集成在一个环境中,先用编辑其编写程序,接着调用编译器进行编译,连接后即可直接运行,可以缩短开发周期。 6.1.2 Proteus介绍

Proteus软件是一块功能强大的电路设计分析软件。它组合了高级原理布图、

混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统,它和KeilC51结合起来就可以实现软硬件的联调仿真。ISIS是Proteus系统的中心,它远不仅是一个

表库。Proteus的ISIS是一款Lab-center出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机。元件库齐全,使用方便,是不可多得的专业单片机软件仿真系统,它具有控制原理图设计外观的超强制作环境。无论用户的要求是快速实现复杂设计的仿真以及PCB设计,还是设计精美的原理图以供出版,ISIS是您的最好工具。 6.2 软件调试

通过编写出系统的主程序、密码比较判断程序、显示程序的测试,结合外围电路及输出驱动控制等器件来检测系统是否能够正常工作。通过Keil uVision2软件来编译调试程序,看程序中是否有死循环错误、机器码错误及转移地址错误,若程序正确并执行跟踪或单步运行,确保了程序的正确性后结合Proteus仿真软件的使用来判断程序和原理图的结合是否能实现所要求的功能,即能够顺利的实现开锁及报警的功能。其调试的结果如图6-1所示;仿真结果如图6-2及图6-3所示。

图6-1 Keil uVision2编译结果

图6-2 Proteus仿真结果(1)

图6-3 Proteus仿真结果(2)

6.3 系统功能简述

系统设定初始密码为12345678,共8位。系统上电后,系统内各部分都处于初始状态,LED上闪烁显示8。用户通过键盘输入8位密码,按下“确认”键

后,系统将输入密码与设定密码进行比较。若密码正确,则发出开锁信号,将锁

打开(黄灯亮)且LED屏上清除所输入的密码显示数字8;若密码不正确,则报警(红灯亮)。用户可以重新输入密码,重新输入密码的次数不能超过3次,若3次输入的密码都不正确,则键盘被锁定并且系统发出报警信号(红灯亮),此次开锁可意为失败,对单片机重新上电,可重新进行有关操作。 结 论

在着手本次毕业设计时,通过查阅网络与图书馆搜集到的资料,再加上指导老师指点,结合生活中对密码锁的功能特性要求,以单片机AT89S52芯片为控制核心部件,结合显示部分、以及输出控制这三部分的主要驱动,通过按键及LED灯的亮灭控制密码输入的正确与否设计出了这一套电子密码锁系统的主要硬件结构和软件结构,基本完成了课题的要求:密码正确开锁,密码错误报警,密码输入错误超过三次键盘自动锁定。其电路结构简单、易推广、维护方便、从各个方面体现出它具有较高的实用价值。

参考文献

[1]李智辉,周灵彬,白宇龙.基于51单片机电子密码锁与proteus仿真的设计[J].电脑知识与技术,2009,5(24)

[2]任艳艳.基于AT89C51单片机多功能密码锁的研究[J].重庆职业技术学院学报,2008.5

[3]杨将新,李华军,刘到骏等.单片机程序设计及应用(从基础到实践)[J].电

子工业出版社, 2006

[4]王为青,程国钢.单片机Keil Cx51应用开发技术[J].人民邮电出版社,2007.2 [5]于勇,戴佳,常江.51单片机C语言常用模块与综合系统设计实例精讲[M].北京:电子工业出版社,2007.4

[6]杨居义,杨尧,杨晓琴,王益斌.单片机课程设计指导[M].北京:清华大学出

版社,2009.9

[7]徐爱均.单片机原理使用教程—基于Proteus虚拟仿真[M].电子工业出版社,2009

[8]常敏,王涵,范江波.单片机应用程序开发与实践[M].北京:电子工业出版社,2009.3

[9]张俊谟.单片机中级教程—原理与应用第二版[M].北京:北京航空航天大学出版社,2006.10

[10]柳兆军,李同山,王善斌.Proteus软件在单片机教学中的应用[J].山东理工大学,2007,9(149).

[11]黄智伟,王彦,朱卫华.全国大学生电子设计竞赛训练教程[M].北京:电子工业出版社,2005.1 [12]Richard

“Park.Electronic

Password-lock

Design”[DB/OL].Pcword.com.June 2006

[13]周海鹏.电子密码锁设计-中国期刊全文数据库[EB].

http://www.cnki.net/kcms/detail/Detail.aspx?dbname=CJFDTEMP&filename=

ZJWL201005017

致 谢

在这大学的最后一页里,我要感谢的人很多,首先要感谢我的指导老师李娣娜老师,在整个毕业设计过程中,李老师多次询问研究进程,并为我指点迷津,帮助我开拓研究思路,心点拨、热忱鼓励。李老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神,深深地感动了我,当我遇到难题无从下手时,李老师总能给予我中肯的意见,我从心底里感谢他。还要感谢的是我们各课任课老师,没有你们的谆谆教诲,就没有我们学有所长的今天。当然,还要感谢寝室的姐妹们在我完成论文的过程中给予我的帮助和鼓励,也是她们陪我度过这四年的生活。最后要感谢的就是我的父母,谢谢你们对我的支持。所有的都汇聚成一句话:感谢你们都一直陪伴着我!

现在即将挥别我的学校、老师、同学,还有我四年的大学生活,虽然依依不舍,但是对未来的路,我充满了信心。最后,感谢在大学期间认识我和我认识的所有人,有你们伴随,才有我大学生活的丰富多彩,绚丽多姿!

(全文共10999字)

附录一 原器件清单一览表

附录二 总系统原理图

附录三 硬件实物图

附录四 程序清单 系统总程序: #include

#include

#include

#define uchar unsigned char #define uint unsigned int #define KEY P1 #define DISP P0 #define null1 '\0' sbit

LED=P2^0; //密码正确点亮

sbit LED1=P2^1; //密码错误点亮 sbit sbit

P14=P1^4; P15=P1^5;

sbit P16=P1^6; sbit

P17=P1^7;

sbit P22=P2^2; sbit P23=P2^3; sbit P24=P2^4; uchar key; uchar shuzi; uchar statet; uchar input_mima[9];

uchar mima[9]={0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F}; uchar k; uchar kk; uchar

tab[13]={0x00,0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x5e}; void delay(uint i); void delay_right(void); void delay_wrong(void); void init_main(void); void main(void); void get_key(void);

void calc_disp(uchar array[9],uchar n);

void clear_arry(uchar *p,uchar n); void delay(uin i) {

while(--i); }

void init_main(void) //初始化子程序 {

DISP=0; LED=0; LED1=0; k=0;

clear_arry(input_mima,9); }

void main(void) {uchar lock=0; init_main(); statet=0; while(1) {

get_key(); while(kk==1) { kk=0;

if(statet==0)

{

if(key!=0x00 && key!=0x39 && key!=0x5e)

{

input_mima[k]=key;

if(k

if(key==0x5e) {

if(strcmp(input_mima,mima)==0) {statet=1;

delay_right();

init_main(); } else

{delay_wrong();

lock++; if(lock

init_main(); }

}continue;

}

if(statet==1)

{

if(key==0x39)

{

delay_right(); }continue; }

}calc_disp(input_mima,8);

} } void

delay_right(void)

{ uchar m;

for(m=5;m>0;m--) {

LED=1;

delay(50000); delay(50000); LED=0; delay(20000); delay(20000);

}

}

void delay_wrong(void)

{ uchar m; for(m=5;m>0;m--) { LED1=1;

delay(50000); delay(50000); LED1=0; delay(20000); delay(20000);

}

} void get_key(void)

{ KEY=0xfe; if(!P14) { delay(200); if(!P14) { while(!P14); key=tab[8]; kk=1;

}

}

if(!P15) { delay(200); if(!P15) { while(!P15); key=tab[9]; kk=1;

}

} if(!P16) { delay(200); if(!P16) { while(!P16); key=tab[10]; kk=1;

}

}

KEY=0xfd; if(!P14) { delay(200); if(!P14) { while(!P14); key=tab[5]; kk=1;

}

} if(!P15)

{

delay(200);

if(!P15)

{

while(!P15);

key=tab[6];

kk=1;

}

}

if(!P16)

{

delay(200);

if(!P16)

{

while(!P16);

key=tab[7];

kk=1;

}

}

KEY=0xfb;

if(!P14)

{

delay(200);

if(!P14)

{

while(!P14);

key=tab[2];

kk=1;

}

}

if(!P15)

{

30

delay(200);

if(!P15)

{

while(!P15);

key=tab[3];

kk=1;

}

}

if(!P16)

{

delay(200);

if(!P16)

{

while(!P16);

key=tab[4];

kk=1;

}

}

KEY=0xf7;

{

delay(200);

if(!P14)

{

while(!P14);

init_main();

}

}

if(!P15)

{

delay(200);

if(!P15)

31 if(!P14)

} { { } while(!P15); key=tab[1]; kk=1; if(!P16)

delay(200);

}

void clear_arry(uchar *p,uchar n) { uchar j;

for(j=0;j

}

32 } { } if(!P16) { } while(!P16); key=tab[12]; kk=1; if(!P17) delay(200); if(!P17) { } while(!P17); key=tab[11]; kk=1; *p=null1;

void calc_disp(uchar array[9],uchar n) {

uchar leddisp[9];

uchar i;

for(i=0;i

leddisp[i]=array[i];

i=0;

for(i=0;i

{switch(i)

{case 0:{P22=0;P23=0;P24=0;}break; case 1:{P22=1;P23=0;P24=0;}break; case 2:{P22=0;P23=1;P24=0;}break; case 3:{P22=1;P23=1;P24=0;}break; case 4:{P22=0;P23=0;P24=1;}break; case 5:{P22=1;P23=0;P24=1;}break; case 6:{P22=0;P23=1;P24=1;}break; case 7:{P22=1;P23=1;P24=1;}break; default : break;

}

P0=leddisp[i];

delay(50);

}

}

33

天 津 大 学 网 络 教 育 学 院

专科毕业论文

题目:智能电子密码锁设计

完成期限:2016年1月8日 至 2016年4月20日

学习中心:嘉兴

专业名称:电气自动化技术

学生姓名:姚建林

学生学号:[1**********]7

指导教师:刘伯颖

智能电子密码锁设计

1 引言

随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,因而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等,但较实用的还是按键式电子密码锁。

20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。

目前,在西方发达国家,密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全、可靠的技术实现大门的管理。在我国密码锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。 2 系统方案论证

2.1 主控部分的选择

方案一:采用数字电路控制

用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,将密码保存在JK触发器中,与输入密码通过比较器比较,判断结果是否相符合。采用数字电路设计的方案好处就是设计简单,但控制的准确性和灵活性差,故不

采用。

方案二:采用以单片机为核心的控制方案

选用单片机作为系统的核心部件,实现控制与处理的功能。单片机具有资源丰富、速度快、编程容易等优点。利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接数码管显示(LED),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标,因此综合考虑,本系统采用方案二。

2.2 密码输入方式的选择

方案一:指纹输入识别

指纹识别技术主要涉及四个功能:读取指纹图像、提取特征、保存数据和比对。通过指纹读取设备读取到人体指纹的图像,然后要对原始图像进行初步的处理,使之更清晰再通过指纹辨识软件建立指纹的特征数据。软件从指纹上找到被称为“节点”(minutiae)的数据点,即指纹纹路的分叉、终止或打圈处的坐标位置,这些点同时具有七种以上的唯一性特征。通常手指上平均具有70个节点,所以这种方法会产生大约490个数据。这些数据,通常称为模板。通过计算机模糊比较的方法,把两个指纹的模板进行比较,计算出它们的相似程度,最终得到两个指纹的匹配结果,从而判断输入结果的正确与否。考虑到本方案软硬件太过复杂,而且成本也高,故不采用。

方案二:矩阵键盘输入识别

由各按键组成的矩阵键盘每条行线和列线都对应一条I/O口线,键位设在行线和列线的交叉点,当一个键按下就会有某一条行线与某一条列线接触,只要确定接触的是哪两条线,即哪两个I/O口线,就可以确定哪一个键被触动。

行线设计成上拉口线,初始时被置高电位,列线悬空,初始置低。通过不断读行线口线,或者中断方式触发键位扫描。当发现有键按下,将列线逐一置低,其他列线置高,读行线口线。当某条列线置低时,某条行线也被拉低,则确定这两条线的交点处的按钮被按下。每个按键都可通过程序赋予功能,从而完成密码识别。本方案简单易行,故采用。

3 系统总体设计和主要芯片介绍

3.1 系统总体设计

本设计主要由单片机、矩阵键盘、数码管显示以及开锁报警等部分组成。其

中矩阵键盘用于输入数字密码和进行各种功能的实现,由用户通过连接单片机的矩阵键

所设定

驱动芯

数码管

入的数

经过单

用户输

码与自盘输入的密码,片驱动显示输字,后片机对入的密己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁(黄灯亮)还是报警(红灯亮)。系统整体框图如图3-1所示。

图3-1 系统结构框图

各模块具体功能如下:

1.键盘输入模块:分为密码输入的数字按键与几个功能按键,用于完成密码的

输入功能。

2.复位电路:完成系统的复位。

3.密码存储模块:用于完成掉电存储功能,使密码断电后仍能保存。

4.驱动电路:用于驱动数码管对键盘所输入的数字进行实时显示。

5.显示模块:用于完成对系统状态的显示及操作提示功能。

6.报警电路:应用发光二极管模拟报警,用于完成密码输入错误时候的指示。

7.开锁电路:应用发光二极管模拟开锁,完成开锁及开锁提示。

3.2 主要芯片介绍

3.2.1 主控芯片AT89S52

AT89S52单片机是一个低功耗,高性能CMOS8位单片机,片内含8KBytesISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高

性价比的解决方案。

AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52的管脚分布如图3-2。

图3-2 AT89S52芯片管脚

其各引脚功能如下:

PSEN(29引脚):程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP(31引脚):外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),

CPU

则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2(18引脚):振荡器反相放大器的输出端。

ALE/PROG(30引脚):当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

RST(9脚):当振荡器运行时,在此引脚上出现两个机器周期的高电平,使得单片机复位。

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出

P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)

P1.5 MOSI(在系统编程用)——下载线

P1.6 MISO(在系统编程用)——下载线

P1.7 SCK(在系统编程用)——下载线

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P3口作为AT89S52的一些特殊功能管脚备选功能:

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口) P3.2 INT0(外部中断0) P3.3 INT1(外部中断1)

P3.4 T0(记时器0外部输入)

P3.5 T1(记时器1外部输入) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通)

AT89S52主要特性如表1所示。

表1 AT89S52主要特性

3.2.2 存储芯片AT24C1024

AT24C1024是美国Atmel公司的低功耗CMOS型E²PROM,内含256×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I²C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。AT24C1024中带有的片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。I²C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串

行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件。AT24C1024正是运用了I²C规程,使用主/从机双向通信,主机(通常为单片机)和从机(AT24C1024)均可工作于接收器和发送器状态。主机产生串行时钟信号(通过SCL引脚)并发出控制字,控制总线的传送方向,并产生开始和停止的条件。无论是主机还是从机,接收到一个字节后必须发出一个确认信号ACK(确认应答)。AT24C1024的控制字由8位二进制数构成,在开始信号发出以后,主机便会发出控制字,以选择从机并控制总线传送的方向。具体管脚描述如下:

SCL为串行时钟(Serial Clock Input):串行时钟输入管脚用于产生器件所有数据发送或接收的时钟这是一个输入管脚。串行时钟上升沿时,数据输入芯片(写入);串行时钟下降沿时,数据从芯片输出(读出)。

SDA为串行数据/地址(Serial DAta):双向串行数据/地址管脚用于器件所有数据的发送或接收SDL,该端为漏极开路驱动,可与任意数量的其他漏极开路或集电极开路器件“线或”。

A1为器件/页面地址输入端(DevicPage Addresses):当使用24C1024时最大可级联8个器件,如果只有一个24C1024被总线寻址,地址输入脚A1可悬空或连接到Vss。

WP为写保护:如果WP管脚连接到Vcc所有的内容都被写保护只能读当WP,管脚连接到Vss或悬空,允许器件进行正常的读/写操作。管脚图如图3-3所示。

图3-3 AT24C1024芯片管脚

3.2.3 驱动芯片74LS138

74LS138用于高性能的存贮译码或要求传输延迟时间短的数据传输系统,在高性能存贮器系统中,用这种译码器可以提高译码系统的效率。将快速赋能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时间通常小于存贮器的典型存取时间,

这就是说由肖特基钳位的系统译码器所引起的有效系统延迟可以忽

略不计。

74LS138基本功能:74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式,其工作原理如下:当一个选通端(E1)为高电平,另两个选通端(/(E2)和/(E3))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。74LS138的作用:利用E1、/(E2)和/(E3)可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器。若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器以及与非门组成的3线-8线译码器74LS138等。其引脚功能如下:

A、B、C译码地址输入端

E1选通端/(E2)和/(E3)选通端(低电平有效)

Y0—Y7译码输出端(低电平有效)

其功能表如表2所示。

表2 3线-8线译码器74LS138的功能表

74LS138的八个输出管脚,任何时刻要么全为高电平1—芯片处于不工作状态,要么只有一个为低电平0,其余7个输出管脚全为高电平1。如果出现两个输出管脚在同一个时间为0的情况,说明该芯片已经损坏。74LS138有三个附加的控制端,当输出为高电平(S=1),译码器处于工作状态。否则,译码器被禁止,所有的输出端被封锁在高电平,如功能表所示。这三个控制端也叫做“片选”输入端,利用片选的作用可以将多篇连接起来以扩展译码器的功能。带控制输入端的译码器又是一个完整的数据分配器。在电路中如果把作为“数据”输入端(同时)

,而将作为“地址”输入端,那么从送来的数据只能通过所指定的一根

输出线送出去。图3-4是74LS138译码器芯片引脚图,图中小圆圈表示低电平有效。

图3-4 74LS138芯片管脚

4 系统硬件设计

本系统外围电路包括键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、驱动部分,开锁以及报警等部分组成。根据实际情况键盘输入部分选择4×4矩阵键盘,显示部分选择字符型8位七段数码管显示,密码存储部分选用芯片AT24C1024,驱动部分选用74LS138芯片来完成,报警及开锁部分由LED灯模拟来控制。

4.1 键盘输入模块 由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩

阵式按键键盘,它由行和列组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,能减少键盘与单片机连接时所占用的I/O线的数目。本设计中使用的这个4×4键盘不但能完成密码的输入还能作特别功能键使用。其行线和单片机P1.0~P1.3相连,列线与单片机P1.4~P1.7相连,共有16个按键。本设计用到了其中的12个,如图4-1所示,包括0~9十个数字键,确认和清除两个控制键(作为密码输入时的确定和清除键),本设计中的键盘扫描采用行扫描法,即依次置行线中的每一行为低电平,其余均为高电平,扫描列线电平状态,为低电平即表示该键按下。

图4-1 键盘输入模块

具体的按键功能设置如下

4.2 密码存储模块

密码存储采用AT24C1024传输方式I2C总线式,占用的单片机端口少,它能掉电存储数据。掉电存储单元的作用是在系统电源断开的时候,存储当前设定的密码数据。密码读写存储模块当比较密码的时候,需要将存储在AT24C1024的数据读到RAM中,然后和输入的密码相比较。图4-2所示AT24C1024的2脚是地址线,用于确定芯片的硬件地址。在AT89S52试验开发板上接地,第5脚SDA为串行数据输入/输出,数据通过这条双向I²C总线串行传送,在AT89S52试验开发板上和单片机的P2.6连接。第6脚SCL为串行时钟输入线,在AT89S52试验开发板上和单片机的P2.5连接。SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。第7脚接地。AT24C1024中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。

图4-2 密码存储电路

4.3 复位和晶振模块

单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C3通过R10放电。R10的作用在于限制按键按下瞬间电容C3的放电电流,避免产生火花,以保护按键触电。

AT89S52引脚XTAL1和XTAL2与晶体振荡器及电容C1、C2按图4-3所示方式连接。晶振、电容C1/C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C1、C2取值范围在5~30pF之间。根据实际情况,本设计中采用12MHZ作为系统的外部晶振。电容取值为10pF。复位和晶振电路图如图4-3所示。

图4-3 复位和晶振电路

4.4 显示模块

显示部分由一组八个LED数码管来完成。当单片机上电后,从左到右第八位数码管会闪亮,说明显示屏已经接通电源正等待密码的输入。开锁时,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个数字,输入多少位就显示多少个数字。当密码输入完成时,按下确认键,如果输入的密码正确的话,LED显示屏第八位数码管闪亮且不再显示以后输入的数字,单片机其中P2.0引脚会输出高电平,电子密码锁被打开(黄灯亮);若输入密码错误,显示屏无任何显示,单片机其中P2.1引脚会输出高电平,电子密码锁不能打开且报警(红灯亮),错误确认密码不能超过三次,超过三次,显示屏将不再显示输入的任何数字,键盘自动锁定。通过LED显示屏,可以清楚地判断出密码锁所处的状态。显示电路如图4-4所示。

图4-4 显示电路

4.5 开锁和报警模块

开锁和报警部分各由一个LED灯来完成,当单片机上电后可自动识别密码。若输入密码与设定的密码相同时,即可开锁(黄灯亮);当输入密码与设定的密码不相同时,即可报警(红灯亮);该密码锁有三次输入密码的机会:若一次就确认密码输入正确,则开锁(黄灯亮)且显示器不再显示以后任何输入的数字;若三次都确认输入错误密码,则报警(红灯亮)三次且显示器不再显示任何输入的数字,即键盘自动锁定。单片机断电后即可清除原有记录,上电后可再次输入密码进行有关操作。开锁和报警部分电路如图4-5所示。

图4-5 开锁和报警电路

5 系统软件设计

系统软件设计与硬件电路相关联,本电子密码锁系统的软件设计分为以下几个模块:主程序模块,键盘扫描模块,密码读写存储模块,LED显示模块,报警模块等等。软件设计思路:电子密码锁工作的主要过程是LED数码管提示开始输入密码,通过键盘输入密码,同时LED显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。当输入密码连续输入错误3次时,锁定键盘10s。

A. 主程序模块在主程序模块中要完成系统初始化,检测按键,调用存储模块以及调用显示模块等功能。

B. 键盘扫描子程序模块该模块在主程序中调用,具备判断键盘上有无键按下、逐列扫描键盘以确定被按键的位置即行列号、形成键值并将键值存入指定的数据缓冲区等功能。键盘扫描子程序中采用行扫描法,扫描方式为查询方式,当键盘无键按下时,程序一直在该模块中循环,当有键按下时,程序立即计算键值并在LED显示相应的值。

C. 密码读写存储模块当比较密码的时候,需要将存储在AT24C1024芯片内的数据读到RAM中,然后和输入的密码相比较。

D. 显示子程序模块实现显示子程序的关键是编写LED的串口驱动程序。在想要显示数值的时候,只要在程序中写好要显示的数字,然后直接调用LED的串口驱动程序就可以实现在数码管上显示的数字。有多位需要同时显示时,可以采用动态刷新的方法,就可以得到稳定的输出。

5.1 系统总程序流程图

主程序主要完成初始化,有无按键按下以及调用显示等等。主程序的流程图如图5-1所示。

图5-1 主程序流程图

5.2 密码比较及开锁流程图

图5-2 密码比较及开锁流程图

6 软件调试及性能分析 6.1 软件介绍 6.1.1 KeilC51简介

随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展。Keil是目前最流行的51单片机开发软件,它提供了一个集成开发环境uVision,它包括C编译器,宏汇编,连接器,库管理和一个功能强大的仿真调试器。这样在开发应用软件的过程中,编辑、编译、汇编、连接、调试等各阶段都集成在一个环境中,先用编辑其编写程序,接着调用编译器进行编译,连接后即可直接运行,可以缩短开发周期。 6.1.2 Proteus介绍

Proteus软件是一块功能强大的电路设计分析软件。它组合了高级原理布图、

混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统,它和KeilC51结合起来就可以实现软硬件的联调仿真。ISIS是Proteus系统的中心,它远不仅是一个

表库。Proteus的ISIS是一款Lab-center出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机。元件库齐全,使用方便,是不可多得的专业单片机软件仿真系统,它具有控制原理图设计外观的超强制作环境。无论用户的要求是快速实现复杂设计的仿真以及PCB设计,还是设计精美的原理图以供出版,ISIS是您的最好工具。 6.2 软件调试

通过编写出系统的主程序、密码比较判断程序、显示程序的测试,结合外围电路及输出驱动控制等器件来检测系统是否能够正常工作。通过Keil uVision2软件来编译调试程序,看程序中是否有死循环错误、机器码错误及转移地址错误,若程序正确并执行跟踪或单步运行,确保了程序的正确性后结合Proteus仿真软件的使用来判断程序和原理图的结合是否能实现所要求的功能,即能够顺利的实现开锁及报警的功能。其调试的结果如图6-1所示;仿真结果如图6-2及图6-3所示。

图6-1 Keil uVision2编译结果

图6-2 Proteus仿真结果(1)

图6-3 Proteus仿真结果(2)

6.3 系统功能简述

系统设定初始密码为12345678,共8位。系统上电后,系统内各部分都处于初始状态,LED上闪烁显示8。用户通过键盘输入8位密码,按下“确认”键

后,系统将输入密码与设定密码进行比较。若密码正确,则发出开锁信号,将锁

打开(黄灯亮)且LED屏上清除所输入的密码显示数字8;若密码不正确,则报警(红灯亮)。用户可以重新输入密码,重新输入密码的次数不能超过3次,若3次输入的密码都不正确,则键盘被锁定并且系统发出报警信号(红灯亮),此次开锁可意为失败,对单片机重新上电,可重新进行有关操作。 结 论

在着手本次毕业设计时,通过查阅网络与图书馆搜集到的资料,再加上指导老师指点,结合生活中对密码锁的功能特性要求,以单片机AT89S52芯片为控制核心部件,结合显示部分、以及输出控制这三部分的主要驱动,通过按键及LED灯的亮灭控制密码输入的正确与否设计出了这一套电子密码锁系统的主要硬件结构和软件结构,基本完成了课题的要求:密码正确开锁,密码错误报警,密码输入错误超过三次键盘自动锁定。其电路结构简单、易推广、维护方便、从各个方面体现出它具有较高的实用价值。

参考文献

[1]李智辉,周灵彬,白宇龙.基于51单片机电子密码锁与proteus仿真的设计[J].电脑知识与技术,2009,5(24)

[2]任艳艳.基于AT89C51单片机多功能密码锁的研究[J].重庆职业技术学院学报,2008.5

[3]杨将新,李华军,刘到骏等.单片机程序设计及应用(从基础到实践)[J].电

子工业出版社, 2006

[4]王为青,程国钢.单片机Keil Cx51应用开发技术[J].人民邮电出版社,2007.2 [5]于勇,戴佳,常江.51单片机C语言常用模块与综合系统设计实例精讲[M].北京:电子工业出版社,2007.4

[6]杨居义,杨尧,杨晓琴,王益斌.单片机课程设计指导[M].北京:清华大学出

版社,2009.9

[7]徐爱均.单片机原理使用教程—基于Proteus虚拟仿真[M].电子工业出版社,2009

[8]常敏,王涵,范江波.单片机应用程序开发与实践[M].北京:电子工业出版社,2009.3

[9]张俊谟.单片机中级教程—原理与应用第二版[M].北京:北京航空航天大学出版社,2006.10

[10]柳兆军,李同山,王善斌.Proteus软件在单片机教学中的应用[J].山东理工大学,2007,9(149).

[11]黄智伟,王彦,朱卫华.全国大学生电子设计竞赛训练教程[M].北京:电子工业出版社,2005.1 [12]Richard

“Park.Electronic

Password-lock

Design”[DB/OL].Pcword.com.June 2006

[13]周海鹏.电子密码锁设计-中国期刊全文数据库[EB].

http://www.cnki.net/kcms/detail/Detail.aspx?dbname=CJFDTEMP&filename=

ZJWL201005017

致 谢

在这大学的最后一页里,我要感谢的人很多,首先要感谢我的指导老师李娣娜老师,在整个毕业设计过程中,李老师多次询问研究进程,并为我指点迷津,帮助我开拓研究思路,心点拨、热忱鼓励。李老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神,深深地感动了我,当我遇到难题无从下手时,李老师总能给予我中肯的意见,我从心底里感谢他。还要感谢的是我们各课任课老师,没有你们的谆谆教诲,就没有我们学有所长的今天。当然,还要感谢寝室的姐妹们在我完成论文的过程中给予我的帮助和鼓励,也是她们陪我度过这四年的生活。最后要感谢的就是我的父母,谢谢你们对我的支持。所有的都汇聚成一句话:感谢你们都一直陪伴着我!

现在即将挥别我的学校、老师、同学,还有我四年的大学生活,虽然依依不舍,但是对未来的路,我充满了信心。最后,感谢在大学期间认识我和我认识的所有人,有你们伴随,才有我大学生活的丰富多彩,绚丽多姿!

(全文共10999字)

附录一 原器件清单一览表

附录二 总系统原理图

附录三 硬件实物图

附录四 程序清单 系统总程序: #include

#include

#include

#define uchar unsigned char #define uint unsigned int #define KEY P1 #define DISP P0 #define null1 '\0' sbit

LED=P2^0; //密码正确点亮

sbit LED1=P2^1; //密码错误点亮 sbit sbit

P14=P1^4; P15=P1^5;

sbit P16=P1^6; sbit

P17=P1^7;

sbit P22=P2^2; sbit P23=P2^3; sbit P24=P2^4; uchar key; uchar shuzi; uchar statet; uchar input_mima[9];

uchar mima[9]={0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F}; uchar k; uchar kk; uchar

tab[13]={0x00,0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x5e}; void delay(uint i); void delay_right(void); void delay_wrong(void); void init_main(void); void main(void); void get_key(void);

void calc_disp(uchar array[9],uchar n);

void clear_arry(uchar *p,uchar n); void delay(uin i) {

while(--i); }

void init_main(void) //初始化子程序 {

DISP=0; LED=0; LED1=0; k=0;

clear_arry(input_mima,9); }

void main(void) {uchar lock=0; init_main(); statet=0; while(1) {

get_key(); while(kk==1) { kk=0;

if(statet==0)

{

if(key!=0x00 && key!=0x39 && key!=0x5e)

{

input_mima[k]=key;

if(k

if(key==0x5e) {

if(strcmp(input_mima,mima)==0) {statet=1;

delay_right();

init_main(); } else

{delay_wrong();

lock++; if(lock

init_main(); }

}continue;

}

if(statet==1)

{

if(key==0x39)

{

delay_right(); }continue; }

}calc_disp(input_mima,8);

} } void

delay_right(void)

{ uchar m;

for(m=5;m>0;m--) {

LED=1;

delay(50000); delay(50000); LED=0; delay(20000); delay(20000);

}

}

void delay_wrong(void)

{ uchar m; for(m=5;m>0;m--) { LED1=1;

delay(50000); delay(50000); LED1=0; delay(20000); delay(20000);

}

} void get_key(void)

{ KEY=0xfe; if(!P14) { delay(200); if(!P14) { while(!P14); key=tab[8]; kk=1;

}

}

if(!P15) { delay(200); if(!P15) { while(!P15); key=tab[9]; kk=1;

}

} if(!P16) { delay(200); if(!P16) { while(!P16); key=tab[10]; kk=1;

}

}

KEY=0xfd; if(!P14) { delay(200); if(!P14) { while(!P14); key=tab[5]; kk=1;

}

} if(!P15)

{

delay(200);

if(!P15)

{

while(!P15);

key=tab[6];

kk=1;

}

}

if(!P16)

{

delay(200);

if(!P16)

{

while(!P16);

key=tab[7];

kk=1;

}

}

KEY=0xfb;

if(!P14)

{

delay(200);

if(!P14)

{

while(!P14);

key=tab[2];

kk=1;

}

}

if(!P15)

{

30

delay(200);

if(!P15)

{

while(!P15);

key=tab[3];

kk=1;

}

}

if(!P16)

{

delay(200);

if(!P16)

{

while(!P16);

key=tab[4];

kk=1;

}

}

KEY=0xf7;

{

delay(200);

if(!P14)

{

while(!P14);

init_main();

}

}

if(!P15)

{

delay(200);

if(!P15)

31 if(!P14)

} { { } while(!P15); key=tab[1]; kk=1; if(!P16)

delay(200);

}

void clear_arry(uchar *p,uchar n) { uchar j;

for(j=0;j

}

32 } { } if(!P16) { } while(!P16); key=tab[12]; kk=1; if(!P17) delay(200); if(!P17) { } while(!P17); key=tab[11]; kk=1; *p=null1;

void calc_disp(uchar array[9],uchar n) {

uchar leddisp[9];

uchar i;

for(i=0;i

leddisp[i]=array[i];

i=0;

for(i=0;i

{switch(i)

{case 0:{P22=0;P23=0;P24=0;}break; case 1:{P22=1;P23=0;P24=0;}break; case 2:{P22=0;P23=1;P24=0;}break; case 3:{P22=1;P23=1;P24=0;}break; case 4:{P22=0;P23=0;P24=1;}break; case 5:{P22=1;P23=0;P24=1;}break; case 6:{P22=0;P23=1;P24=1;}break; case 7:{P22=1;P23=1;P24=1;}break; default : break;

}

P0=leddisp[i];

delay(50);

}

}

33


相关内容

  • 一种智能电子密码锁的设计
  • 龙源期刊网 http://www.qikan.com.cn 一种智能电子密码锁的设计 作者:刘卫卫 王志坤 来源:<硅谷>2015年第03期 摘 要 智能电子密码锁是由AT8C951单片机为核心控制芯片,智能电子密码锁实现了由密码输入,智能电子密码锁对输入的密码进行辨认,并进行密码报错或 ...

  • 保险柜密码锁的结构和工作原理
  • 文章由 天猫商城 友情提供 保险柜密码锁的结构和工作原理  多拨式 最简单的密码锁,常见於低安全设定的单车锁,使用多个拨圈.每个圈的中间有凹位.锁的中心的一条轴,上有数个凸出的齿,用来卡住拨圈.当拨圈转到正确的密码组合,锁便可以打开.这种锁是最容易打开的.很多这类锁根本无需知道密码都能开启.除非它 ...

  • 单片机毕业设计题目
  • 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数字气压计的设计与实现 8. 基于MSC1211的温度智能温度传感器 9. 机器视觉系统 ...

  • 自动化毕业设计论文题目
  • 自 动 化 毕 业 设 计 论 文 题 目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数字气压计的设计与实现 8. 基于MSC12 ...

  • 通信工程毕业设计题目精选
  • 不管怎样,生活还是要继续向前走去.有的时候伤害和失败不见得是一件坏事,它会让你变得更好,孤单和失落亦是如此.每件事到最后一定会变成一件好事,只要你能够走到最后. 通信工程毕业设计题目精选 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激 ...

  • 电气自动化设计论文题目大全
  • 机电一体化 毕 业 设 计 论 文 题 目 第1-100个电气自动化毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数 ...

  • 电气自动化毕业设计论文题目
  • 电 气 自 动 化 毕 业 设 计 论 文 题 目 第1-100个电气自动化毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机 ...

  • PLC毕业设计论文题目
  • P L C 第1-100个PLC毕业设计论文题目 1. 智能压力传感器系统设计 2. 智能定时器 3. 液位控制系统设计 4. 液晶控制模块的制作 5. 嵌入式激光打标机运动控制卡软件系统设计 6. 嵌入式激光打标机运动控制卡硬件系统设计 7. 基于单片机控制的数字气压计的设计与实现 8. 基于MS ...

  • 电气自动化技术--智能电子密码锁设计
  • 天 津 大 学 网 络 教 育 学 院 专科毕业论文 题目:智能电子密码锁设计 完成期限:2016年7月5日 至 2016年11月5日 学习中心:南昌 专业名称:电气自动化技术 学生姓名:曾华辉 学生学号:[1**********]4 指导教师:李娜娜 智能电子密码锁设计 一.概述 1.选题背景 在 ...

  • 密码锁参考论文
  • 毕业设计 基于单片机的密码锁设计 姓 名 系 别. 专 业 导 师 姓 名.职 称 完 成 时 间 目 录 摘要 ............................................................................................. ...