单片机实训密码锁.docx
- 文档编号:13615300
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:15
- 大小:143.41KB
单片机实训密码锁.docx
《单片机实训密码锁.docx》由会员分享,可在线阅读,更多相关《单片机实训密码锁.docx(15页珍藏版)》请在冰点文库上搜索。
单片机实训密码锁
单片机实训—密码锁
一.实验要求
利用AT89C51单片机设计并制作电子密码锁电路。
1.用5个按键实现“密码锁”所有操作,用3个发光管作为“密码锁”状态的显示,其中一个专门用于“锁”的开/关状态,例如点亮时表示锁打开,不亮时表示出于锁定状态;
2.通过数日正确的密码才能把锁打开;
3锁的主人能随意修改锁密码;
4具有防试输入密码措施,如连续3次密码输入错误,则所有按键功能失效
二.设计方案
窗体底端
(一)初步设计构思
1、功能设计:
(1)密码锁首先应具有输入正确密码就可以开锁的功能:
这也是最近本的功能,设计中运用软件先设置初始密码,在用硬件输入密码,通过软件与初始密码进行比较,正确后开锁。
这里主要是对程序编写的要求。
(2)密码锁的修改密码功能:
在现实生活中,从用户的角度来考虑,有时需要对初始密码进行自主的修改,所以对于密码锁的此功能是必不可少的。
此功能可以运用软件对初始的密码进行修改保存即可实现。
(3)防止恶意试输密码(防盗)功能:
此功能在现实运用中也是必不可少的,从用户安全的角度来说,对密码输入错误次数进行限制,即在连续输入3次错误密码后将会自锁一段时间,才能重新输入密码。
当然也可以从密码的位数上来考虑,增加密码的位数。
由于从所给按键才5个上来考虑,用5位密码就有5*5*5*5*5=3125种密码,即可达到要求。
且用五个键输入,使操作简单。
2、硬件设计:
因为给予的硬件器材较少,所以设计以基本功能为方向,对于单片机来说,最小系统基本上是一种固定的模式,需要设计的就是合理分配单片机的资源,分配、确定输入输出端口用途,从AT89S51单片机的性能上来考虑,由于P2口内部也有上拉电阻,就不需要在接,为了简化电路和节省成本,把按键接在此I/O口上。
由于设计所需要运用的I/O口比较少,为了焊接方便,从单片机两侧来接输入输出,即输出采用P1口,由于单片机在没有指令时,P1口输出的是高电平,所以LED的负极应接在P1口上。
该密码锁以单片机AT89S51作为核心控制部分,4只发光二极管代表各种以工作状态,例如:
开锁、输入密码、修改密码等。
选用5个按键作为输入。
并以单片机1脚朝前的方向为正,从上至下,依次编号为1、2、3、4、5键。
所有按键均有对应的数字输入和第二功能,具体操作在操作说明书中有详细介绍。
其电路的外围有4个电阻,3个510欧的作为放光二极管的限流电阻,1个10K的与复位端相连接地。
有3个电容,1个25V/10uF的与复位端相连接电源,和10K的电阻共同构成复位电路;2个30pF的与12MHz的晶振构成单片机的最小单元电路。
电源由一个单孔插座接入。
3、软件设计:
首先画出程序的流程图,这是一个很重要的过程对于整个设计来说,为了使程序在实现功能的情况下简短一些,大部分地方采用子程序调用的方法。
对于密码输入和比较采用寄存器间接寻址的方式来实现。
在设计上,密码锁首先处于锁住的状态,密码输入正确后才能进行开锁和修改密码的功能,密码输入错误才会进入自锁状态,依此顺序来对程序的结构进行设计。
然后就是程序的编写,包括主程序和子程序,为了能充分利用按键,均采用查询的方式来写程序。
由于一些指令的跳转范围有限,所以多采用子程序来缩小距离。
二、设计原理
(一)、电路图:
(二)硬件原理
1、单片机性能及工作原理:
(1)I/O口作输出口时带负载的能力,即高电平时所能输出的最大电流,或低电平时允许灌入的最大电流,以及高阻态时所能承受的最高电压。
原则上输出口所接负载的电流消耗不能超过输出口允许进出的最大电流值。
(2)单片机就如一个小型的计算机,是靠指令的运行来实现各种功能的,程序的写入就会需要内存的定义,所以在写程序时应注意一些特殊的单元和一些指令的执行范围。
2、其他元件的功能和作用:
(1)电阻:
此电路中共有4个电阻,电阻的作用很多,例如:
取样、限流、降压、偏置、调节时间常数等功能,是一个最常见和适用的电子元器件,也是线性特性最好的线性元件。
在本电路中,有3个510欧的电阻,起限流的作用,从单片机的性能要求上来考虑,当单片机接负载时需要限制其电流的输出。
有1个10K的电阻,其接在复位电路上,主要是为和其接在一起的电容提供放电回路。
(2)电容:
此电路中有3个电容,其也是一种常见的电子元器件。
2个30pF电容与晶振连在一起构成单片机的最小系统电路,有1个10uF的与电阻一起构成单片机的复位电路。
(3)按键:
在此按键主要是用于输入适用,由于按键只有5只,所以本设计对其都采用复用的方式,即每一个按键除了有对应数字的输入功能外还具有其他的功能,1键为确认、2键为修改密码、3键为开锁、4键为输入密码、5键为复位。
分别接在P2.0—P2.4上。
(4)发光二极管:
作为指示的作用,利用其的各种发光状态来代表密码锁处于什么状态,详细介绍见功能表。
3个发光二极管分别接在P1.0—P1.2上。
(三)软件原理
1.软件设计思路
(1)结合功能设计和硬件设计,确定那些功能应由软件完成。
(2)做出总体规划设计,明确软件要实现的功能,分那些步骤、按什么顺序来实现设计的功能,画出程序的流程图。
(3)根据完整的流程图,编写程序。
(4)对程序进行单元式的调试,即对每一个功能的调试。
(5)利用仿真软件程序进行仿真调试,直到所有功能实现为止。
(6)用编程器把正确的程序编入单片机。
2.软件的的总体功能
(1)赋初值:
对密码进行初始设定、计数次数的设定。
(2)比较:
将由按键输入的密码与初始密码(设定的密码)进行足位比较。
(3)延时:
设定自锁时间、对按键进行消抖、发光二极管的闪烁频率。
(4)修改:
把修改后的新密码进行自动保存,并赋给相应的单元,作为重新设定的密码。
(5)总的来说:
可以实现密码锁的开锁、防止恶意试输密码、修改密码的功能。
3、流程图
三.程序清单
ORG0000H
MOV20H,#1
MOV21H,#2
MOV22H,#3
MOV23H,#4
MOV24H,#5
MOVP0,#11111111B
MOVP1,#11111110B
MAIN:
MOVR6,#3
L0:
MOVR2,#0
MOVR1,#30H
JBP2.1,$;按键4输入密码
SETBP1.0;LED闪动1下
ACALLDEY5s
CLRP1.0
ACALLDEY5s
SETBP1.0
L1:
JBP2.4,L2
MOV@R1,#1
INCR1
INCR2
CLRP1.1
ACALLDEY5s
SETBP1.1
AJMPKEY
L2:
JBP2.3,L3
MOV@R1,#2
INCR1
INCR2
CLRP1.1
ACALLDEY5s
SETBP1.1
AJMPKEY
L3:
JBP2.2,L4
MOV@R1,#3
INCR1
INCR2
CLRP1.1
ACALLDEY5s
SETBP1.1
AJMPKEY
L4:
JBP2.1,L5
MOV@R1,#4
INCR1
INCR2
CLRP1.1
ACALLDEY5s
SETBP1.1
AJMPKEY
L5:
JBP2.0,KEY
MOV@R1,#5
INCR1
INCR2
CLRP1.1
LCALLDEY5s
SETBP1.1
AJMPKEY
KEY:
CJNER2,#5,L1;判断是否输入5个密码
LCALLDEY5s
CLRP1.0;第二功能输入
SETBP1.1
JBP2.4,$;按1确定密码
SETBP2.4
MOVR0,#30H;密码比较
MOVA,@R0
CJNEA,20H,KEY1
INCR0
MOVA,@R0
CJNEA,21H,KEY1
INCR0
MOVA,@R0
CJNEA,22H,KEY1
INCR0
MOVA,@R0
CJNEA,23H,KEY1
INCR0
MOVA,@R0
CJNEA,24H,KEY1
CLRP1.1
AJ0:
JBP2.3,AJ1;按键2修改密码功能
SETBP1.0;数字输入功能
ACALLLED2
A0:
MOVR2,#00
MOVR1,#20H
A1:
JBP2.4,A2
MOV@R1,#1
INCR1
INCR2
CLRP1.1
ACALLDEY5s
SETBP1.1
AJMPAEY
A2:
JBP2.3,A3
MOV@R1,#2
INCR1
INCR2
CLRP1.1
ACALLDEY5s
SETBP1.1
AJMPAEY
A3:
JBP2.2,A4
MOV@R1,#3
INCR1
INCR2
CLRP1.1
ACALLDEY5s
SETBP1.1
AJMPAEY
A4:
JBP2.1,A5
MOV@R1,#4
INCR1
INCR2
CLRP1.1
ACALLDEY5s
SETBP1.1
AJMPAEY
A5:
JBP2.0,A1
MOV@R1,#5
INCR1
INCR2
CLRP1.1
ACALLDEY5s
SETBP1.1
AJMPAEY
AEY:
CJNER2,#5,A1;判断修改是否输入完整
CLRP1.0
SETBP1.1
ACALLFW
AJMPMAIN
KEY1:
CLRP1.2
ACALLDEY5s
SETBP1.2
DJNZR6,L;判断输入次数
CLRP1.1
CLRP1.2
ACALLDEY100
SETBP1.1
MOVR6,#3
L:
AJMPL0
AJ1:
JBP2.2,AJ0;按键开锁
ACALLOPEN
AJMPMAIN
LED2:
SETBP1.1;闪2下子程序
ACALLDEY5s
CLRP1.1
ACALLDEY5s
SETBP1.1
ACALLDEY5s
CLRP1.1
RET
DEY5s:
MOVR3,#5;延时0.5秒
D1:
MOVR4,#100
D2:
MOVR5,#248
D3:
DJNZR5,D3
NOP
DJNZR4,D2
DJNZR3,D1
RET
OPEN:
CLRP1.2;开锁
SETBP1.1
JBP2.0,$
ACALLFW
SETBP2.0
SETBP1.2
RET
FW:
CLRP1.1
SETBP1.1
RET
DEY5:
MOVR3,#50;延时5秒
X1:
MOVR4,#100
X2:
MOVR5,#248
X3:
DJNZR5,X3
NOP
DJNZR4,X2
DJNZR3,X1
SETBP1.2
RET
DEY100:
MOVR7,#5;延时30秒
X4:
MOVR3,#100
X5:
MOVR4,#100
X6:
MOVR5,#248
X7:
DJNZR5,X7
NOP
DJNZR4,X6
DJNZR3,X5
DJNZR7,X4
SETBP1.2
RET
END
四.程序的执行和工作过程
1、设定密码为1、2、3、4、5,保存在20H—24H单元,点亮P1.0(LED1),给计数寄存器R2、R6赋初值;2、查询按键4按下后,查询密码输入,并用寄存器间接寻址的方式把密码依次存入30H—34H单元,查询P2.4(键1)按下后,把30H—34H单元和20H—24H单元所存的数据进行足位顺序比较;3、如果密码输入错误,跳转到KEY1,LED3闪一下,并对错误输入密码次数进行计数,如果小于3次,可以重新输入密码,大等于3次,将自锁30s的时间;4、如果密码输入正确,将循环查询P2.3(键2)和P2.2(键3):
(1)如果P2.3为低电平,将对初始密码进行修改,并保存在20H—24H单元,并将复位到密码输入状态;
(2)如果P2.2为低电平,将把P1.2(开锁指示)置为低电平,查询P2.0(键5)为低电平后,将复位到密码输入状态。
四.制作调试
(一)调试过程
1、软件:
(1)对每一个功能单元进行逻辑调试;
(2)对整体程序进行逻辑调试;(3)载入仿真电路上观察功能实现的情况;(4)对出现的问题加以解决。
2、硬件:
(1)在仿真软件上进行软件和电路搭配的调试;
(2)把软件编入单片机后,在实际电路中进行调试,首先,检查每一个焊点的连接情况,然后,检查单片机是否能正常工作,最后,检查功能实现的具体情况;(3)对每一步调试出的问题,找出解决办法。
(二)调试结果通过对软件和硬件的足步检查调试,找出问题,然后解决问题,最终在软件和硬件上都得到了所设计功能的实现,按键灵敏度良好,功能准确,延时准确,过程的表示比较明确。
与预先设想比较吻合。
(三)出现的问题和解决方法1、按键消抖:
在实现按键消抖的过程中,由于延时过长,导致了按键灵敏度不够,出现按下去没有作用的问题,于是便把消抖的时间缩短,但是又出现了按一次会相当于两次的问题。
最终是通过对延时消抖时间的折中考虑,这一问题才得以解决。
2、硬件调试过程中发现上电后单片机有小段时间不稳定,灯忽闪忽灭,经过仔细检查焊接点和接入复位开关电流后得以解决。
3、操作不够简单明了,原本5键复位有3秒延时,经老师指出不妥的地方修正了程序中5键的延时和多余的功能,使之更贴近用户。
4、经老师建议,可以加入密码修改2次确认功能,但时间较少,只做了下构思,即在修改密码程序中先将第一次输入的密码保存至40-44H单元中然后再和第二次输入的密码保存至46-50H,然后再调用比较保存.
五.使用说明书及功能表
功能表:
按键号
功能
1
(1)密码1的输入;
(2)确认
2
(1)密码2的输入;
(2)修改密码
3
(1)密码3的输入;
(2)开锁
4
(1)密码4的输入;
(2)输入密码
5
(1)密码5的输入;
(2)确认关锁
LED灯状态表示
按键号
状态
功能
LED1
(1)常亮
(2)熄灭
按键为第二功能使用
按键为密码1输入使用
LED2
(1)常亮
(2)闪一下
密码输入正确提示
输入密码一位
LED3
(1)常亮
(2)熄灭
密码锁处于开锁状态
密码锁处于关锁状态
全部灯
(1)常亮
密码锁处于复位中或者
多次输入错误的保护状态
使用说明书:
(1)开锁:
上电按4键输入密码---》输入正确密码(输入一位LED2闪动一下)---》输完密码(LED1点亮)---》按确认1键密码正确(LED2常亮)---》按开锁3键开锁(LED3点亮)---》按5键关锁(LED1、LED2、LED3点亮一段时间熄灭)
(2)修改密码:
上电按1键输入密码(LED1熄灭)---》输入正确密码(输入一位LED2闪动一下)---》输完密码(LED1点亮)按确认键密码正确(LED2点亮)按修改密码键(LED1熄灭)输入新密码(输入一位LED2闪动一下)---》输完密码(LED1点亮)
(3)自锁:
上电按输入密码(LED1熄灭)---》输入错误密码(输入一位LED2闪动一下)---》输完密码(LED1点亮)按确认键---》密码错误(LED3闪动一下)---》重新输入密码(出现3次错误)---》自锁30s(所有灯点亮30s)自动复位
六.收获和心得体会
这次的课程设计虽然重点在于单片机的应用及用汇编语言来编写程序,也就是单片机课程设计,但在这十天的设计中,过程可分为三步,第一是方案的确定,包括功能设计、制作流程图。
流程图要制作的功能齐全但又简单明了,便于程序写作.
第二是软件和硬件的设计,对于单片机的应用来说,这两部分是不可分割的,不同的程序对应不同的硬件电路。
这一步是这次课程设计的重点所在,但是对于做好流程图的前提来说,其花费不了太多的时间。
对照流程图来写程序是非常方便的,这是我这次设计的深切感受,但是一次写这么大的程序难免出错,比如数字0写成字母o,符号@打成符号#,英文main打成mian等等,刚开始的时候能发现一些程序的结构错误但很难发现这些错误,只能一句一句找错,十分困难。
第三是调试过程,这是一个充满希望和失望的过程。
调试就是检验整个设计,当然在这次课程设计中分为两个部分,硬件和软件,硬件部分经过检查和改进,就能稳定工作。
单片机是整个设计的核心部分,软件又是单片机工作的必要条件,所以,软件的设计就显得比较重要,调试过程也比较复杂,必须按照从小到大的顺序来进行,也就是挨个功能的实现,利用仿真软件来对其初步验证,再到实际电路中进行调试。
这次的课程设计我最大的收获就是对设计过程的流程认识,基本上所有的设计都是从整体分析——结构划分(单元设计)——整体分析,也就是在考虑全局设计要求,明白设计目的的基础上,把设计分为一些单独的单元来进行设计,完成后,再和在一起进行全局考虑分析,最终完成设计,感谢胡老师的细心指导!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 密码锁