基于单片机电子密码锁设计.docx
- 文档编号:25561971
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:30
- 大小:203.65KB
基于单片机电子密码锁设计.docx
《基于单片机电子密码锁设计.docx》由会员分享,可在线阅读,更多相关《基于单片机电子密码锁设计.docx(30页珍藏版)》请在冰豆网上搜索。
基于单片机电子密码锁设计
课程论文
题目:
基于单片机电子密码锁设计
学生姓名:
雷婷婷
学生学号:
1008030216
系别:
电气信息工程学院
专业:
电子信息工程
年级:
10
任课教师:
张水锋
电气信息工程学院制
2012年11月
课程论文:
基于单片机电子密码锁设计
学生:
雷婷婷
指导教师:
张水锋
电气信息工程学院电子信息工程专业
摘要
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。
本设计以单片机AT89C51结合4*4矩阵按键电路、LCD液晶显示电路、报警指示电路和开锁机构作为密码锁监控装置的检测和控制核心,分为主机控制和从机执行机构,实现钥匙信息在主机上的初步认证注册、密码信息的加密等功能。
根据51单片机之间的串行通信原理,这便于对密码信息的随机加密和保护。
而且采用键盘输入的电子密码锁具有较高的优势。
采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,提高信号传输的抗干扰性,减少错误动作,而且功率消耗低;反应速度快、传输效率高、工作稳定可靠等。
软件设计采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。
关键词:
AT89C51;电子密码锁;4*4矩阵键盘;液晶显示1602;
一.方案设计
1.1设计要求
(1)本设计为了防止密码被窃取要求在输入密码时在LCD屏幕上显示*号。
(2)设计开锁密码位六位密码的电子密码锁。
(3)能够LCD显示在密码正确时显示PASSWORDOK,密码错误时显示PASSWORDERROR,输入密码时显示INPUTPASSWORD。
(4)实现输入密码错误超过限定的三次电子密码锁定。
(5)4×4的矩阵键盘其中包括0-9的数字键和A-F的功能键
(6)本产品具备报警功能,当输入密码错误时蜂鸣器响并且LED灯亮。
(7)密码可以由用户自己修改设定(只支持6位密码),修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。
1.2方案设计讨论
方案一:
采用数字电路控制。
用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过10秒(一般情况下,用户不会超过10秒,若用户觉得不便,还可以修改)电路将报警20秒,若电路连续报警三次,电路将锁定键盘2分钟,防止他人的非法操作。
采用数字电路设计的方案好处就是设计简单但控制的准确性和灵活性差。
故不采用。
方案二:
采用一种是用以AT89S51为核心的单片机控制方案。
选用单片机AT89S51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,实现基本的密码锁功能。
在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD1602显示器用于显示作用。
其原理如下图2.1所示:
图1.1单片机控制密码锁原理图
可以看出方案二控制灵活准确性好且保密性强还具有扩展功能,根据现实生活的需要此次设计采用此方案第三章系统硬件设计3.1单片机AT89S51简介AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器,既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
二.硬件电路设计
2.1、元器件简介
2.1.1单片机AT89C51
图2.1AT89C51
AT89C51单片机,其内部带有4KB的掩膜ROM。
无需扩展外部程序存储器。
其中:
CVV:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
P3口也可作为AT89C51的一些特殊功能口:
P3.0RXD(串行输入口);P3.1TXD(串行输出口);P3.2/INT0(外部中断0);P3.3/INT1(外部中断1);P3.4T0(记时器0外部输入);P3.5T1(记时器1外部输入);P3.6/WR(外部数据存储器写选通);P3.7/RD(外部数据存储器读选通)。
RST:
复位输入。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器,不管是否有内部程序存储器。
当/EA端保持高电平时,此间内部程序存储器。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.1.2液晶显示LCD1602基本原理
液晶体
液晶板上排列着若干5×7或5×10点阵的字符显示位,每个显示位可显示
1个字符,从规格上分为每行8、16、20、24、32、40位,有一行、两行及四行
三类。
工作电路
它由KS0066、KS0065及几个电阻电容组成。
KS0065是扩展显示字符用的(例如:
16个字符×1行模块就可不用KS0065,16个字符×2行模块就要用1片KS0065)
接口方面,有8条数据,三条控线。
可与微处理器或微控制相连,通过送入数据和指令,就可使模块正常工作。
2.2、系统总电路图
2.3单元电路的设计
2.3.1单片机最小系统
当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
根据应用的要求,复位操作通常有两种基本形式:
上电复位和开关复位。
(1)手动(开关)复位电路。
图2.3.1手动复位电路
(2)复位后的状态
a、复位后PC值为0000H,表明复位后的程序从0000H开始执行。
b、SP值为07H,表明堆栈底部在07H,一般需要重新设置SP值。
c、P0~P3口值为FFH。
P0~P3口用作输入口时,必须先写入“1”。
单片机在复位后,已使P0~P3口每一端线为“1”,为这些端线用作输入口做好了准备。
(3)WDT溢出将使该引脚输出高电平,所以本设计采用图3.4的手动复位电路:
图2.3.2本设计手动复位电路
AT89S51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见图3.5。
外接石英晶体(或陶瓷谐振器)及电容Cl、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容Cl、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。
如果使用石英晶体,我们推荐电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10F。
用户也可以采用外部时钟。
采用外部时钟的电路如图1所示。
这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
图2.3.3单片机自激震荡电路
由于单片机有内部振荡器,所以本设计采用图3.6的晶振电路:
图2.3.4晶振电路
2.3.2芯片擦除
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89S51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
2.3.3开锁机构
用户通过LCD提示信息,用键盘输入正确密码,从而达到开锁的目的。
当用户输入的密码正确并且是在按下确定键的话,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。
电路驱动和开锁两级组成。
由D5、R1、T10组成驱动电路,其中T10可以选择普通的小功率三极管如9014、9018都可以满足要求。
D5作为开锁的提示;由D6、C24、T11组成。
其中D6、C24是为了消除电磁锁可能产生的反向高电压以及可能产生的电磁干扰。
T11可选用中功率的三极管如8050,电磁锁的选用要视情况而定,但是吸合力要足够且由一定的余量。
在本次设计中,基于节省材料的原则,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁。
图2.3.5密码锁开锁机构电路图
2.3.4键盘设计
本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
4×4矩阵键盘的工作原理
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图5所示。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
扫描原理
把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。
比如说扫描码送入01111111,前面的0111是代表此时扫描第一行P1.0列,而后面的1111是让读取的4行接脚先设为VDD,若此时第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三个bit会由1变成0,这是因为这个按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bit电位拉到0,此即为扫描原理。
由于这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,为了避免让8051误判为多次输入同一按键,
我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。
图3.8为键盘整体模框图:
图2.3.6键盘整体模框图
3.2.5显示电路设计
显示设计采用字符型液晶屏设计,由单片机的p0口控制显示,由p3.3~p3.5控制lcd的控制端口。
三.系统软件设计
3.1系统主流程图
因设计主要是作用汇编语言来开发的51单片机项目程序,所以首先必须有一个可以在WindowsXP或Windowsvista操作系统下执行的汇编语言编译器,本设计采用Keil编译器进行编程,因为它可以支持一系列的51单片机。
图3.1主程序的流程图
3.2键盘扫描及识别子程序
键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。
其程序流程如图3.2所示
3.2.1系统模块密码设置子程序
由于设计是分模块化进行,所以子程序是整体软件系统的组成部分,子程序不但可以使程序化整为零,使其复杂简单化,同时也方便阅读,修改等,每个功能模块都有它自己的子程序,在本设计中是用LCD显示数据,所以就要用到显示子程序,设计中用的是矩阵键盘,所以就用到键盘扫描子程序,例如还有显示初始化子程序、LCD忙检测子程序、关闭状态显示子程序、开锁状态显示子程序、密码输入及修改状态显示子程序、密码输入错误后的提示子程序等。
如下图为密码修改子程序流程图
图3.2.2设置密码子程序
四.总结
使用单片机制作的电子密码锁具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方便等特点。
本文在设计之初认真探讨分析了几种方案的优缺点,正是由于单片机的众多优良特性的吸引,最终从经济实用的角度出发,采用单片机AT89C51作为主控芯片,结合外围的键盘输入、显示、报警、开锁等电路,用汇编语言编写主控芯片的控制程序,设计了一款可以多次更改密码具有报警功能的电子密码锁。
五.参考文献
【1】、《单片机原理及接口技术》胡健机械工业出版社
【2】、《51系列单片机》实验指导书杜礼霞应用技术学院
【3】、《单片机原理与应用及C51程序设计》谢维成杨家国清华大学出版社
【4】、《基于的Proteus51系列单片机设计与仿真》程忠平电子工业出版社
【5】、《物联网技术与应用》武奇生刘盼芝机械工业出版社
六.附录
6.1主程序清单
enbitp3.5;
rsbitp3.3;
displayequp0;
speakerbitp2.6;
ledbitp2.7;
openbitp2.0;
returnbitbit20h.1;
ORG0000h;
LJMPstart;
ORG000bh;
LJMPintermit_t0;
ORG001bh;
LJMPintermit_t1;
ORG0030h;
start:
MOVsp,#60h;
lcallsys_initialization;
main0:
lcallstrat_display;
main:
MOV52h,#0;52h;判断输入错误次数存储地址
setbled;
setbtr0;
lcallkey;
cjnea,#'A',next1;
LJMPset_password;
next1:
cjnea,#'B',next2;
LJMPinput_password;
next2:
ajmpmain;
sys_initialization:
clrled;
clropen;
clrspeaker;
MOV34h,#'1';
MOV35h,#'1';
MOV36h,#'1';
MOV37h,#'1';
MOV38h,#'1';
MOV39h,#'1';;存放初始密码
MOVr7,#12;
MOVr0,#40h;
loop:
MOV@r0,#10h;
incr0;
djnzr7,loop;;密码键值存放区清零完毕
lcalldelay0_1s;
MOVp0,#03h;
callwrite_instruction;;液晶软复位
MOVp0,#01h;
callwrite_instruction;
movp0,#3fh;
callwrite_instruction;
movp0,#0fh;
callwrite_instruction;
movp0,#06h;
callwrite_instruction;;液晶初始化完毕
movr4,#10;
movtmod,#11h;
movth0,#0b0h;
setbea;
setbet0;;定时器t0,0.5s定时中断初始化完毕
ret;;系统初始化完毕
intermit_t0:
pushacc;
pushpsw;
movth0,#3ch;
movtl0,#0b0h;
djnzr4,return;
cplled;
movr4,#10;
return:
poppsw;
popacc;
reti;
intermit_t1:
pushacc;
pushpsw;
movth1,#9eh;
movtl1,#58h;
djnzr4,return_t1;
cplled;
cplspeaker;
movr4,#10;
return_t1:
poppsw;
popacc;
reti;
;;;;;;;;;;;;;;;;;键盘扫描
key:
callks;
jnzk1;
jmpkey;
k1:
calldelay;
callks;
jnzk2;
jmpkey;
k2:
clrtr0;
clrled;
movr2,#0feh;
movr6,#00h;
k3:
mova,r2;
movp1,a;
mova,p1;
jbacc.4,l1;
mova,#0;
LJMPlk;
l1:
jbacc.5,l2;
mova,#4;
ljmplk;
l2:
jbacc.6,l3;
mova,#8;
ljmplk;
l3:
jbacc.7,next_key;
mova,#12;
lk:
adda,r6;
movr6,a;
k4:
callks;
jnzk4;
mova,r6;
movdptr,#table0;
movca,@a+dptr;
mov50h,a;;查表取值存入50H,保护键值
ret;
next_key:
incr6;
mova,r2;
jnbacc.7,key;
rla;
movr2,a;
jmpk3;
;;;;;;;;;;;;
ks:
movp1,#0f0h;
mova,p1;
xrla,#0f0h;
ret;
;;;;;;;;;;;;;;;;;设置密码程序
set_password:
callclear_display;
movdptr,#table4;
callinput_hint;
movr0,#40h;
callpassword;
jbcreturnbit,set_password;;先输入原密码完毕
movr5,#6;
movr0,#40h;
movr1,#34h;
input_compere:
mova,@r0;
xrla,@r1;
jnzinput_error;
incr0;
incr1;
nop;
nop;
djnzr5,input_compere;;验证输入密码完毕
jmpset_password0;
input_error:
setbled;
callclear_display;
movdptr,#table5;
callinput_hint;
calldelay1_5s;
clrspeaker;
clrled;
inc52h;
mova,52h;
cjnea,#3,set_password;
sjmp$;;输入密码错误次数超过3次,锁死
set_password0:
callclear_display;
movdptr,#table2;
callinput_hint;
movr0,#40h;
callpassword;
jbcreturnbit,set_password;;第一次输入新密码完毕
callclear_display;
movdptr,#table3;
callinput_hint;
calldelay1_5s;;显示再次输入新密码完毕
callclear_display;
movdptr,#table4;
callinput_hint;
movr0,#46h;
callpassword;
jbcreturnbit,set_password;;第二次输入新密码完毕
movr5,#6;
movr0,#40h;
movr1,#46h;
set_compere:
mova,@r0;
xrla,@r1;
jnzset_error;
incr0;
incr1;
djnzr5,set_compere;
mov34h,40h;
mov35h,41h;
mov36h,42h;
mov37h,43h;
mov38h,44h;
mov39h,45h;;存入新密码完毕
jmpmain0;;设置新密码成功,返回主程序
set_error:
setbspeaker;
setbled;
callclear_display;
movdptr,#table5;
callinput_hint;
calldelay1_5s;
clrspeaker;
clrled;
ljmpset_password0;;前后两次输入新密码不一致,返回重设
;;;;;;;;;;;;;;;;;输入密码开锁程序
input_password:
callclear_display;
movdptr,#table4;
callinput_hint;
movr0,#40h;
callpassword;
jbcreturnbit,input_password;;输入原密码完毕
movr5,#6;
movr0,#40h;
movr1,#34h;
input_compere0:
mova,@r0;
xrla,@r1;
jnzinput_error22;
incr0;
incr1;
nop;
nop;
djnzr5,input_compere0;;验证输入密码完毕
jmpdisplay_right;
input_error22:
setbspeaker;
setbled;
callclear_display;
movdptr,#table5;
callinput_hint;
calldelay1_5s;
clrspeaker;
clrled;
inc52h;
mova,52h;
cjnea,#3,input_passwor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 电子 密码锁 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)