基于单片机实现的密码锁控制系统设计.docx
《基于单片机实现的密码锁控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机实现的密码锁控制系统设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于单片机实现的密码锁控制系统设计
基于单片机的密码锁控制
摘要:
本设计提出了一种能防止多次试探密码的基于单片机的密码锁设计方案,根据用户的10条总体要求,给出了该单片机密码锁的硬件电路和软件程序,同时给出了单片机型号的选择、硬件设计、软件流程图、单片机存储单元的分配、汇编语言源程序及详细注释等内容。
关键词:
单片机AT89s51按键扫描输入LED数码管显示
LocksthecontrolbasedontheMicroComputerUnit
Abstract:
Thispaperputsforwardaprojectdesignedtopreventcodesfrombeingstolenfortimes,whichisbasedonthetheoryofcodedlockofMicroComputerUnit.Tosatisfythe10majordemandsfromusers,itgivesthehardwaresanditscircuit,aswellasthesoftwaresanditsprocedure.Moreover,theoptionsofdifferentMicroComputerUnitmodels,thehardwaredesigns,thechartsofsoftwareflows,thedistributionsofMicroComputerUnitstorageunits,somespecificnotesandotherrelativeinformationwillalsobegiven.
Keyword:
MicroComputerUnitAT89s51Pressedkeyscanninginput
LEDdemonstrated
1绪论
随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。
设计本课题时构思了两种方案:
一种是用以AT89s51为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。
考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案
2功能说明
1.电源打开后,显示器显示“0000”,密码由TABLE读取,‘“1234”为内定密码,只要输入此密码便可开门,再按“OPEN”开门键,则门可以打开。
这样可以预防万一停电后再送电时无密码可用。
2.按“清除”,清除密码,显示器显示“0000”。
3.欲更改密码时,先输入新密码再按“更改密码”,既可建立新密码。
4.输入新密码,再按“OPEN”开门键。
若号码与密码相符,则门会打开,否则显示器会清除为“0000”。
5.要显示密码,按住“显示密码”即可显示密码,放开则显示“0000”。
3控制电路
3.1四位数电子密码锁的控制电路分为以下几部分:
*AT89s51单片机
*LED数码管的驱动电路
*LED数码管
*按键输入
*继电器电路及工作灯
3.2结构框架和电路原理图
电路框架与工作原理(如图1所示)如果给单片机上电,电路复位一次,然后它将开始运行键盘扫描,等待输入密码,然后通过74LS47驱动数码管显示密码,输入密码后又确认密码是否正确,如果正确,则绿色的发光二极管发光(持续0.5秒,相当于开锁),如果错误,则红色的发光二极管发光并蜂鸣器发出报警声(持续3秒)。
图1.电路原理图
3.3按键设计
3.3.1键盘设计:
1
2
3
A
4
5
6
B
7
8
9
C
*
0
#
D
3.3.2编码设计
01
02
03
0C
04
05
06
0D
07
08
09
0E
0A
00
0B
0F
4主要元件介绍:
4.1AT89s51简介
AT89S51单片机是标准的40引脚双列直插式集成电路芯片,引脚介绍如下:
VCC:
+5V电源
VSS:
接地
ALE:
地址锁存器控制信号。
在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。
此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。
/PSEN:
外部程序存储器读选通信号。
在读外部ROM时,/PSEN有效(低电平),以实现外部ROM单元的读操作。
/EA:
访问程序存储控制信号。
当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;当/EA信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。
RST:
复位信号。
当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。
XTAL1和XTAL2:
外接晶体引线端。
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
P0口:
P0口为一个8位漏极开路双向I/O口,当作输出口使用时,必须接上拉电阻才能有高电平输出;当作输入口使用时,必须先向电路中的锁存器写入“1”,使FET截止,以避免锁存器为“0”状态时对引脚读入的干扰。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,它不再需要多路转接电路MUX;因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时,同样也需先向其锁存器写“1”,使输出驱动电路的FET截止。
P2口:
P2口电路比P1口电路多了一个多路转接电路MUX,这又正好与P0口一样。
P2口可以作为通用的I/O口使用,这时多路转接电路开关倒向锁丰存器Q端。
P3口:
P3口特点在于,为适应引脚信号第二功能的需要,增加了第二功能控制逻辑。
当作为I/O口使用时,第二功能信号引线应保持高电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。
当输出第二功能信号时,该位应应置“1”,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出。
AT89S51单片机芯片管脚(如图2所示):
图2.AT89S51单片机芯片管脚
4.274LS47--BCD码显示驱动器
74ls47引脚图74ls47管脚(如图3所示):
图3.74ls47引脚图74ls47管脚
真值表(如图4示):
图4.真值表
4.3LED数码管简介
LED数码管也称半导体数码管,是目前数字电路中最常用的显示器件。
它是以发光二极管作笔段并按共阴极方式或共阳极方式连接后封装而成的。
下图所示是两种LED数码管的外形与内部结构,+、-分别表示公共阳极和公共阴极,a~g是7个笔段电极,DP为小数点。
LED数码管型号较多,规格尺寸也各异,显示颜色有红、绿、橙等。
本设计采用四位七段共阳数码管
正面向下看的12个引脚的功能(如图5所示):
1
a
f
2
3
b
e
d
h
c
g
4
图5.七段共阳数码管
4.4另需器件及数量
4脚点触式开关16个
10UF电解电容1个
30PF陶瓷电容2个
12MHZ晶振1个
蜂鸣器1个
三极管4个
电阻:
100Ω7个,470Ω2个,4.7K4个
发光二极管红绿各1个
5电路图设计
密码锁是由一个键盘,一个四位数码管显示器、发光二极管、万能板、晶振、显示驱动器集成电路74LS47、蜂鸣器等组成.本系统是用独立式键盘形式,它运行判别比较快,电路简单,单片机用了12M的晶振,具体电路图(如图6所示):
图6.电路图
6程序流程图
7原程序设计
ORG00H
MOVR7,#00H;延时
DJNZR7,$
MOVR7,#10H;内定密码在TABLE的起始地址
MOVR6,#04H;内定4个密码
MOVR1,#33H;4个密码分别存入30H~33H地址
L1:
MOVA,R7;内定密码取码指针
MOVDPTR,#TABLE;数据指针指到TABLE
MOVCA,@A+DPTR;至TABLE取码
MOV@R1,A;存入33H~30H地址
DECR1;存入下一地址
INCR7;取码指针加1
DJNZR6,L1
START:
ORLP2,#0FFH;清除P2
MOVR4,#04H;清除显示器存放地址40H~43H的内容
MOVR0,#40H
CLEAR:
MOV@R0,#00H
INCR0
DJNZR4,CLEAR
L2:
MOVR3,#0F7H;扫描指针初值(P1.3=0)
MOVR1,#00H;键盘取码指针
L3:
MOVA,R3;扫描指针载入累加器
MOVP1,A;输出至P1扫描
MOVA,P1;读入P1值
MOVR4,A;存入R4,以判断按纽是否放开?
SETBC;C=1
MOVR5,#04H;扫描P1.4~P1.7
L4:
RLCA
JNCKEYIN;有键按下则C=0
INCR1;无键按下则指针加1
DJNZR5,L4
CALLDISP;调用显示子程序
MOVA,R3;载入扫描指针
SETBC;C=1
RRCA;扫描下一行
MOVR3,A;存入扫描指针寄存器
JCL3
JMPL2
KEYIN:
MOVA,R1;是否按"C"
XRLA,#0BH
JZX3;是则显示密码
MOVA,R1;是否按"D"
XRLA,#0FH
JZX4;是则比较密码,正确则开门
MOVR7,#10;消除抖动
D1:
MOVR6,#248
DJNZR6,$
DJNZR7,D1
D2:
MOVA,P1
XRLA,R4;按纽放开否?
JZD2
MOVA,R1;载入按键指针
MOVDPTR,#TABLE;数据指针指到TABLE
MOVCA,@A+DPTR;至TABLE取码
MOVR7,A;取到按键值暂存入R7
XRLA,#0AH;是否按"*"
JZSET0;是则设定新密码
MOVA,R7;载入按键值
XRLA,#0BH;是否按"#"
JZSTART;是则清除
MOVA,R7
XRLA,#0CH;A未设定键
JZL2
MOVA,R7
XRLA,#0DH;B未设定键
JZL2
MOVA,R7;不是则载入按键值
XCHA,40H;现按键值存入(40H)
XCHA,41H;旧(40H)值存入(41H)
XCHA,42H;旧(41H)值存入(42H)
XCHA,43H;旧(42H)值存入(43H)
CALLDISP;调用显示子程序
JMPL2
X3:
JMPDISP2
X4:
JMPCOMP
DISP:
MOVR0,#43H;显示地址指针43H
DISP1:
MOVA,@R0;载入D4显示值
ADDA,#0E0H;加上D4的扫描值
MOVP0,A;输出至P0显示D4
CALLDELAY;扫描延时
DECR0;载入D3显示值
MOVA,@R0
ADDA,#0D0H;加上D3的扫描值
MOVP0,A;输出至P0显示D3
CALLDELAY;扫描延时
DECR0;载入D2显示值
MOVA,@R0
ADDA,#0B0H;加上D2的扫描值
MOVP0,A;输出至P0显示D2
CALLDELAY;扫描延时
DECR0;载入D1显示值
MOVA,@R0
ADDA,#70H;加上D1的扫描值
MOVP0,A;输出至P0显示D1
CALLDELAY;扫描延时
RET
SET0:
MOVR2,#04H;4个密码
MOVR0,#40H;按键显示地址
MOVR1,#30H;密码存放地址
E1:
MOVA,@R0;40H存入30H……43H存入33H
XCHA,@R1
INCR0
INCR1
DJNZR2,E1
CALLDELAY;延时
E2:
JMPSTART
COMP:
MOVR1,#43H;按键显示地址
MOVR0,#33H;密码存放地址
MOVR2,#04H;4个密码
C1:
MOVA,@R1;按键值与密码值比较
XRLA,@R0
JNZC4;不同则清除
DECR1;相同则比较下一个码
DECR0
DJNZR2,C1
CLRP2.0;绿灯亮(令电锁动作)
MOVR7,#5
C2:
MOVR2,#200;延时0.5S
C3:
MOVR6,#248
DJNZR6,$
DJNZR2,C3
DJNZR7,C2
JMPSTART
C4:
CLRP2.2;红灯亮(密码错误)
CLRP2.5;报警
MOVR7,#30
C5:
MOVR2,#200
C6:
MOVR6,#248
DJNZR6,$
DJNZR2,C6
DJNZR7,C5
JMPSTART
DISP2:
;欲显示密码值
MOVR0,#33H;密码存放地址
CALLDISP1;调用显示子程序
MOVA,P1;"C"放开否?
没有则继续显示
XRLA,R4
JZDISP2;是则清除
CALLDELAY
JMPSTART
DELAY:
MOVR7,#04;显示器扫描时间
D3:
MOVR6,#248
DJNZR6,$
DJNZR7,D3
RET
ORG300H
TABLE:
DB01H,02H,03H,0CH;键盘值
DB04H,05H,06H,0DH
DB07H,08H,09H,0EH
DB0AH,00H,0BH,0FH
DB01H,02H,03H,04H;内定密码值
END
8检测与调试
硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试是在用户系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步加电检测。
给板加电,检测所有插座或是器件的电源端是否符合要求的值
第四步是联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
9结语
经过数月的努力,基于单片机的密码锁终于完成了。
感触很多,经历了一次次的失败,但是没有放弃。
通过多方的查证,从中学到了很多以前书本上没有的知识。
充实了自己,为以后的工作打下了基础。
软件是我的强项,硬件的焊接稍弱一些,但是通过这次的毕业设计,自己的全程参与,感觉到了自己的能力得到了全面的发挥,受益匪浅。
这次通过单片机密码锁的制作,给我最大的体会是对一个程序整体的把握和控制,只有将子程序有效的结合起来,才能完成设计的目的。
另外,在程序的调试过程中,我也遇到了很多意想不到的困难,在老师的帮助和自己的不懈努力下,我才能完成我的作品。
致谢
感谢宋老师的耐心指导和同学的全力配合,让我从毕业设计中真正学到了东西,我相信对我以后的工作来说受益无穷,虽然经历了很多坎坷,但都一一克服了,我想这也是对心理上的一次考验,已经超出了做一件成品的意义。
无论以后的工作还是生活都是受用的。
参考文献
[1] 张毅刚.单片机原理及应用.北京:
北京高等教育出版社2006年
[2]李光飞.单片机课程设计实例指导(第2版)北京:
北京航空航天出版社1997年
[3] 张友德、赵志英、涂时亮.单片微型机原理、应用与实验.(第五版)上海:
复旦大学出版社2006年
[4] 公茂法、马宝甫.单片机人机接口实例集.北京:
北京航空航天出版社1998年
本文是通过网络收集,如有侵权请告知,我会第一时间处理。