电子密码锁设计与实现Word格式.docx
《电子密码锁设计与实现Word格式.docx》由会员分享,可在线阅读,更多相关《电子密码锁设计与实现Word格式.docx(33页珍藏版)》请在冰豆网上搜索。
密码可以根据用户需要更改。
用C语言编写的主控芯片控制程序与EEPROMAT24C02读写程序相结合,并用Keil软件进行编译,设计了一款可以多次更改密码,具有报警功能的电子密码控制系统。
[关键词]电子密码锁;
报警;
LCD显示;
矩阵键盘
DesignandimplementationofElectricPasswordLock
AutomationSpecialtyJIANGZhong-yang
Abstract:
Aspeople'
slivingstandardsimprove,thequestionhowtoachievehomesecurityhasbecomeparticularlyprominent.Inscienceandtechnologyisdevelopingcontinuously,electroniccodelockasasecurityguard'
sroleisincreasinglyimportant.Thisarticlefromtheeconomicalpointofview,thesystembytheAT89S51hemasterchipandthedatamemoryunit,combinedwiththeexternalkeyboard,LCDdisplay,alarm,unlockandothercircuitmodules.Itperformsthefollowingfunctions:
enterthepasswordcorrectlyunderthepremiseofunlocking;
wrongpasswordcasethealarm;
passwordcanbechangedaccordingtouserneeds.MasterinClanguagecontrolprogramandEEPROMAT24C02chiptoreadandwriteprocessarecombinedandcompiledwiththeKeilsoftware,designedanumberyoucanchangethepassword,thepasswordwithanelectronicalarmcontrolsystem.
KeyWords:
ElectricPasswordlock;
Alarm;
LCDDisplay;
Matrixkeyboard
目 录
1引言
在当今社会,安全防盗已成为社会问题,而锁自古以来就是防盗的重要工具,目前国内大部分人使用的还是传统的机械锁,然而,眼下假冒伪劣的机械锁互开率非常之高,此外,即使是一把质量过关的机械锁,通过急开锁,甚至可以在不损坏锁的前提下将锁打开。
机械锁的这些弊端为一种新型的锁——电子密码锁,提供了很大的发展空间。
从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和取款机,由于人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等缺点,再加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接受程度,键盘式电子密码锁是这类电子防盗产品的主流。
在科学技术不断发展的今天,电子密码防盗锁作为防盗卫士的作用也日趋重要。
电子密码锁是集计算机技术、电子技术、数字密码技术为一体的机电一体化高科技产品,具有安全性高,使用方便等优点。
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。
其性能和安全性已大大超过了机械锁。
本次毕业论文主要分为两大模块,一是硬件系统电路部分,另一个是用C语言编写的软件程序部分,基本能完成电子密码锁的开锁、修改密码、密码错误报警等主要功能,成本低,可靠性高,具有很好的市场应用价值。
1.1课题背景和意义
20世纪30年代以前锁不论其形状如何,都是把守门户的铁将军。
随着科学的发展、社会的进步,锁不仅要具有高度的安全性而且要方便携带。
这就暴露出传统式机械锁的一些弊病,例如:
携带不便和安全性不高。
因此,具有高安全性和不需携带的电子类密码锁就出现了。
这种锁可以避免携带时钥匙易丢失,或者锁很容易被损坏而使物件被盗。
鉴于以上,电子密码锁被很多的国家和地区作为重点发展对象。
电子密码锁不仅因其以上特点而广泛运用还因其可以随意改密而倍受青睐。
用户可以根据自己意愿来修改密码,这也是电子密码锁区别于传统锁的一个显著特点。
电子锁的类型很多,例如:
生物式锁,电子密码锁等。
但较大部分购买者在选购时,会选择后者。
1.2国内外发展现状
20世纪末至今以来,随着电子事业的发展,集成电路的出现,致使电子密码锁的安全性不断提高,体积不断缩小,但是成本较高,只应用于安全要求较高的场合。
由于其运用时需要供电,因此其应用具有一定的局限行,难以大规模实用,以至于电子密码锁的发展没有飞跃性的进展。
放眼观看电子密码锁的发展情景,西方发达国家在这方面处于顶尖地位,种类不仅齐全,而且被广泛的应用在智能防盗系统中,可以选择多种加密方式,更安全、更可靠。
而国内的这方面研究并不尽如人意,技术落后、其成本很高。
至于国内关于电子锁的研究,主要在于键盘式的,其他形式的电子锁虽然也有涉及但是成就不高。
目前国内电子锁行业的发展前景非常可观。
国内自行研发的电子锁有不少引进世界先进的科学技术,市场前景非常乐观。
希望通过国内电子锁类产品的不断发展,使我国的在这方面的研究跃居前列。
1.3电子密码锁的特点
随着电子密码锁的发展,不管是集成电路型的,还是芯片型的,其特点大体相同。
基于芯片的密码锁不仅价格低廉,而且其安全性能也好不逊色。
因此,以芯片为主要组成部分的电子密码锁得到了广泛的应用。
其种类繁多,构造简单,可通过软件编程来实现其加密功能。
所以其大致有如下特点:
(1)安全性能高:
用户可自定多种密码,比机械式锁安全。
(2)可以修改密码:
用户可以根据自己意愿随时修改密码,这样不用担心密码被盗用或者因为人员调用致使锁的保密性降低。
(3)易学易懂:
电子密码锁的操作只需用户按照操作步骤操作即可实现解密和加密功能。
(4)可实现自我安全保护:
如果用户连续错误输入超过规定误输范围,则会自动锁屏。
(5)紧急救济功能:
当遇到突发时间如火灾等,用户只需要特定的动作,即可用手机械式开锁,使人员迅速逃生。
(6)防偷盗、破碎功能:
当密码锁处于正常工作状态时,有人恶意损毁时会自动鸣笛警告。
(7)具有火灾报警功能:
当室内失火并达到规定范围时,会自动报警,并开起密码门锁。
(8)具有内外锁定功能:
外部锁定;
当用户外出时内部强制关闭,以防外人入侵。
2系统整体方案设计
2.1设计方案
本设计采用AT89S51单片机为主控芯片,结合外围电路矩阵键盘、液晶显示器LCD1602和密码存储AT24C02等部分组成。
其中矩阵键盘用于输入数字密码和进行各种功能的实现。
由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,组成的电子密码锁系统,系统整体设计框图如图1所示。
图1系统整体设计框图
2.2主控部分的选择
选用单片机作为系统的核心部件,实现控制与处理的功能。
单片机具有资源丰富、速度快、编程容易等优点。
利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接液晶显示(LCD),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标。
因此综合考虑,本系统采用采用以单片机为核心的控制方案。
3硬件系统设计
3.1主控芯片AT89S51
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
其引脚图如图2所示。
图2AT89S51引脚分布图
AT89S51具体介绍如下:
①主电源引脚(2根)
VCC(Pin40):
电源输入,接+5V电源
GND(Pin20):
接地线
②外接晶振引脚(2根)
XTAL1(Pin19):
片内振荡电路的输入端
XTAL2(Pin20):
片内振荡电路的输出端
③控制引脚(4根)
RST/VPP(Pin9):
复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):
地址锁存允许信号
PSEN(Pin29):
外部存储器读选通信号
EA/VPP(Pin31):
程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
④可编程输入/输出引脚(32根)
AT89S51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
P0口(Pin39~Pin32):
8位双向I/O口线,名称为P0.0~P0.7
P1口(Pin1~Pin8):
8位准双向I/O口线,名称为P1.0~P1.7
P2口(Pin21~Pin28):
8位准双向I/O口线,名称为P2.0~P2.7
P3口(Pin10~Pin17):
8位准双向I/O口线,名称为P3.0~P3.7
3.2液晶显示模块电路设计
(1)LCD1602字符型模块的性能
①与其他的相比要轻
②所占面积小;
③耗电量小;
④可显示内容多
⑤可以显示多种代码;
⑥可满足使用者的显示需求;
⑦可与微处理器连接使用;
⑧其工作温度范围广;
⑨省点,抗干扰性能强,连续工作量强;
LCD1602实物图如图3所示。
图3LCD1602正反面图
(2)LCD1602各引脚说明如下表1所示。
表1LCD1602各引脚说明
编号
符号
引脚说明
1
VCC
电源地
9
D2
数据
2
VDD
电源正极
10
D3
3
VL
液晶显示偏低
11
D4
4
RS
数据/命令选择
12
D5
5
R/W
读/写的选择
13
D6
6
E
使能信号
14
D7
7
D0
15
A
背光源正极
8
D1
16
K
背光源负极
其中4号为数据命令选择端,5号为数据读写选择端,6号为使能端,D0-D7数据输入端其对应接在单片机P1.0-P1.7端,V0为液晶显示偏压,A、K分别为背光正极和背光负极。
(4)光敏电阻
为了延长液晶的使用寿命,使其能自动因光线的强弱来调节液晶亮暗,本电路中采用的光敏电阻是GL5528。
当光强时RG1的电阻减小液晶变亮,当光弱时RG1的电阻变大液晶变暗。
电路如图4所示。
图4GL5528在电路中的应用
3.3存储模块电路设计
(1)24C02描述
24C02是可以进行存储的一个器件,其不但可以进行读操作,也可以进行写操作。
是一个可以进行读写操作的存储芯片。
(2)24C02特点
工作时的电压范围广泛;
低电压技术:
1mA典型工作电流,1μA典型工作电流;
存储器组织结构256X8(2Kbits);
2线串行接口,完全兼容I²
C总线;
I2C时钟频率为1MHz(5V),400kHz(1.8V,2.5V,2.7V);
施密特触发输入噪声抑制;
硬件数据写保护;
可按字节写;
页写:
8字节页;
可按字节,随机和序列读;
自动递增地址;
ESD保护大于2.5KV;
擦可写寿命100万次,数据保持时间100年;
8-pinDIP和8-pinSOP封装。
(3)24C02引脚功能如下表2所示。
表224C02各引脚功能说明
引脚
引脚功能
A0-A2
地址输入端
SDA
串行地址和数据输入输出端,SDA是双向数据传输引脚,漏极开路,需外接上拉电阻到VCC
SCL
串行时钟输入,SCL同步数据传输,上升沿数据写入,下降沿数据读出。
WP
写保护,WP引脚提供硬件数据保护,WP接地时,允许数据正常读写操作,当WP接VCC时,写保护,只读。
(4)24C02在电路中的连接如图5所示。
图524C02连接图
如上图所示SCL接P3.4口,SDA接P3.5口;
单片机是通过数据输入/输出端进行数据传输的,WP接地此时允许单片机进行读写操作,A0-A2接地说明此时的地址为000H。
在使用这部分时,我是先让单片机读取按键编码,然后单片机再从24C02中读取存储密码,与按键输入的密码进行比对,如果一致则开锁,不同则报错。
3.4矩阵键盘电路的设计
为何选用图3的接法呢?
假设一个端口接一个按键,那么51单片机最多也就只能接32个按键而已。
如果一项工程需要33个按键或者更多,仅以一个端口接一个按键的形式恐怕工程量将会非常的浩大。
如果以矩阵的形式进行设计,那么33个按键也就仅需要在16个按键上多加几条线而已所需也不过几个端口而已,其在一个单片机上就能轻易的实现。
而且所用键盘数越多其优势也就越突出。
由此可见,在本次设计中采用下图这种接法是合理的。
在本次设计中我采用的是4×
4的矩阵键盘。
其列线接的是P1.0-P1.3口,行线接的是P1.4-P1.5口其连接方式如图6所示。
图6键盘输入原理图
3.5报警电路设计
报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P2.1引脚为低电平,三极管T3导喇叭发出噪鸣声报警。
如图7所示。
图7报警电路原理图
3.6开锁模块的设计
通过单片机开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。
其原理如图8所示。
图8密码锁开锁机构示意图
当用户输入的密码正确时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。
其实际电路如图9所示。
电路由驱动和开锁两级组成。
由D1、R12、Q1组成驱动电路,其中Q1可以选择普通的小功率三极管如8050、9018都可以满足要求。
D1是开锁指示灯;
由D2、C5组成开锁。
其中D2、C5是为了消除电磁锁可能产生的反向高电压以及可能产生的电磁干扰。
电磁锁的选用要视情况而定,但是吸合力要足够且有一定的余量。
在设计中,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;
灭,表示没有开锁。
原理图如9所示。
图9开锁电路原理图
4软件程序设计
4.1主程序设计
本系统软件设计由主程序、初始化程序、LCD显示程序、键盘扫描程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
如图10所示为主程序流程图,开始接上电源,程序进行初始化设置,然后在键盘上输入密码,此系统进行键盘扫描,密码正确,开锁成功,密码错误3次出错报警,选择是否修改密码,若要修改密码,先输入旧密码密码,密码正确后设置新密码,错误时报警,需要两次确认新密码,确认后,密码修改成功,否则结束最终返回。
然后启动程序,进行保护,再次在键盘上输入密码,系统进行扫描,如果和之前一样,则执行相同程序,如不是,则执行另一种程序。
主程序流程图如图10所示。
图10主程序流程图
4.2按键软件设计
如图11为按键功能流程图,在按键当中,有与输入、开锁、清除、设置、确认的程序相对应的按键,并按顺序与输入的数相比较,当输入正确时,进入密码程序,错误时进行清除,输入两次新密码正确时,可进行重新设置密码,最后确认程序。
按键功能流程图如图11所示。
图11按键功能流程图
4.3密码设置软件设计
如图12为密码设置流程图,开始按下设置键,输入旧密码,如果错误累计三次,进行报警程序。
如输入正确,可以修改密码,确认后再次输入新密码,如两次输入一样,则更改成功。
如果两次输入的新密码不一样,则修改密码失败,
重新返回设置新密码。
密码设置流程图如图12所示。
图12密码设置流程图
4.4开锁软件设计
如图13为开锁流程图,开始时按开锁键,输入密码,如果输入正确,则开锁成功。
如果输入错误累计达到三次,则执行报警程序。
开锁流程图如图13所示。
图13开锁流程图
5系统仿真与调试
5.1程序调试
经过以上的理论分析,在进行硬件系统组装、软件编程,然后就进入调试阶段。
从下面的运行情况来看,软件编译成功。
从图14可以看出编译链接成功,其效果如图14所示。
图14程序编译成功
经过上步编译成功之后,就可进行下步生成二进制文件如图15所示
图15生成HEX文件
5.2仿真调试
程序检测无误后,进行仿真测试,将各个模块连接,仿真测试结果如图16所示。
图16Proteus仿真图
5.3调试结果及分析
程序导入单片机成功后,要输入初始化密码,通过按键输入6位初始化密码,我输入131420,就会显示“Initpassword”、当我再输入开锁密码008888时,就会出现图17所示的现象。
图17密码锁打开
开锁的密码为008888,我现在先后输入111111按#号键会出现图18显现。
图18报警时的效果图
接着上面的步骤再输入123456和789456时后出现图19所示的现象。
图19密码输入超过3次
当两次输入008888并按下重置键时输入新密码111111,屏幕上会出现inputagain,如图20所示。
图20显示再此输入新密码的提示
接着上面的步骤,再次输入111111并按下D号键会出现图21所示现象。
图21重置密码成功
注意此时密码并不是111111,而是01111111(要在1分钟之后,2分钟之前完成重置功能,初始化程序时,过一分钟,进行重置成功的话,其密码前两位就变为01,而后四位是用户自己设定的,故密码变为011111。
)
附录A
附录B
#include<
reg51.h>
#defineucharunsignedchar
sbite=P2^7;
sbitrw=P2^6;
sbitrs=P2^5;
voidrelay();
voidwcode(ucharc);
voidwdata(ucharw);
intkbscan();
voidmima(intw,intk);
voidzf(intw);
voidwait();
voidinit();
voidzfc(intx,ucharidata*s);
voidkai();
voidcuo();
voidshe();
voidxiu();
voidzisuo();
ucharidatashu[15]={0x45,0x6e,0x74,0x65,0x72,0x20,0x50,0x61,0x73,0x73,0x77,0x6f,0x64,0x3a,0x00};
ucharidatature[6]={0x72,0x69,0x67,0x68,0x74,0x00};
ucharidataerror[6]={0x65,0x72,0x72,0x6f,0x72,0x00};
ucharidatab[6]={1,2,3,4,5,6};
ucharidatanew[13]={0x6e,0x65,0x77,0x20,0x50,0x61,0x73,0x73,0x77,0x6f,0x64,0x3a,0x00};
ucharidatanew1[6]={0x61,0x67,0x61,0x69,0x6e,0x00};
uchara[6];
ucharidatazs[5]={0x57,0x41,0x49,0x54,0x00};
ucharidataopen[7]={0x4f,0x50,0x45,0x4e,0x45,0x44,0x00};
ucharidataclose[6]={0x43,0x4c,0x4f,0x53,0x45,0x00};
main()
{
while
(1)
{
intz=0;
intk=0;
intc=0;
intw=0;
ints=0;
inti=0;
intf=0;
while(z==0)
a[5]=20;
s=0;
init();
while(k!
=15)
k=kbscan();
wcode(0x0f);
zfc(0,shu);
while(c<
3&
&
f==0)
=12)
if(k>
=0&
k<
=9|k==10)
if(k>
=