基于单片机AT89S51的电子密码锁系统
第1节 引 言
随着社会的发展电子产品向智能化和微型化的不断发展,单片机已成为电子产品研制和开发中首选的控制器。随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,安全性能低,无法满足人们的需要。
利用微处理器AT89S51作为控制元件设计了一种电子密码锁。其具有可设置多组密码、多次改写和保存密码的优点,克服了普通锁需要随身携带钥匙且易丢失、保密性差的缺点,在宾馆、办公大楼、仓库、保险柜和家庭普遍适用。
1.1 电子密码锁系统概述
目前,最常用的锁是20世纪50年代意大利人设计的机械锁,其机构简单、使用方便、价格便宜。但在使用中暴露了很多缺点:一是机械锁是靠金属制成的钥匙上的不同齿形与锁芯的配合来工作的。据统计,每4000把锁中就有两把锁的钥匙齿牙相同或类似,故安全性低,根据国外的统计资料,装有电子防盗装置的商业区或居民区盗窃犯罪率平均下降30%左右。二是钥匙一旦丢失,无论谁捡到都可以将锁打开。三是机械锁的材料大多为黄铜,质地较软,容易损坏。四是机械锁钥匙易于复制,不适于诸如宾馆等公共场所使用。
出于安全、方便等方面的需要,许多智能锁(如指纹辨别、IC卡识别)已相继问世,但这类产品的特点是针对特定指纹或有效卡,只能适用于保密要求高且仅供个别人使用的箱、柜、房间等。另外,卡片式的IC卡易丢失,加上其成本一般较高,在一定程度上限制了这类产品的普及和推广。
随着人们生活水平的提高,电子密码防盗锁作为防盗卫士的作用日趋重要。电子密码防盗锁用密码代替钥匙,不但省去了佩戴钥匙的烦恼,也从根本上解决了普通门锁保密性差的缺点。本系统从经济实用的角度出发,采用美国Atmel公司的单片机AT89S51与低功耗CMOS型E2PROM AT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、显示、报警、开锁等电路,用汇编语言编写主控芯片的控制程序,设计了一款可以多次更改密码具有报警功能的电子密码锁。
经实验证明,该密码锁具有设计方法合理,简单易行,成本低,安全实用等特点,符合住宅、办公室用锁要求,具有推广价值。
1.2 设计任务和主要内容
1
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。本系统的任务采用单片机C51作为单片机的核心单元,利用单片机串行发射、接收等功能而设计的一款具有本机开锁和报警功能的电子密码锁。主要分为以下几个部分: 1)选择密码
将编好的密码程序存储在EPROM中,用户通过密码选择键进行选择。具体操作过程如下:首先按下密码选择键,然后在逐渐输入号码,最后按下确认键即可。 2)密码显示
为了帮助用户确认是否有键按下,特在电路中设置了模拟显示电路;而为了防止密码外泄;显示时,并不是显示用户按下的数字符号,而是以一个特定的字母符号提醒用户是否有键按下。有键按下,就会显示出字符---“*”,没键按下,则不会显示字符。这样既巧妙的提醒了用户又保护了用户密码,此乃本设计可靠性优点之一。 3)本机键开锁
当用户键入正确密码后,在按确认键,便会自动开锁。但用户键入密码时应注意:数字与数字之间的间隔时间为2分钟,例如密码为32796,当键入第一个数字3后应在2分钟内键入第二个数字2,否则,就会视为无效。如果键入完密码后不按确认键系统会当做放弃开锁处理 4)密码错误报警
当用户键入错误密码时,系统就会报警,由扬声器发出5秒报警声。当连续三次出现密码错误时,则系统会长期报警不止。这时必须按复位方可停止。此乃安全可靠性之一。
待解决的问题是实现遥控开锁,当此锁用于私家车库或仓库时,用户可以不用上车,只要手执遥控器,键入正确密码,便会自动开锁;如果密码错误,同样也会报警。还有实现声控开锁,这种开锁方式在于方便且快速比遥控式还的待遥控器既不方便又怕丢失遥控器。但声控式容易被别人模仿。有一定的失密性。
第2节 主要元器件介绍
2
2.1 主控芯片AT89S51
AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。其AT89S51芯片引脚图如图2-1所示:
图2-1 AT89S51 芯片引脚图
其主要功能特性:
兼容MCS-51指令系统 4k可反复擦写(>1000次)ISP Flash ROM 32个双向I/O口 4.5-5.5V工作电压 2个16位可编程定时/计数器 时钟频率0-33MHz 全双工UART串行中断口线 128x8 bit内部RAM 2个外部中断源 低功耗空闲和省电模式 中断唤醒省电模式 3级加密位
看门狗(WDT)电路 软件设置空闲和省电功能
3
灵活的ISP字节和分页编程 双数据寄存器指针
可以看出AT89S51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时器/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟。同时AT89S51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM定时/计数器,串行通信口及中断系统继续工作。掉电方式何在RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直接到一个硬件复位。
2.1.1 AT89S51芯片内部结构
特殊功能寄存器:特殊功能寄存器的片内空间分存如下图2-2所示,这些地址并没有全部占用,没有占用的地址不可使用,读这些地址将得到一个随意的数值。而写这些地址单元将不能得到预期的结果。
中断寄存器:各中断允许控制位于IE寄存器,5个中断源的中断优先级控制位于IP寄存器。图2-2为AUXR辅助寄存器。
图2-2 AUXR辅助寄存器
双时钟指针寄存器:为方便地访问内部和外部数据存储器,提供了两个16位数据指针寄存储器:PD0位于SFR区块中的地址82H、83H和DP1位于地址84H、85H,当SFR
4
中的位DPS=0时选择DP0,而DPS=1时选择DP1,在使用前初始化DPS。双时钟指针寄存器如图2-3所示:
图2-3 双时钟指针寄存器
2.2 存储芯片AT24C02
AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含256×8位存储空间,具有工作电压宽(2.5~5.5 V)、擦写次数多(大于10000次)、写入速度快(小于10 ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。AT24C02中带有的片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。I2C总线是一种用于IC器件之间连接的二线制总线。他通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件。 AT24C02正是运用了I2C规程,使用主/从机双向通信,主机(通常为单片机)和从机(AT24C02)均可工作于接收器和发送器状态。主机产生串行时钟信号(通过SCL引脚)并发出控制字,控制总线的传送方向,并产生开始和停止的条件。无论是主机还是从机,接收到一个字节后必须发出一个确认信号ACK。AT24C02的控制字,在开始信号发出以后,主机便会发出控制字,以选择从机并控制总线传送的方向。AT24C02的引脚图和电路接线图分别如图2-4和图2-5所示:
图2-4 AT24C02的两种引脚图
5
VCC AT24C02 R1 5.1K R2 5.1K P3.5 P3.6 AT89S51 1 2 3 4 8 7 6 5 图2-5 AT24C02的电路接线图
图中AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。在AT89C51试验开发板上它们都接地,第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,在AT89C51试验开发板上和单片机的P3.5连接。第6脚SCL为串行时钟输入线,在AT89C51试验开发板上和单片机的P3.6连接。SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。第7脚需要接地。
2.3 LCD1602显示器
现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。1602型LCD可以显示2行16个字符,有8位数据总线D0~D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。 2.3.1 接口信号说明
1602型LCD的接口信号说明如表2-1所示:
表2-1 1602型LCD的接口信号说明
编号 符号 引脚说明 1 2 3 4 5 6 7 8
编号 符号 引脚说明 9 10 11 12 13 14 15 16 D2 D3 D4 D5 D6 D7 BLA BLK Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O 背光源正极 背光源负极 VSS VDD V0 RS 电源地 电源正极 液晶显示偏压信号 数据/命令选择端(H/L) R/W 读写选择端(H/L) E 使能信号 D0 Data I/O D1 Data I/O 6
2.3.2 主要技术参数
1602型LCD的主要技术参数如下表所示: 表2-2 1602型LCD的主要技术参数
显示容量 芯片工作电压 工作电流 模块最佳工作电压 字符尺寸
2.3.3 基本操作程序
读状态:输入:RS=L,RW=L, E=H 输出:D0~D7=状态字 读数据:输入:RS=H,RW=H, E=H 输出:无
写指令:输入:RS=L,RW=L, D0~D7=指令码,E=高脉冲 输出:D0~D7=数据 写数据:输入:RS=H,RW=L, D0~D7=数据, E=高脉冲 输出:无
16X2个字符 4.5~5.5V 2.0mA(5.0V) 5.0V 2.95X4.35(WXH)mm 第3节 系统主要硬件电路设计
3.1 设计方案的选择
方案一:采用数字电路控制
7
用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过10秒(一般情况下,用户不会超过10秒,若用户觉得不便,还可以修改)电路将报警20秒,若电路连续报警三次,电路将锁定键盘2分钟,防止他人的非法操作。采用数字电路设计的方案好处就是设计简单但控制的准确性和灵活性差,故不采用。
方案二:采用以单片机为核心的控制方案
由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理选择,以期获得最佳的性价比。一般来说在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些的还有一些最基本的比如:中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等。在开发过程中单片机还受到:开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等等因素。基于以上因素本设计选用单片机AT89S51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接AT24C02芯片用于密码的存储,外接LCD1602显示器用于显示作用。当用户需要开锁时,先按键盘开锁键之后按键盘的数字键0-9输入密码。密码输完后按下确认键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;当用户需要修改密码时,先按下键盘设置键后输入原来的密码,只有当输入的原密码正确后才能设置新密码。新密码输入无误后按确认键使新密码将得到存储,密码修改成功。
可以看出方案二控制灵活准确性好且保密性强还具有扩展功能,根据现实生活的需要此次设计采用此方案。
3.2 单片机设计原理
本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码
8
是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈。
本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。其原理框图如图3-1所示:
键盘输入 AT89C51 报警电路 密码存储电路 晶振电路
图3-1 电子密码锁原理框图
开锁电路 电源输入 复位电路 显示电路 3.3 单片机电路总体构成
在确定了选用什么型号的单片机后,就要确定在外围电路,其外围电路包括电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,根据实际情况键盘输入部分选择4*4矩阵键盘,显示部分选择字符型液晶显示LCD1602,密码存储部分选用AT24C02芯片来完成。其原理图如图3-2所示:
9
VCCVCC VCC 12345678910111213141516 1K R2 1K R3 1K R4 1K R10 1 2 3 4 5 6 7 ?? ?? ?? ?? ????8 9 1234 VCC R5 20uF R6 470 10K VCC 5 A0 VCC 6 A1 WP A2 SCL 7 8 GND SDL VCC C2 AT24C02 20pF2 12MHz C3 1 20pF K1C1 R7R85.1K5.1K Vcc P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 AT89S5X P0.6 9 RST/VPD P0.7 10 P3.0/RXD EA/VPP 11 P3.1/TXD 12 13 P3.2/INT0 ALE/PROG P3.3/INT1 PSEN 14 P3.4/T0 15 P2.7 16 P3.5/T1 P3.6/WR P2.6 17 P3.7/RD P2.5 P2.4 18 XTAL2 P2.3 19 XTAL1 P2.2 P2.1 20 Gnd P2.0 AT89S51 12345678P1.0/TP1.1/TP1.2P1.3P1.4P1.5P1.6P1.7 39 38 37 36 35 34 33 32 40VCC 30 29 28 27 26 25 24 23 22 21 31 LCD1602 VCC S1 T28550T38550 LCD?GNDLCVCCVOD RSRWEDB0DB1DB2DB3DB4DB5DB6DB7BG VCCBG GND R9 4.7KVCC 4.7K R11D1 K3 图3-2 单片机电路原理图
3.4 键盘输入部分电路
由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。键盘的每个按键功能在程序设计中设置。其大体功能(看键盘按键上的标记)及与单片机引脚接法如图3-3所示:
10
VCC R1 1K R2 R3 1K 0 4 8 ? 1 5 9 2 6 3 7 P1.0 P1.1 P1.2 P1.3 1K R4 1K P1.4 P1.5 P1.6 P1.7
图3-3 键盘输入原理图
3.5 电源输入部分电路
密码锁主控制部分电源需要用5V直流电源供电,其电路如图3-4所示,把频率为
50Hz、有效值为220V的单相交流电压转换为幅值稳定的5V直流电压。其主要原理是把单向交流电压经过电源变压器、整流电路、滤波电路、稳压电路转换成稳定的直流电压。
由于输入电压为电网电压,一般情况下所需直流电压的数值和电网电压的有效值相差较大,因而电源变压器的作用显现出来起到降压作用。降压后还是交流电压,所以需要整流电路把交流电压转换成直流电压。由于经整流电路整流后的电压含有较大的交流分量,会影响到负载电路的正常工作。需通过低通滤波电路滤波,使输出电压平滑。本电路使用集成稳压芯片7805解决了电源稳压问题。
7805 1 2 3 T1 D1 C5 C8 VCC 5V C6 C7 ~220V 220uF 0.1uF D2 0.1uF 220uF 5V R3 Res2 470 图3-4 电源输入电路原理图
3.6 复位部位电路
11
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC=0000H,使单片机从第—个单元取指令。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。在复位期间(即RST为高电平期间),P0口为高组态,P1-P3口输出高电平;外部程序存储器读选通信号PSEN无效。地址锁存信号ALE也为高电平。根据实际情况选择如图3-6所示的复位电路。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻 上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C1通过R5放电。当电容C1放电结束后,RST端的电位由R5与R6分压比决定。由于R5< VCC K1 R5 470 C1 20uF R6 10K 图3-5复位电路原理图 RST 3.7 报警部分电路 报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P2.1引脚为低电平,三极管T3导通轰鸣器发出噪鸣声报警。如图3-6所示: 12 VCC S1 P2.1 R9 4.7K T3 8550 图3-6 报警电路原理图 3.8 密码存储部分电路 用EPROM芯片AT24C02存储密码。AT24C02中带有的片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。为降低总的写入时间,一次操作可写入多达8个字节的数据。I2C总线是一种用于IC器件之间连接的二线制总线。他通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件。AT24C02正是运用了I2C规程,使用主/从机双向通信,主机(通常为单片机)和从机(AT24C02)均可工作于接收器和发送器状态。主机产生串行时钟信号(通过SCL引脚)并发出控制字,控制总线的传送方向,并产生开始和停止的条件。无论是主机还是从机,接收到一个字节后必须发出一个确认信号ACK,其接线如图3-7所示: VCC R3 1 2 3 4 A0 VCC A1 WP A2 SCL GND SDL AT24C02 5 6 7 8 5.1K R4 5.1K P3.5 P3.6 P3.7 图3-7 密码存储电路原理图 3.9开锁部分电路 开锁控制电路的功能是当输入正确的密码后将锁打开。系统使用单片机其中一引脚线发出信号,经三极管放大后,由继电器驱动电磁阀动作将锁打开。用户通过键盘任意设置密码,并储存在EEPROM中作为锁码指令。只有用户操作键盘时,单片机的电源端才能得到3V电源,否则.单片机处于节电工作方式。开锁步骤如下:首先按下键盘上的开锁按键,然后利用键盘上的数字键0-9输入密码,最后按下确认键。当用户输入一密码后,单片机自动识码,如果识码不符,则报警。只有当识码正确,单片机才能控制电子锁内的微型继电器吸台。继电器吸台以后带动锁杆伸缩,这时,锁勾在弹簧的作用下弹起,完成本次开锁。开锁以后,单片机自动清除掉输人的这个密码。 13 开锁电路原理如图3-8所示: P2.0VCC T28550 R7 4.7KK3 D 图3-8 开锁电路原理图 3.10 显示部分电路 为了提高密码锁的密码显示效果能力。本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成。只有按下键盘上的开启按键后,显示器才处于开启状态。当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD子显示“RIGHT”,单片机其中P2.0引角会输出低电平,使三极管T2导通,电磁铁吸合,电子密码锁被打开,如果不正确,LCD显示屏会显示“ERROR”,通过LCD显示屏,可以清楚的判断出锁所处的状态。其显示部分引脚接口如图3-9所示: VCC 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 LCLCD? GND VCC VO RS RW E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 BG VCC BG GND LCD1602 D 1602 P3.2 P3.1 P3.0 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 VCC 图3-9 显示电路原理图 14 第4节 系统的软件设计 本系统软件设计由主程序、初CD显示始化程序、L程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。主要程序设计流程图及部分程序如下所示: 4.1 系统主程序设计 START: NOP ;程序开始 LCALL CH_KEY ;检查键盘 AJMP START ;返回 CH_KEY: LCALL KS ;检查有没有按键按下 JNZ LK1 AJMP CH_KEY LK1: LCALL T12MS ACALL KS JNZ LK2 RET LK2: NOP LCALL SBIE ;按键识别子程序 MOV BUFF, A ;送缓冲区以识别是数字键还是功能键? LCALL CH_KF ;判断按键功能。 JB FLAG1 ,KEY_FUN ;标志为1,则为功能键 系统主程序程序的流程图如图4-1所示: 15