基于单片机的电子密码锁设计论文.docx
《基于单片机的电子密码锁设计论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁设计论文.docx(33页珍藏版)》请在冰豆网上搜索。
![基于单片机的电子密码锁设计论文.docx](https://file1.bdocx.com/fileroot1/2023-1/1/9f45781c-8429-4f2e-8a11-9f6cf5e38a69/9f45781c-8429-4f2e-8a11-9f6cf5e38a691.gif)
基于单片机的电子密码锁设计论文
基于单片机的电子密码锁设计
班级:
姓名:
指导老师:
摘要
目前国内普遍使用的锁都是机械式的,这种锁结构简单、使用方便,但利用工具可轻易将其打开,这给用户带来极大的困扰和损失。
本文介绍了一种基于STC89C52单片机的电子密码锁的设计方法。
该设计以STC89C52单片机为硬件核心,结合4×4矩阵键盘电路、LCD显示电路、密码存储电路、开锁电路和声音报警电路等外围电路。
利用单片机灵活的编程方法和丰富的I/O端口,该系统能实现密码的输入、清除、比较,密码正确开锁,密码错误次数超次报警,用户修改密码等功能。
关键词:
单片机;电子密码锁;矩阵键盘;声音报警
ABSTRACT
Atpresent,thewidespreaduseofallmechanicallocks,thislockstructureissimpleandeasytouse,buteasytousetoolstoopenit,whichgivesusersalotofconfusionandloss.ThispaperintroducesadesignofelectronicpasswordlockwhichisbasedontheSCMofSTC89C52.ThisdesignusestheSCMofSTC89C52ashardwarecore,combiningwithotherperipheralcircuitssuchas4×4matrixkeyboardinterfacecircuit,passwordstoragecircuit,LCDdisplaycircuit,unlockcircuitandvoicealarmcircuit.UsingtheflexibleprogrammingandtherichI/OportoftheSCM,thesystemcanaccomplishthefollowingfunctions:
input,clearorcomparethepassword,unlockwhenthepasswordiscorrect,alarmwhenthewrongenterpasswordtimesisoverandtheusercanchangethepassword.
keywords:
Single-ChipMicrocomputer;electronicpasswordlock;matrixkeyboard;voicealarm
1绪论
1.1设计的背景和意义
随着科学技术的发展和社会物质财富的日益增长,安全问题已成为人们关注的焦点
之一。
而锁自古以来就是用于安全防盗的重要器件,如何制作既安全可靠又使用方便的
锁是制锁工程师们长期以来研制的主题。
众所周知机械锁由于结构上的局限其钥匙很容
易被仿制,很多钥匙可以互开,安全性差,且钥匙丢失后其安全性随即大打折扣。
为满
足人们对锁的使用要求,增加其安全性,用密码代替钥匙的电子密码锁应运而生。
本文
从经济实用的角度出发,以STC89C52单片机为核心,设计了一款具有自动报警功能的
电子密码锁。
该密码锁具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方
便等特点,可应用于住宅、办公室的保险箱及档案柜等需要防盗的场所,有比较强的实
用性。
1.2电子密码锁的国内外现状
据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所
早就有所应用。
这种锁是通过键盘输入一组密码完成开锁过程。
研究这种锁的初衷,就
是为提高锁的安全性。
由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,
并且可以避免因钥匙被仿制而留下安全隐患。
电子锁只需记住一组密码,无需携带金属
钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。
电子锁的种类繁多,
例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等。
但较实用的还是按键式电子密码锁。
20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性
提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用
还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。
目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广
泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。
在我
国电子锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以
按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生
产供应市场。
但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。
国
内的不少企业也引进了世界上先进的技术,发展前景非常可观。
希望通过不断的努力,
使电子密码锁在我国也能得到广泛应用。
1.3电子密码锁的发展趋势
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及
一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需
携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
随着科学技术的不断
发展,人们对日常生活中的安全保险的要求越来越高。
为满足人们对锁的使用要求,增
加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗
低、易操作等优点。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密
码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是
在性能上都获得了大大的提高。
随着大规模集成电路技术的发展,特别是单片机的问世,
出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、
专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已
在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密
要求的箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还
存在容易丢失、损坏等缺点,再加上其成本较高,一定程度上限制了这类产品的普及和
推广。
鉴于目前的技术水平与市场的接受程度,电子密码锁是这类电子防盗产品的主流。
2系统设计
2.1系统方案设计
以STC89C52单片机为电子密码锁系统核心,使用4*4矩阵键盘作为数据输入方式,驱动1602A显示器提示程序运行过程和开锁的步骤,利用AT24C02芯片实现掉电存储。
图1为单片机控制密码锁的系统原理框图。
图1单片机控制密码锁的系统原理框图
2.2系统工作原理
本系统以STC89C52单片机为核心,使用4*4矩阵键盘作为数据输入方式,驱动1602显示器提示程序运行过程和开锁的步骤。
本系统的密码判断过程如下:
当使用者输入6位密码后按下确认键,单片机通过密码逐个比较,如果输入的6位密码和设定的密码完全相同,那么能成功驱动开锁模拟灯(LED绿灯)将锁打开。
若输入6位密码与设定的密码不相同,按下确认键后,模拟灯(LED绿灯)不亮,自动返回主界面可以重新输入。
由于输入密码过程中难免输入失误,如果密码输错,蜂鸣器会短时报警一次,但是系统不允许无限次地出错,以免密码被套用,当3次密码输入都错误,单片机将驱动蜂鸣器长时间报警。
修改密码功能如下:
当密码输入正确后,按下修改密码键可新设置密码。
每设定一位新密码,单片机将其送给E2PROM,当6位新密码都输入完毕,按确认键系统将自动回到程序开始,重新读取密码并保存,使用者需输入新的密码才能将锁打开。
3系统硬件设计
3.1STC89C52最小系统设计
3.1.1时钟电路设计
时钟电路用于产生单片机工作时所必需的时钟控制信号,常用的时钟电路有内部时钟方式和外部时钟方式。
内部时钟方式电路外接两个电容和一个晶振,根据振荡频率要求的不同选用不同阻值的电容和晶振。
时钟电路中的晶振震荡频率范围通常是1.2MHz~12MHz,STC89C52常选择6MHz或12MHz的石英晶体,为消除误差,得到准确的波特率,本设计选择震荡频率为11.0592MHz的石英晶,时钟电路如图2所示。
图2时钟电路
3.1.2复位电路设计
复位是单片机的初始化操作,只需在单片机的复位引脚加上大于2个机器周期的高电平就可使单片机复位,当程序运行出错或操作进入死循环状态可通过复位重新启动程序。
MCS-51的复位是由外部的复位电路来实现的,STC89C52也不例外,复位电路通常采用上电自动复位和按钮复位两种方式,为方便复位操作,本文采用按键电平复位,电路如图5所示。
其中C取10uF,R2取10KΩ,复位电路如图3所示。
图3复位电路
3.2键盘、显示电路硬件设计
3.2.1键盘电路硬件设计
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要M条行线和N条列线,即可组成具有M×N个按键的键盘。
由于本设计中要求使用16个按键输入,为减少键盘与单片机接口时所占用的I/O线的数目,故使用矩阵键盘。
本设计中,矩阵键盘行线和单片机P1.0-P1.3相连,列线与单片机P1.4-P1.7相连。
矩阵键盘设计电路图,如图4所示。
键盘扫描采用行扫描法,即依次置行线中的每一行为低电平,其余均为高电平,扫描列线电平状态,为低电平即表示该键按下。
图4矩阵键盘设计电路图
3.2.2显示电路硬件设计
本设计中,显示电路采用1602A液晶显示器显示[7]。
如下所示,图5为1602A液晶显示器的接口示意图,表1为接口说明。
图51602A液晶显示器的接口示意图
表1接口说明
管脚序
名称
电平
功能描述
1
VSS
0V
接地
2
VCC
5.0V
电源输入
3
V0
—
LCD驱动电压输入
4
RS
H/L
寄存器选择:
RS=H,选择数据寄存器;
RS=L,选择指令寄存器
5
R/W
H/L
读写信号线:
R/W=H,读操作;R/W=L,写操作
6
E
H,H→L
使能信号
7
DB0
H/L
数据线
8
DB1
H/L
数据线
9
DB2
H/L
数据线
10
DB3
H/L
数据线
11
DB4
H/L
数据线
12
DB5
H/L
数据线
13
DB6
H/L
数据线
14
DB7
H/L
数据线
15
BLA
5.0V
背光电源正极
16
BLK
0V
背光电源负极
本设计中液晶串口一共用到11根导线与单片机相连,具体连接情况如表2显示模块与MCU连接说明所示。
表2显示模块与MCU连接说明
序号
1602A液晶显示器引脚
STC89C52单片机引脚
1
RS引脚
P2.5(A13)
2
R/W引脚
P2.6(A14)
3
E引脚
P2.7(A15)
4
D0引脚
P0.0(AD0)
5
D1引脚
P0.1(AD1)
6
D2引脚
P0.2(AD2)
7
D3引脚
P0.3(AD3)
8
D4引脚
P0.4(AD4)
9
D5引脚
P0.5(AD5)
10
D6引脚
P0.6(AD6)
11
D7引脚
P0.7(AD7)
3.3AT24C02掉电存储单元的设计
本设计中掉电存储单元采用AT24C02外部存储器,其作用是在系统电源断开的时候,存储当前设定的密码数据。
AT24C02是一个2K位串行CMOSE2PROM,内部含有256个8位字节,含一个16字节页写缓冲器,具有写保护功能。
其采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。
如下所示,图6为AT24C02管脚示意图,表3为AT24C02管脚说明。
图6AT24C02管脚示意图
表3AT24C02管脚说明
管脚名称
功能
管脚名称
功能
A0A1A2
器件地址选择
SDA
串行数据/地址
SCL
串行时钟信号
WP
写保护
VCC
1.8V-6.0V工作电压
VSS
接地
本设计中,AT24C02的SCL和SDA引脚接上拉电阻后与单片机的P3.4(T0)和P3.5(T1)脚相连,其电路图如图7所示。
图7AT24C02掉电存储单元设计图
3.4声光提示报警电路
3.4.1报警提示电路
报警提示电路采用小蜂鸣器提示。
蜂鸣器能够根据脉冲信号,以及信号的频率发出各种不同的声音,这样可以根据系统要求在密码出入正确和密码输入错误时发出不同的声音提示,已达到报警的要求。
蜂鸣器电路,如图8所示。
图8报警电路
3.4.2LED提示电路
当用户输入的密码正确时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。
本次设计中,基于节省成本考虑,用发光二极管代替电磁锁,信息通过LCD显示,并利用蜂鸣器和二极管声光指示。
其中,绿发光二极管亮,表示开锁;否则,表示密码输入错误并开启报警电路,如图9所示。
图9LED开锁电路
4系统软件设计
在系统设计中,除了硬件设计之外,软件设计也是很重要的,它是系统工作的指挥者,因此系统软件设计时要遵循结构合理、操作性能好、具有一定的保护措施、兼容性好的设计原则来开发设计。
密码锁系统软件设计主要包括主程序模块、密码比较判断模块、键盘扫描模块、修改密码模块、数码管显示模块等及按键检测模块。
4.1主程序模块
主程序主要用于定义全局变量,给全局变量赋初值,启动定时器,为整个程序提供数据;检测按键;调用显示等功能。
系统程序流程如图10所示。
图10系统程序流程图
4.2密码比较判断模块
该模块的功能是将键盘输入的密码利用if语句与设定的密码进行逐个比较,若密码完全正确则开锁;若不正确,则开启报警电路,复位后重新输入密码。
其密码输入和比较判决流程图如图11所示。
图11密码输入和比较判决流程图
4.3密码修改模块
在密码输入正确情况下,可以按下“重置密码”对密码进行重新设置,每设定一位就将密码送给AT24C02存储起来,当设置6位密码完毕后,系统将自动跳到程序开始,调用新设置的密码。
图12为修改密码流程图。
图12修改密码流程图
4.4键盘扫描模块
键盘使用矩阵式键盘,由行和列组成,CPU对所有键盘进行监视,从而实现逐列扫描键盘确定被按键的具体位置、判断键盘上有无键按下、消除去抖动、判断闭合的键是否释放等功能。
如图13所示,为键盘扫描流程图。
图13键盘扫描流程图
4.51602A液晶显示模块
此模块包括液晶初始化、命令的输入、显示数据的输入。
其中命令是用于控制液晶状态是否显示光标,光标是否闪烁,是否清除原来数据以及显示的具体位置。
数据显示主要是将要显示的信息按需要准时显示出来。
5总结
从基本方案的制定,到硬件电路的选择,再到电路的焊接,最后进行程序调试——在此期间我遇到很多困难,但经过不懈努力,和再学习,终于击破了各个难点,达到的所需要的效果。
在这次设计中,我深刻认识到自身的不足——专业知识不足,缺少实战经验。
与此同时,也因为这次设计,我们得到一定的锻炼,体会到理论与实践相结合的重要意义。
由于本次设计时间有限,一些设想没有完全实现,比如说:
电子密码锁的网络通信扩展,人机界面智能化等。
期待以后有机会对以上设想进行进一步研究实践。
但是,基本成功实现了1602液晶显示,密码开锁,密码设置,防止多次试探,报警等功能。
致谢
非常感谢在这次毕业设计中给我很大帮助的朱金荣老师,感谢朱老师一如既往的严格要求,感谢朱老师给我们的压力,让我强迫自己从开始的迷茫困惑中渐渐熟悉掌握了毕业设计的思路和方向。
在论文写作和实物设计过程中,朱老师严格认真的教学作风深深感染了我,我对他提出的各种疑难问题他都一一给我做了解答,并给我纠正了许多错误。
这次毕业设计我学到许多新的知识,也巩固了很多原来学过的知识,这对我以后的工作有极大地帮助。
同时感谢曾经孙妍,张凯,朱俊,陈卫峰等多位老师的专业课的讲授,才有学生今日的设计成果。
感谢王志俊同学对我的无私的帮助。
感谢祖国,感谢党,给我们当代大学生营造的和谐环境,才有我们今日顺利完成的学业。
参考文献
[1]郭海英.基于单片机的电子安全密码锁的设计[J].现代电子技术,2005,28(13):
95-97.
[2]张毅刚.单片机原理及应用[M].北京:
高等教育出版社,2003.
[3]谭浩强.C程序设计[M].北京:
清华大学出版社,2005
[4]杨章伟,韩雪,张浩然.跟我学C程序设计[M].北京:
清华大学出版社,2010
[5]张培仁.基于C语言编程MCS-51单片机原理与应用[M].北京:
清华大学出版社,2002
[6]周润景,张丽娜,丁莉.基于PROTEUS的电路及单片机设计与仿真[M].北京:
北京航天航空大学出版社,2010
[7]20070711.亚斌YB1602A液晶模块使用说明书[DB/OL].
[8]AT24C02[DB/OL].
[9]at24c02中文资料[DB/OL].
[10]金桂,向国梁.基于C语言STC89C52单片机电子密码锁的设计与仿真[J].现代电子技术,2010,19:
176-182.
附录
1器件清单
器件名称
规格型号
编号
数量
单价(元)
总价(元)
备注
MCU
STC89C52
U1
1
7
7
外部存储器
AT24C02
U2
1
0.43
0.43
LCD
1602A
LCD1
1
20
20
发光二极管
3mm
D1
1
0.05
0.05
绿光
普亮
3mm
D2
1
0.05
0.05
红光
普亮
三极管
8550
Q1
1
0.2
0.2
晶振
12MHz
X1
1
0.5
0.5
电阻
4.7kΩ
4
0.02
0.08
10kΩ
2
0.02
0.04
10K排阻
RP1
1
0.5
0.5
电容
22P
C1C2
2
0.05
0.1
10μF
C3
1
0.05
0.5
IC座
8脚IC座
1
0.35
0.35
40脚IC座
1
0.3
0.3
单排插座
1
0.5
0.5
蜂鸣器
LS1
1
0.65
0.65
电池盒
5V电池盒
1
4
4
焊锡
2
1
2
导线
1
1
1
电路板
9×15cm万用板
1
1.5
1.5
2源程序
#include
#defineucharunsignedchar
voidWrToROM(ucharAddress,ucharData[],ucharNum);
voidRdFromROM(ucharAddress,ucharData[],ucharNum);
voidLCD_init();
voidLCD_DISPLAY(uchar*str);
voidKeyDisp();
externucharpasswd[5];
ucharppp[5]="222";
voidmain()
{
LCD_init();
WrToROM(0x00,passwd,5);
RdFromROM(0x00,passwd,5);
LCD_DISPLAY("Welcomechina!
Plzinputpasswd");
while
(1)
{
KeyDisp();
}
}
//*****************80s52对键盘**********************//
#include
#include
#defineucharunsignedchar
voidLCD_DISPLAY(uchar*str);
voidwrite_com(ucharcom);
voidwrite_data(ucharData);
voidWrToROM(ucharAddress,ucharData[],ucharNum);
voidRdFromROM(ucharAddress,ucharData[],ucharNum);
ucharcodetab1[]={"ERROR!
"};
ucharcodetab2[]={"RIGHT!
"};
ucharcodetab3[]={"0123456789*"};
ucharcodetab4[]={"Inputthecodes:
"};
ucharcodetab5[]={"Inputnewcodes:
"};
ucharcodetab6[]={"Inputoldcodes:
"};
ucharmima[9]="22224444";//存放用户密码和正确密码:
前四位是用户输入密码,后四位是系统的正确密码
ucharpasswd[5]="1111";
ucharte[9]={0};
sbitrelay=P2^0;
sbitbeep=P2^1;
/******************************矩阵键盘子程序*********************************/
voiddelay(ucharv)//延时
{
while(v!
=0)
v--;
}
voiddelaynms(ucharn)//延时50*n毫秒
{
uchara,b,c;
for(c=n;c>0;c--)
for(b=173;b>0;b--)
for(a=143;a>0;a--);
}
ucharKeycan(void)//按键扫描程序P1.0--P1.3为行线P1.4--P1.7为列线
{
ucharrcode,ccode;
P1=0xF0;//发全0行扫描码,列线输入
if((P1&0xF0)!
=0xF0)//若有键按下
{
delay(200);//延时去抖动
if((P1&0xF0)!
=0xF0)
{
rcode=0xFE;//逐行扫