门禁系统密码锁设计
门禁密码锁设计
摘 要
摘要:安全是现代居民最关心的问题之一,人们对锁的要求甚高,既要安全可靠
地防盗,又要使用方便,这也是制锁者长期以来研制的主题。随着电子产品向智能
化和微型化的不断发展,单片机已成为电子产品研制和开发中首选的控制器。本
文介绍了一种应用STC89C52单片机设计的防盗自动报警的智能密码锁,本系统
由单片机系统、矩阵键盘、LCD显示和报警系统组成。系统能完成开锁、超时
报警、超次锁定、修改用户密码的功能。该系统具有软硬件设计简单,易于开发,
成本较低,安全可靠,操作方便等特点,可应用于家庭门锁,有比较强的实用性。
关键词 密码锁 单片机 报警 LCD显示
Lock Access Control System Design
Abstract:One of the problem that many people pay much attention to is the security. people want to have a lock that is not only safe but also convenient to use.More and more people spend a long time to develop a safe and easy lock. With the development
of progress of the exploiture of products in teligentization and micromation, SCM has becom the preferred controller in the exploiture of products. In the context, I introduce a electronic coded lock based in the STC89C52 SCM that could guard against theft and give a alarm automately. The system is composed of singlechip system ,matriks keyboard, LCD and alarm modules. The system can open the lock ,give an alarm overtime, lock using to excess and modification the user password. In the process of design, the software and hardware are very easy , so the cost of the system is small. However the security is good and the the operation is easy. It can be equipped in hurse door. This proves its pracaticality.
.
Key Words: Password lock; MCU; Alarm; LCD Display
目 录
摘要
第一章 绪论
1.1门禁密码锁简介„„„„„„„„„„„„„„„„„„„„„„„„1
1.2门禁密码锁的发展趋势和前景展望„„„„„„„„„„„„„„„„„1
1.3本课题的主要内容和要求„„„„„„„„„„„„„„„„„„„„„2
第二章 总体方案选择
第三章 硬件系统构成
3.1设计原理„„„„„„„„„„„„„„„„„„„„„„„„„„„10 3.2电路总体构成„„„„„„„„„„„„„„„„„„„„„„„„„10 3.3电源输入电路„„„„„„„„„„„„„„„„„„„„„„„„„11 3.4键盘输入电路„„„„„„„„„„„„„„„„„„„„„„„„„12 3.5密码存储电路„„„„„„„„„„„„„„„„„„„„„„„„„12 3.6复位和晶振电路„„„„„„„„„„„„„„„„„„„„„„„„13 3.7显示电路„„„„„„„„„„„„„„„„„„„„„„„„„„„14
„„„„„„„„„„„„„„„„„„„„„„„„„15 3.8报警电路„„
3.9开锁电路 „„„„„„„„„„„„„„„„„„„„„„„„„„15 第四章 软件系统设计
4.1主程序流程图„„„„„„„„„„„„„„„„„„„„„„„„„17 4.2按键软件设计„„„„„„„„„„„„„„„„„„„„„„„„„18 4.3密码设置软件设计„„„„„„„„„„„„„„„„„„„„„„„19 4.4开锁软件设计„„„„„„„„„„„„„„„„„„„„„„„„„20
第五章 调试与实现
5.1硬件调试 „„„„„„„„„„„„„„„„„„„„„„„„„„„21 5.2软件调试 „„„„„„„„„„„„„„„„„„„„„„„„„„„21 5.3 Pruteus仿真„„„„„„„„„„„„„„„„„„„„„„„„„22 结论与展望
致谢
参考文献
附录
第一章 绪 论
1.1 电子密码锁简介
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁。其特点如下:
1) 保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。
2) 密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因
人员的更替而使锁的密级下降。
3) 误码输入保护,当输入密码多次错误时,报警系统自动启动。
4) 无活动零件,不会磨损,寿命长。
5) 使用灵活性好,不像机械锁必须佩带钥匙才能开锁。
6) 电子密码锁操作简单易行,一学即会。
1.2 电子密码锁的发展趋势和前景展望
日常生活和工作中,住宅与部门的安全防范、单位的文件档案、财务
以及一些个人资料的保存多以加锁的办法来解决。目前门锁主要用弹子锁,其钥匙容易丢失;保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高,且易出现故障,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。针对这些锁具给人们带来的不便若使用机械式钥匙开锁,为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。由于电子器件所限,以前开发的电子密码锁,其种类不多,保密性差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但很不安全,在后为多是基于EDA来实现的,其电路结构复杂,电子元件繁多,也有使用早先的20引角的2051系列单片机来实现的,但密码简单,易破解。随着电子元件的进一步发展,电子密码锁也出现了很多的种类,功能日益强大,使用更加方便,安全保密性更强,由以前的单密码输入发展到现在的,密码加感应元件,实现了真真的电子加密,用户只有密码或电子钥匙中的一样,是打不开锁的,随着电子元件的发展及人们对保密性需求的提高出现了越来越多的电子密码锁。出于安全、方便等方面的需要许多电子密码锁已相继问世。但这类产品的特点是针对特定有效卡、指纹
1
或声音有效,且不能实现远程控制,只能适用于保密要求高且供个人使用的箱、柜、房间等。由于数字、字符、图形图像、人体生物特征和时间等要素均可成为钥匙的电子信息,组合使用这些信息能够使电子防盗锁获得高度的保密性,如防范森严的金库,需要使用复合信息密码的电子防盗锁,组合使用信息也能够使电子防盗锁获得无穷扩展的可能,使产品多样化,对用户而言是“千挑百选、自得其所”。可以看出组合使用电子信息是电子密码锁以后发展的趋势。 1.3 本课题的主要内容和要求
本设计采用单片机为主控芯片,结合外围电路,组成电子密码锁,用户想要打开锁,必先通过提供的键盘输入正确的密码才能将锁打开,密码输入错误有提示,为了提高安全性,当密码输入错误三次将报警。密码可以有用户自己修改设定,锁打开后才能修改密码。修改密码之前必须再次输入就的密码,在输入新密码的时候要二次确认,以防止误操作。
在初始状态下,会预设一个密码,用户也可以根据自己的需要设置密码.无论是预设的还是用户自己设定的,都存入24c04存储器中,以备用户开锁和修改密码时输入的密码作比较。
在告知系统准备开锁时,数码管上显示“------”。接着通过矩阵键盘输入密码,然后与存储在24C04存储器中的密码进行比较,若比较通过,驱动继电器动作,数码管上显示“--GOOD”。若不正确,数码管上显示:“1ERROR”若在三次之内输入密码正确,比较通过,警报不会响起。若三次之后,输入密码仍然错误。警报响起,键盘锁定,短时间内不可对密码锁进行操作。
2
第二章 总体方案的选择
本设计有多种方案选择,如:可以采用数字电路控制:用以74LS112双JK触发器构成的数字逻辑电路作为密码控制系统的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过10秒(一般情况下,用户不会超过10秒,若用户觉得不便,还可以修改)电路将报警20秒,若电路连续报警三次,电路将锁定键盘2分钟,防止他人的非法操作 。采用数字电路设计方案时设计虽然简单,但控制的准确性和灵活性差。故不采用。由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理选择,以期获得最佳的性价比。一般来说在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些还有一些最基本的,比如:中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等。在开发过程中单片机还受到:开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等等因素 。另外,我们对单片比较熟悉也很重要。基于以上因素本设计选用单片机AT89C51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码控制功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LED数码管用于显示作用。当用户需要开锁时,先按键盘开锁键之后按键盘的数字键0,9输入密码。密码输完后按下确认键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;当用户需要修改密码时,先按下键盘修改键后输入原来的密码,只有当输入的原密码正确后才能设置新密码。新密码输入无误后按确认键使新密码将得到存储,密码修改成功。可以看出此方案的控制灵活,准确性好,且保密性强还具有扩展功能,因此此次设计采用此方案。
1
第三章 硬件系统设计
3.1 设计原理
本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈。
本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、建功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
键盘输入 电源输入
显示电路 复位电路
AT89C51
报警电路 存储电路
开锁电路 晶振电路
图3-1 密码锁原理框图
1
3.2 电路总体构成
在确定了选用什么型号的单片机后,就要确定在外围电路,其外围电路包括电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成,根据实际情况键盘输入部分选择4*4矩阵键盘,显示部分选择LED晶体数码管,密码存储部分选用AT24C02芯片来完成。 3.3 电源输入电路
密码锁主要控制部分电源需要用5V直流电源供电,其电路如图3-3所示,而5V电源输入时往往伴有杂波,所以加一个2.2uF的电容滤波。这样输出的电压一般能满足要求。
VCCC4
2.2uF
2
1
POWER图3-3 电源输入电路原理图
2PIN3.4 键盘输入电路
由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。键盘的每个按键功能在程序设计中设置 。其大体功能(看键盘按键上的标记)及与单片机引脚接法如图3-4所示:
2
S1S2S3S4
S5S6S7S8
S9S10S11S12
P1.0
P1.1S13S14S15S16
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
R1R2R3R4R5R6R7R8 10k10k10k10k10k10k10k10k图3-4 键盘输入原理图
VCC
3.5 密码存储电路
AT24C02是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。其电路如图3-5所示。
U3VCC
15P3.5A0VCC26P3.6A1WP37P3.7A2SCL48GNDSDL
R9AT24C02
5.1kR10
5.1k
VCC
图3-5 密码存储电路原理图
图中1、2、3脚是三条地址线,用于确定芯片的硬件地址,在AT89S51上它们都能接地,第5脚和第8脚分别为正、负电源。AT24C02中带有片内地址寄存器,每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个储存单元的读写,所有字节均以单一操作方式读取。
3.6 复位和晶振电路
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC,0000H,使单片机从第—个单元取指令。
3
无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。在复位期间(即RST为高电平期间),P0口为高组态,P1,P3口输出高电平;外部程序存储器读选通信号PSEN无效。地址锁存信号ALE也为高电平。根据实际情况选择如图2-8所示的复位电路。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C1通过R15放电。当电容C1放电结束后,RST端的电位由R11与R15分压比决定。由于R11<
3,
确, Y
Y
报警程序 Y
开锁程序 开锁,
N Y
修改程序 修改密码
锁码, N
返回
图4-1主程序流程图
4.2 按键软件设计
如图4-2按键功能流程图,在按键当中,有与输入、开锁、清除、设置、确认的程序相对应的按键,并按顺序与输入的数相比较,当输入正确时,进入密码程序,错误时进行清除,输入两次新密码正确时,可进行重新设置密码,最后确认程序。
8
开始
Y
键值,‘输入’, 密码输入程
序
N
Y
开锁程序 键值,‘开锁’,
Y N
键值,‘清除’, 清除程序
N
Y
设置程序 键值,‘设置’,
N
Y
键值,‘确确认程序
认’,
N
返回
图4-2 按键功能流程图
4.3 密码设置软件设计
如图4-3为密码设置流程图,开始按下设置键,输入旧密码,如果错误累计三次,进行报警程序。如果输入正确,可以修改密码,确认后再次输入新密码,如果两次输入一样,则输入成功。如果两次输入的新密码不一样,则修改密码失败,重新返回设置新密码。
9
开始
按下设置
键
输入旧密码
N
所输入旧密输入次数加1 码正确,
N
Y 次数>3?
输新密码 Y
报警程序 再次输新密
码
返回
N
两次新密码输
入相同,
Y
设置成功
图4-3 密码设置流程图
4.4 开锁软件设计
如图4-4开锁流程图,开始时按开锁键,输入密码,如果输入正确,则开
锁成功。如果输入错误累计达到三次,则执行报警程序。
10
开始
初始化
按开锁键
输入密码
输入次数加1
按确认键
N
次数>3? 所输入密码N Y 正确,
报警程序
Y
开锁 返回
图4-4 开锁流程图
第五章 调试与实现 5.1 硬件调试
单片机应用系统的硬件调试和软件调试是分不开的(许多硬件故障只有通
过软、硬件联调才能发现,但一般是先排除系统中比较明显的硬件故障后才和软
件一起联调。
11
常见的硬件故障:
(1)逻辑错误
硬件的逻辑错误是由于设计错误和焊接过程中的工艺错误而造成的,包括错线、开路、短路等,其中最常见的是短路故障。
(2)元器件错误
元器件错误的原因有器件损坏或性能不符合要求,电解电容、二极管的极性接反或集成块装反等。
(3)可靠性差
应用系统可靠性差的原因很多,如内部和外部的干扰、电压纹波系数过大、器件负载过重等均会造成系统的可靠性差。另外,走线和布置的不合理也会造成系统可靠性差。
(4)电源故障
电源故障包括:电压值不符合设计要求、电源功率不足、负载能力差、纹波太重等。
硬件调试办法
脱机调试是在加电前,先用万用表等工具,按图纸仔细核对线路是否正确,并对元器件的安装、型号、规格等进行仔细检查,特别焊接时有无走线之间相互短路等。
5.2 软件调试
程序在KEIL C51上调试,采用模块程序设计技术,则逐个模块调好后再进行系统程序总调。
对于模块结构程序(要一个个子程序分别调试。调试时,一定要符合入口条件和出口条件,调试可用单步运行和断点运行方式,通过检查用者系统的CPU现场情况、RAM的内容和I,O口的状态,检测程序执行结果是否符合设计要求,有无循环错误、有无机器码错误以及转移地址的错误,同时,还可以发现系统中存在的硬件设计错误和软件算法错误。
各程序模块通过后,则可以把相关功能块连在一起进行总调。这个阶段若有故障,可以考虑各子程序运行时是否破坏了现场,缓冲单元、工作寄存器是否发生冲突,标志位的建立和清除是否有误,堆栈区是否有溢出,输入设备的状态是否正
12
常等等,若用者系统是在开发机的监控程序下运行时,还要考虑用者缓冲单元是否和监控程序的工作单元发生冲突。
单步和断点调试后,还应进行连续调试,用以确定定时精度、CPU的实时响应等问题。 当全部调试和修改完成后,将程序固化到AT89S51中。进行整机调试。各功能实现则调试完成。
5.3 Proteus仿真
在硬件和软件都能实现的条件下,利用Proteus进行仿真,通过不停的调试与改正,最后终于实现了密码锁的功能,Proteus仿真结果如图4-1所示
当连好各个模块电路的导线后,导入芯片程序,运行该密码锁仿真电路,通过按键可以进行密码锁的开锁,修改密码,错误密码3次以上报警的操作,LED显示屏显示相应的操作现象,密码正确可以开锁,进而可以修改密码,密码错误三次以上由喇叭发出报警声,如果系统出现错误还可以通过复位电路进行复位。
总之,在原有的理论基础上,通过Proteus能够成功的进行密码锁基本操作
1VSS2的仿真,实现了相关的功能。 VDD3VEE4RS5RW6ELCD17D0LM10628D19SW17D210D311C1D4SW-SPST12D513D6C330pF14R11D7X1U1CRYSTAL10k1939XTAL1P0.0/AD01nF38C2P0.1/AD137P0.2/AD21836XTAL2P0.3/AD330pF35P0.4/AD434P0.5/AD533P0.6/AD6932RSTP0.7/AD721P2.0/A822P2.1/A9R1R2R3R4R5R6R7R823P2.2/A1010k10k10k10k10k10k10k10k2924PSENP2.3/A113025ALEP2.4/A123126EAP2.5/A1327P2.6/A1428P2.7/A15R21R22R23R24R25R26R27R28110P1.0P3.0/RXD10k10k10k10k10k10k10k10k211P1.1P3.1/TXD312P1.2P3.2/INT0413P1.3P3.3/INT1514P1.4P3.4/T0615P1.5P3.5/T1AT89C51716P1.6P3.6/WR817LS1P1.7P3.7/RD
SPEAKERQ1PNP
R91k
结论与展望
以上为毕业期间所作的毕业---基于单片机的电子密码锁设计,它经过多次修改和整理,可以满足设计的基本要求。输入密码时,如三次输入错误,则进行报警,在输入时,LCD显示为“*”,在修改密码时,则显示数字。次设计
13
还具有防盗功能,如对密码控制系统进行破坏,有报警功能。
通过对该课题的研究,加深对所学知识的理解,提高对课外知识的学习能力,
增强知识的应用能力,提高解决实际问题的能力,培养自我创新意识。积累实践经验,为以后的发展打下基础,也为以后我们自己在这方面的发展打下基础,并能够在这方面培养自己的兴趣。
在设计中我们必须首先熟悉和掌握单片机的结构及工作原理,单片机的接口技术及相关外围芯片的外特性,控制方法。以单片机核心的电路设计的基本方法和技术了解表关电路参数的计算方法。单片机不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机了解计算机原理与结构的最佳选择。 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。随着单片机的广泛应用,将大大促进各领域的技术更新,向自动化、小型化、智能化方向迈进。而对于我们来说,我们这代人的目标和任务是把这些高科技产品更升一个层次。
毕业设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
通过这次毕业设计,无论从选题到定稿,从理论到实践都使我学到了很多东西,它不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。同时也明白了理论与实践相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为
14
社会服务,从而提高自己的实际动手能力和独立思考的能力。
致 谢
四年的大学生活不知不觉中就要结束了,在这段难忘的生活中,有许多美好的回忆,在毕业论文设计之中,我的老师和我的同学都不吝的指导我,我需要感谢的人太多太多,首先要感谢我的学校,感谢在这四年中让我领悟到诚实做人,踏实做事,扎实做学问的深刻道理,让我从一个懵懂得高中生变成一个成熟的大学生,其次我要感谢的是我的导师王老师。虽然王老师平日里工作繁多,但在我做毕业设计的每个阶段,都给予我悉心的指导和帮助,关心我们每个阶段所做的工作,当然,还要感谢寝室的兄弟们在我完成论文的过程中给予我的帮助和鼓励,也是他们陪我度过了这四年的生活,感谢能有这段美好的记忆。
现在即将挥别我的学校、老师、同学,还有我四年的大学生活,虽然依依不舍,但是对未来的路,我充满了信心。最后,感谢在大学期间认识我和我认识的所有人,有你们的陪伴,才有我大学生活的绚丽多彩。
作者:
2011年5月25日
参考文献
[1] 童诗白,华成英. 模拟电子技术基础[第四版]. 高等教育出版社,2000 [2] 阎 石. 数字电子技术基础[第五版].高等教育出版社.1998.11 [3] 张毅刚. 单片机原理及应用. 高等教育出版社.2003
15
[4] 楼苗然,李光飞. 单片机课程设计指导. 北京航空航天大学出版社2007 [5] 蔡朝洋. 单片机控制实习与专题制作. 北京航空航天大学出版社2006 [6] 陈连坤. 单片机原理及接口技术. 北京交通大学出版社2010 [7] 李学海. 标准8051单片机基础教程. 北京航空航天大学出版,2006 [8] 何立民. 单片机高级教程. 北京航空航天大学出版社, 2006 [9] 周立功. 单片机实验与实践教程. 北京航空航天大学出版社, 2006 [10] 江志红. 51单片机技术与应用系统开发. 清华大学出版社, 2008 [11] 祖龙起. 一种新型可编程密码锁. 大连轻工业学院学报,2002,(01); [12] 李明喜. 新型电子密码锁的设计. 机电产品开发与创新,2004,(03) [13] 王宽仁. 可靠安全的智能密码锁.电子技术应用.2001年第2期 [14] 董继成. 一种新型安全的单片机密码锁. 电子技术,2004,(03) [15] 任艳艳. 基于AT89C51单片机多功能密码锁的研究. 重庆职业技术学院学
报.2008.5
[16] 周鑫,何建新, 刘琥. 基于单片机的电子密码锁控制电路设计. 成都信息
工程学院学报. 2009,(08)
[17] 王金国.采用单片机的电子密码锁控制电路.山东煤炭科技 ,2000 ,(3) :30
- 33.
[18] 宁爱民. 应用AT89C2051 单片机设计电子密码锁. 淮海工学院学报
2003 ,6
16
附 录 程序清单:
显示缓冲区
LED1 EQU 6FH
BUFF EQU 6EH
TIMERS1 EQU 6DH ;输入回车的次数
TIMERS2 EQU 6CH ;报警的次数
LED6 EQU 6AH
密码缓冲区
PS1 EQU 69H
PS2 EQU 78H
PS3 EQU 67H
PS4 EQU 66H
PS5 EQU 65H
PS6 EQU 64H
PS7 EQU 63H
PS8 EQU 62H
AT24C02读取缓冲区
AT1 EQU 61H
AT2 EQU 60H
AT3 EQU 5FH
AT4 EQU 5EH
AT5 EQU 5DH
AT6 EQU 5CH
AT7 EQU 5BH
AT8 EQU 5AH
按键标志位
F_0 BIT 20H
F_1 BIT 21H
F_2 BIT 22H
F_3 BIT 23H
F_4 BIT 24H
F_5 BIT 25H
F_6 BIT 26H
F_7 BIT 27H
F_8 BIT 28H
F_9 BIT 29H CH_STATE BIT 2AH ;系统更改的状态标志位,为1表示busy
FLAG1 BIT 2BH ;功能键标志位,为1表示功能按键。
F_F1 BIT 2CH
F_F2 BIT 2DH
PSW_F BIT 2EH ;密码是否正确的标志位
口资源定义
SPK BIT P2.1
WP BIT P3.5
SDA BIT P3.6 ;定义串口数据端
SCL BIT P3.7
ORG 0000H
AJMP MAIN
ORG 000BH
;AJMP TIMER0
ORG 001BH
;AJMP TIMER1
ORG 0030H
MAIN:MOV SP, #70H
MOV TMOD, #11H
MOV TH0, #3CH
MOV TL0, #0B0H
MOV TH1, #3CH
MOV TL1, #0B0H
CLR F_0 ;清除标志位
CLR F_1
CLR F_2
CLR F_3
CLR F_4
CLR F_5
CLR F_6
CLR F_7
CLR F_8
CLR F_9
CLR BUF_FULL
CLR CH_STATE
CLR FLAG1
CLR F_F1
CLR F_F2
CLR PSW_F
MOV BUFF,#00H ;调用
LCALL INITPS ;初始化环境
LCALL INITAT LCALL XSA ;调用默认显示
MOV TIMERS1,#00H
NOP
MOV PS1, #11H ;初始化密码830620
MOV PS2, #0AH
MOV PS3, #02H
MOV PS4, #13H
MOV PS5, #0BH
MOV PS6, #02H
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,则为功能键 ***********数字按键输入并且存放到缓冲区内等待比较******************
KEY_DIG:NOP ;设一标志,辨别输入是否满
;SETB TR0
INC TIMERS ;输入数字的位数
MOV A, TIMERS
CLR C
SUBB A, #01H
JNZ PS_2
MOV PS1, BUFF ;依照顺序存放密码
AJMP NEXT
PS_2:MOV A, TIMERS
SUBB A, #02H
CLR C
JNZ PS_3
MOV PS2, BUFF AJMP NEXT
PS_3:MOV A, TIMERS
CLR C
SUBB A, #03H
JNZ PS_4
MOV PS3, BUFF
AJMP NEXT
PS_4:MOV A, TIMERS
CLR C
SUBB A, #04
JNZ PS_5
MOV PS4, BUFF
AJMP NEXT
PS_5:MOV A, TIMERS
CLR C
SUBB A, #05
JNZ PS_6
MOV PS5, BUFF
AJMP NEXT
PS_6:MOV A, TIMERS
CLR C
SUBB A, #06H
JNZ CH_KEY
MOV PS6, BUFF
NEXT:LCALL XSC
MOV R7, TIMERS ;比较输入的次数。
CJNE R7, #06H ,FULL
FULL:JC NEXT9
SETB BUF_FULL
MOV TIMERS,#06H
CLR L3
NOP
CLR P2.1
LCALL T100MSD
SETB P2.1
NOP
AJMP CH_KEY
NEXT9:CLR P2.1 ;密码输入一位,鸣叫一声。
CLR L3
LCALL T100MSD ;延时100ms
SETB L3
SETB P2.1
AJMP CH_KEY ***************开门子程序 ******************************************
CL:NOP
SETB L3
MOV BUFF, #00H ;消密码缓冲
MOV TIMERS,#00H
LCALL INITPS ;消除AT缓冲,调电存储后一定要加上
LCALL XSC
LCALL BP
LCALL BP
LCALL T100MSD
LCALL BP
CLR FLAG1
AJMP CH_KEY
FU4:NOP
LCALL BP
LCALL T100MSD
LCALL BP
LCALL T100MSD
LCALL BP
LCALL T100MSD
LCALL BP
LCALL T100MSD
LCALL BP
CLR FLAG1
AJMP CH_KEY
FU3:NOP
LCALL BP
LCALL T100MSD
LCALL BP
LCALL KILLXS ;关闭显示
CLR FLAG1
AJMP CH_KEY
FU1:NOP
LCALL XSC
JB F_F1, NEXT_F1
CLR L1
LCALL BP
SETB F_F1
AJMP CH_KEY NEXT_F1:SETB L1
LCALL BP
CLR F_F1
;LCALL CH_STATE ;查看现在的状态以防误按
;SETB TR1 ;报警限制暂时不开
;INC F_F1
CLR FLAG1
AJMP CH_KEY
FU2:NOP
JB F_F2, NEXT_F2
CLR L2
LCALL BP
SETB F_F2
AJMP CH_KEY
NEXT_F2:SETB L2
LCALL BP
CLR F_F2
CLR FLAG1
AJMP CH_KEY
**************各类子程序********************************
注意清楚缓冲区时AT1...AT8不应在初始化中执行,以
防两缓冲区都为0,相同开锁
********************************************************
CLR_BUF:MOV R7, #06H
MOV R0, #6FH
LOOP1:MOV A, #00H
MOV @R0, A
DEC R0
DJNZ R7,LOOP1
RET
*************初始化显示缓冲区以及其他缓冲区**************
INITPS:PUSH ACC
PUSH PSW
MOV R7, #06H
MOV R1, #PS1
MOV A, #00H INIT_PS:MOV @R1, A
DEC R1
DJNZ R7, INIT_PS
POP PSW
POP ACC
NOP
RET
INITAT:PUSH ACC
PUSH PSW
MOV R7,#06H
MOV R1,#AT1
MOV A, #00H INIT_AT:MOV @R1, A
DEC R1
DJNZ R7, INIT_AT
MOV TIMERS,#00H ;密码输入的次数清零。
POP PSW
POP ACC
RET
****************检验密码正误******************************
C_PSW:PUSH PSW
PUSH ACC
MOV R2,#06H
MOV R0,#PS1
MOV R1,#AT1
C_P:CLR C
MOV A,@R0
SUBB A,@R1
JNZ RETURN
DEC R0
DEC R1
DJNZ R2,C_P
NOP
SETB PSW_F
AJMP EXIT7
RETURN:CLR PSW_F
EXIT7:NOP
POP ACC
POP PSW
RET
***************************锁定,鸣笛程序**********************
LOCK_1M:MOV R4,#3CH ;锁定1分钟
M1_LOOP:LCALL SEC
DJNZ R4,M1_LOOP
NOP
RET
WARN2S:PUSH PSW
PUSH ACC
MOV R5, #14H ;调用20次BP,报警2s
WARN:LCALL BP
DJNZ R5,WARN
NOP
POP ACC
POP PSW
NOP
RET
BP:CLR SPK ;鸣笛子程序
LCALL T100MSD
SETB SPK
NOP
RET
***************************
***** 显示子程序 ********
***************************
锁定状态显示。
XSA:PUSH ACC
PUSH PSW
MOV A, TIMERS1
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV SBUF, A ;送已经输入密码的次数
JNB TI, $
CLR TI
MOV SBUF, #0FEH ;送短线
JNB TI, $
CLR TI
MOV SBUF, #0FEH ;送短线
JNB TI, $
CLR TI ;送F
MOV SBUF, #78H
JNB TI, $
CLR TI
MOV SBUF, #78H
JNB TI, $
CLR TI
MOV SBUF, #11H
JNB TI, $
CLR TI
POP PSW
POP ACC
RET
成功开锁状态显示
XSB:PUSH ACC
PUSH PSW
MOV A, TIMERS1
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV SBUF, A
JNB TI, $
CLR TI
MOV SBUF, #0FEH
JNB TI, $
CLR TI
MOV SBUF, #0FEH
JNB TI, $
CLR TI
MOV SBUF, #10H
JNB TI, $
CLR TI
MOV SBUF, #10H
JNB TI, $
CLR TI
MOV SBUF, #10H
JNB TI, $
CLR TI
POP PSW
POP ACC
RET
密码输入及修改状态
XSC:PUSH ACC
PUSH PSW
LCALL KILLXS
SETB RS1 ;切换到第三组寄存器。防止操作数读取错误。
MOV R6, TIMERS
MOV A, R6
SUBB A, #01H
JNC SC0
JZ SC1
SC0:MOV SBUF, #0FEH
JNB TI, $
CLR TI
SC1:MOV A, R6
SUBB A, #02H
JNC SC11
JNZ SC2
SC11:MOV SBUF,#0FEH
JNB TI, $
CLR TI
SC2:MOV A, R6
SUBB A, #03H
JNC SC22
JNZ SC3
SC22:MOV SBUF, #0FEH
JNB TI, $
CLR TI
SC3:MOV A, R6
SUBB A, #04H
JNC SC33
JNZ SC4
SC33:MOV SBUF, #0FEH
JNB TI, $
CLR TI
SC4:MOV A, R6
SUBB A, #05H
JNC SC44
JNZ SC5
SC44:MOV SBUF, #0FEH
JNB TI, $
CLR TI
SC5:MOV A, R6
SUBB A, #06H
JNC SC55
JNZ SC6
SC55:MOV SBUF, #0FEH
JNB TI, $
CLR TI
SC6:MOV A, R6
SUBB A, #07H
JNC SC66
JNZ EXIT_C
SC66:MOV SBUF, #0FEH
JNB TI, $
CLR TI
NOP
NOP
EXIT_C:NOP
CLR RS1
POP PSW
POP ACC
NOP
RET
密码输入错误的提示
XSD:PUSH ACC
PUSH PSW
MOV SBUF, #98H
JNB TI, $
CLR TI
MOV SBUF, #79H
JNB TI, $
CLR TI
MOV SBUF, #11H
JNB TI, $
CLR TI
MOV SBUF, #79H
JNB TI, $
CLR TI
MOV SBUF, #79H
JNB TI, $
CLR TI
MOV SBUF, #38H
JNB TI, $
CLR TI
POP PSW
POP ACC
RET
锁定状态显示
XSE:PUSH ACC
PUSH PSW
MOV SBUF, #0FEH
JNB TI, $
CLR TI
MOV SBUF, #54H
JNB TI, $
CLR TI
MOV SBUF, #39H
JNB TI, $
CLR TI
MOV SBUF, #11H
JNB TI, $
CLR TI
MOV SBUF, #3DH
JNB TI, $
CLR TI
MOV SBUF, #0FEH
JNB TI, $
CLR TI
POP PSW
POP ACC
RET
XSF:PUSH ACC
PUSH PSW
MOV SBUF, #98H
JNB TI, $
CLR TI
MOV SBUF, #38H
JNB TI, $
CLR TI
MOV SBUF, #39H
JNB TI, $
CLR TI
MOV SBUF, #39H
JNB TI, $
CLR TI
MOV SBUF, #3DH ;U
JNB TI, $
CLR TI
MOV SBUF, #98H
JNB TI, $
CLR TI
POP PSW
POP ACC
RET
KILLXS:PUSH ACC
PUSH PSW
MOV R7, #06H
LOOP_XS:MOV SBUF, #0FFH
JNB TI, $
CLR TI
DJNZ R7,LOOP_XS
NOP
POP PSW
POP ACC
RET
TAB: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D1H,10H,90H ,0FFH
****************************************************************
******* 24C02读写程序 ***********
****************************************************************
AT_RADE:PUSH PSW
PUSH ACC
MOV R0,#AT1 ;CPU首地址
MOV R6,#06H ;8字节
MOV R5,#08H ;8位
MOV R7,#00H ;24C02首地址
LCALL READ ;读数据
NOP
NOP
POP ACC
POP PSW
RET
AT_WR:
PUSH PSW
PUSH ACC
MOV R0,#PS1 ;CPU RAM首地址
MOV R6,#06H ;8字节
MOV R5,#08H ;8 BIT
MOV R7,#00H ;24C02 RAM 首地址
LCALL WRT ;先写进
NOP
NOP
POP ACC
POP PSW
RET
****************************************************************
读串行器件 R0:RAM的起始地址,R5:位计数器, R6:读的字节数,R7:读的起始地址 READ: NOP
NOP
LCALL START0
MOV A,#0A0H
LCALL WRB
LCALL ACK
JB F0,RD_FAIL
MOV A,R7
LCALL WRB
LCALL CHK
JB F0,RD_FAIL
LCALL START0
MOV A,#0A1H
LCALL WRB
LCALL CHK
JB F0,RD_FAIL RD_N: NOP
NOP
LCALL RDB
MOV @R0,A
DJNZ R6,GO_ACK
LCALL N_ACK
RD_FAIL:NOP
LCALL STOP
MOV A,#0FFH
RET *************read
GO_ACK: NOP
NOP
DEC R0
LCALL ACK
JMP RD_N
, 写串行器件 R0:RAM的起始地址,R5:位计数器R6:写的字节数(页),R7:写的起始地址 WRT: NOP
NOP
LCALL START0
MOV A,#0A0H
LCALL WRBYT
LCALL CHK
JB F0,WR_FAIL
MOV A,R7
LCALL WRBYT
LCALL CHK
JB F0,WR_FAIL WR_N: NOP
NOP
MOV A,@R0
LCALL WRBYT
LCALL CHK
JB F0,WR_FAIL
DEC R0
DJNZ R6,WR_N WR_FAIL:NOP
LCALL STOP
MOV A,#0FFH
RET ;*********wrt
;--------------------
START0: NOP
NOP
SETB SDA
SETB SCL
NOP
NOP
CLR SDA
NOP
NOP
CLR SCL
NOP
RET
;-------------------
STOP: NOP
NOP
CLR SDA
SETB SCL
NOP
NOP
SETB SDA
NOP
NOP
CLR SCL
NOP
RET
;--------------------
ACK: NOP
NOP
CLR SDA
SETB SCL
NOP
NOP
CLR SCL
SETB SDA
NOP
RET
;--------------------
N_ACK: NOP
NOP
SETB SDA
SETB SCL
NOP
NOP
CLR SCL
CLR SDA
NOP
RET
;--------------------
CHK: NOP
NOP
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
MOV C,SDA
MOV F0,C
CLR SCL
NOP
NOP
RET
---------------------
RDB: NOP
NOP
SETB SDA
MOV R5,#8 RD_B: NOP
NOP
CLR SCL
NOP
NOP
SETB SCL
NOP
NOP
MOV C,SDA
RLC A
NOP
NOP
SETB SDA
CLR SCL
DJNZ R5,RD_B
NOP
RET
一字节数据发送子程序
WRBYT: MOV R5,#8 WLP: RLC A
JC WR1
CLR SDA
SETB SCL
NOP
NOP
CLR SCL
DJNZ R5,WLP
RET
WR1: SETB SDA
SETB SCL
NOP
NOP
CLR SCL
CLR SDA
DJNZ R5,WLP
RET
-------------------- WRB: NOP
NOP
MOV R5,#8
WR_B: NOP
NOP
SETB SDA
RLC A
JC WR_1
CLR SDA
NOP
WR_1: SETB SCL
NOP
NOP
CLR SCL
NOP
CLR SDA
NOP
DJNZ R5,WR_B
NOP
RET
*********************************************************************
********** 毫秒延时程序 *************
********************************************************************
T10MSD:SETB RS0
MOV R4, #12
TM:MOV R3, #128
TM6:DJNZ R3, TM6
DJNZ R4, TM
CLR RS0
RET
T100MSD:MOV R3, #200
D11:MOV R4, #125
D12:DJNZ R4, D12
DJNZ R3, D11
RET
T500MSD:LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
NOP
RET
SEC:SETB RS1
MOV R7, #0AH
SEC_LP:LCALL T100MSD
DJNZ R7,SEC_LP
NOP
CLR RS1
RET
END