燕山大学单片机课程设计密码锁.docx
《燕山大学单片机课程设计密码锁.docx》由会员分享,可在线阅读,更多相关《燕山大学单片机课程设计密码锁.docx(26页珍藏版)》请在冰豆网上搜索。
燕山大学单片机课程设计密码锁
第一章引言………………………………………………………………4
第二章设计总说明…………………………………………………………4
2.1设计说明…………………………………………………………4
2.2设计总结构图……………………………………………………6
第3章系统硬件设计……………………………………………………6
3.1矩阵键盘接口电路………………………………………………6
3.2LED显示…………………………………………………………8
3.3报警系统…………………………………………………………9
第四章系统软件设计……………………………………………………9
4.1软件设计思路………………………………………………9
4.2键盘扫描子程序设计………………………………………10
4.3LED显示子程序说明………………………………………11
4.4密码修改比较和报警子程序设计…………………………13
第五章总体设计图…………………………………………………………17
第六章设计程序…………………………………………………………18
第七章系统调试………………………………………………………26
第八章心得体会……………………………………………………………26
参考文献……………………………………………………………………27
第一章引言
单片机也被称微控器,是因为它最早被用在工业控制领域。
单片机是靠程序运行的,并且可以修改。
通过不同的程序实现不同的功能。
这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。
单片机对成本是敏感的,所以目前占统治地位的软件还是最低级汇编语言,它是除了二进制机器码最低级的语言了,既然这么低级为什么还要用呢?
很多高级的语言已经达到了可视化编程的水平为什么不用呢?
原因很简单,就是单片机没有家用计算机那样的CPU,也没有像硬盘那样的海量存储设备。
单片机在硬件资源方面的利用率必须很高才行。
本设计是基于单片机的密码锁设计方案,根据要求,给出单片机密码锁的硬件电路和软件程序,同时给出单片机型号的选择,硬件设计,软件流程图等内容。
第2章设计总说明
2.1设计说明
随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
本次基于8051单片机电子密码锁的设计,其主要具有如下功能:
(1)设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)密码可以由用户自己修改设定(只支持6位密码),锁打开后才能
改密码。
修改密码之前必须再次输入密码。
(3)报警、锁定键盘功能。
密码输入用发光管显示,当连续3次输入错误
密码,系统声光报警。
电子密码锁的设计主要由三部分组成:
4×4矩阵键盘接口电路、密码锁
的控制电路、输出八段显示电路。
另外系统还有LED提示灯等。
密码锁设计的关键问题是实现密码的输入、清除、更改、开锁等功能:
(1)密码输入功能:
按下一个数字键,一个数字就显示在右边的数码管上,同时将先前输入的所有数字向左移动一位。
(2)密码清除功能:
当按下清除键时,清除前面输入的所有值,并清除所有显示
(3)密码更改功能:
将输入的值作为新的密码。
(4)开锁功能:
当按下开锁键,系统将输入与密码进行检查核对,如果确锁打开,否则不打开。
主要的设计实施过程:
首先,选用8051单片机,以及其他电子元器件。
第二步,设计硬件电路。
第三步,编写单片机语言实现功能。
第四部,分别进行软件和硬件的调试。
最后,联合软、硬件调试整个系统,完成本次课程设计。
关键词:
4×4矩阵键盘;8051单片机;密码锁;密码二次确认
2.1设计总结构图
第三章系统硬件设计
此次课程设计基于单片机控制的电子密码锁,接到课题后,根据老师布置的任务和相关要求,结合主要设计条件,我设计了如下方案,其总体方案设计如下:
本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。
系统能完成开锁、超时报警功能。
3.1矩阵键盘接口电路:
此次课程设计采用4*4矩阵键盘,与P1口相连,采用扫描法。
设有0——9十个数字密码,一个修改密码键,一个清除键和一个确认键。
开机显示,等待密码输入,输入6个密码,按确认键后,密码比较。
矩阵式键盘的识别方法:
确定矩阵式键盘上何键被按下介绍一种“行扫描法”。
行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。
判断键盘中有无键按下:
(1)先将行线p1.7-p1.4置0111,然后检测列线的状态。
如果p1.3-p1.0为0111,则k0被按下;如果p1.3-p1.0为1011,则k1被按下;如果p1.3-p1.0为1101,则k2被按下;如果p1.3-p1.0为1110,则k3被按下;
(2)将行线p1.7-p1.4置1011,然后检测列线的状态,方法同
(1);
(3)将行线p1.7-p1.4置1101,然后检测列线的状态,方法同
(1);
(4)将行线p1.7-p1.4置1110,然后检测列线的状态,方法同
(1).
3.2LED显示:
此次课程设计6密码6显示器,按键后即显示,动态显示。
根据按键次数,第一位显示器显示第一次按的密码,第二位显示器显示第二次按的密码,第三位显示器显示第三次按的密码,依此第六位显示器显示第六次按的密码,按键完成后按确认键后,密码对则执行相关动作,不同则显示器清零,等待重新输入。
LED数码显示字形(段)码表如下:
显示字形
字形码(共阳极)
字形码(共阴极)
0
C0H
3FH
1
F9H
06H
2
A4H
5BH
3
B0H
4FH
4
99H
66H
5
92H
6DH
6
82H
7DH
7
F8H
07H
8
80H
7FH
9
90H
6FH
A
88H
77H
B
83H
7CH
C
C6H
39H
D
A1H
5EH
E
86H
79H
F
8EH
71H
3.3报警系统:
此次课程设计,当按键三次错误后,系统报警,报警装置由一扬声器实现,从P1.2口输出脉冲,使扬声器鸣报警。
第四章系统软件设计
4.1软件设计思路
电子密码锁工作的主要过程是通过键盘输入密码,同时LED显示密码输入情况,按下确认键后判断密码的正确性,做出开锁或报警处理。
当输入密码连续三次错误时,系统报警。
密码的的设定在此程序中密码是固定40H~45H中,假设预定密码为“”六位。
在正常状态时,可以进行重新设置密码、上锁等操作。
重新设置密码时,首先验证原始密码,如相同则可进行密码更改,然后将新密码保存至AT24C01中。
按键按其功能分为两种,其中一种为功能键另一种为数字键。
输入密码后,直到所有密码输入完毕按下确认功能键之后,才完成密码输入过程。
进入密码的判断比较处理状态并给出相应的处理过程。
4.2键盘扫描子程序设计
键盘扫描流程如图
键盘扫描子程序如下:
L2:
MOVR3,#0F7H
MOVR1,#00H
L3:
MOVA,R3
MOVP1,A
MOVA,P1
MOVR4,A
SETBC
MOVR5,#04H
L4:
RLCA
JNCKEYIN
INCR1
DJNZR5,L4
CALLDISP
MOVA,R3
SETBC
RRC
MOVR3,A
JCL3
JMPL2
4.3LED显示子程序
LED显示子程序流程图如下
图4-3
LED显示子程序如下:
DISP:
MOVR0,#45H
DISP1:
MOVA,@R0
ADDA,350H
MOVP0,A
CALLDELY
DECR0
MOVA@R0
ADDA,#40H
MOVP0,A
CALLDELY
DECR0
MOVA,@R0
ADDA,#30H
MOVP0,A
CALLDELAY
DECRO
MOVA,@R0
ADDA,@10H
MOVP0,A
CALLDELAY
DECR0
MOVA,@R0
ADDA,#00H
MOVP0,A
CALLDELAY
RET
4.4密码修改比较和报警程序
密码比较流程图如下
图4-4
密码修改与比较程序
SET0:
MOVR1,#65H
MOVR0,#35H
MOVR2,#06H
E1:
MOVA,@R1
MOV@R0,A
DECR1
DECR0
DJNZR2,E1
lcalldelay
lcalldelay
lcalldelay
E2:
LJMPSTART
COMP:
MOVR1,#65H
MOVR0,#35H
MOVR2,#06H
C1:
MOVA,@R1
XRLA,@R0
JNZC3
DECR1
DECR0
DJNZR2,C1
setbP1.0
lcalldelay
lcalldelay
lcalldelay
clrp1.0
MOVR2,#200
C2:
MOVR6,#248
DJNZR6,$
DJNZR2,C2
ljmpSTART
C3:
setbP1.1
lcalldelay
lcalldelay
lcalldelay
clrp1.1
INCR5
MOVA,R5
MOVR5,A
CJNER5,#03H,C4
setbP1.2
lcalldelay
lcalldelay
lcalldelay
clrp1.2
lcallS
C4:
lJMPSTART
end
第五章系统总设计图
系统总图
第6章设计程序
OUTBITequ08002h
OUTSEGequ08004h
INequ08001h
LEDBufequ60h
MOVR7,#10H
MOVR6,#06H
MOVR1,#35H
L1:
MOVA,R7
MOVDPTR,#LEDMAP
MOVCA,@A+DPTR
MOV@R1,A
DECR1
INCR7
DJNZR6,L1
ljmpREADY
LEDMAP:
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
db06h,5bh,4fh,66h,6dh,7dh
Delay:
movr7,#0
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
Ret
DisplayLED:
movr0,#LEDBuf
movr1,#6
movr2,#01h
Loop:
movdptr,#OUTBIT
mova,#0
movx@dptr,a
mova,@r0
movdptr,#OUTSEG
movx@dptr,a
movdptr,#OUTBIT
mova,r2
movx@dptr,a
movr6,#1
callDelay
mova,r2
rla
movr2,a
incr0
djnzr1,Loop
ret
TestKey:
movdptr,#OUTBIT
mova,#0
movx@dptr,a
movdptr,#IN
movxa,@dptr
cpla
anla,#0fh
ret
KeyTable:
db16h,15h,14h,0ffh
db13h,12h,11h,10h
db0dh,0ch,0bh,0ah
db0eh,03h,06h,09h
db0fh,02h,05h,08h
db00h,01h,04h,07h
GetKey:
movdptr,#OUTBIT
movP2,dph
movr0,#Low(IN)
movr1,#b
movr2,#6
KLoop:
mova,r1
cpla
movx@dptr,a
cpla
rra
movr1,a
movxa,@r0
cpla
anla,#0fh
jnzGoon1
djnzr2,KLoop
movr2,#0ffh
sjmpExit
Goon1:
movr1,a
mova,r2
deca
rla
rla
movr2,a
mova,r1
movr1,#4
LoopC:
rrca
jcExit
incr2
djnzr1,LoopC
Exit:
mova,r2
movdptr,#KeyTable
movca,@a+dptr
movr2,a
mova,r2
XRLA,#0eH
jzCOMPARE
MOVA,r2
XRLA,#0cH
jzCLEAN
MOVA,r2
XRLA,#0aH
jzSET1
MOVA,r2
XRLA,#0fH
jzSET2
WaitRelease:
movdptr,#OUTBIT
clra
movx@dptr,a
movr6,#10
callDelay
callTestKey
jnzWaitRelease
mova,r2
ret
READY:
anlp1,#00H
s:
MOVR5,#00H
ABC:
CLRPSW.5
START:
MOVR4,#06H
MOVR0,#60H
CLEAR:
MOV@R0,#00H
INCR0
DJNZR4,CLEAR
movsp,#40h
movLEDBuf+0,#3fh
movLEDBuf+1,#3fh
movLEDBuf+2,#3fh
movLEDBuf+3,#3fh
movLEDBuf+4,#3fh
movLEDBuf+5,#3fh
MLoop:
callDisplayLED
callTestKey
jzMLoop
callGetKey
anla,#0fh
movdptr,#LEDMap
movca,@a+dptr
XCHA,60H
XCHA,61H
XCHA,62H
XCHA,63H
XCHA,64H
XCHA,65H
ljmpMLoop
CLEAN:
ljmpSTART
COMPARE:
LJMPCOMP
SET1:
MOVA,PSW
ANLA,#20H
JZSTART
MOVR1,#65H
MOVR0,#6FH
MOVR2,#06H
E1:
MOVA,@R1
MOV@R0,A
DECR1
DECR0
DJNZR2,E1
SETBP1.3
lcalldelay
LJMPSTART
SET2:
MOVR2,#06H
MOVR1,#60H
MOVR0,#6AH
S1:
MOVA,@R1
XRLA,@R0
JNZS3
INCR0
INCR1
DJNZR2,S1
MOVR2,#06H
MOVR1,#30H
MOVR0,#6AH
S2:
MOVA,@R0
MOV@R1,A
INCR0
INCR1
DJNZR2,S2
CLRP1.3
SETBP1.0
MOVR6,#250
LCALLDELAY
CLRP1.0
ljmpSTART
S3:
setbP1.1
lcalldelay
lcalldelay
lcalldelay
clrp1.1
LJMPSTART
COMP:
MOVR1,#65H
MOVR0,#35H
MOVR2,#06H
C1:
MOVA,@R1
XRLA,@R0
JNZC2
DECR1
DECR0
DJNZR2,C1
setbP1.0
lcalldelay
lcalldelay
lcalldelay
clrp1.0
SETBPSW.5
ljmpSTART
C2:
setbP1.1
CLRPSW.5
lcalldelay
lcalldelay
lcalldelay
clrp1.1
INCR5
MOVA,R5
MOVR5,A
CJNER5,#03H,C3
setbP1.2
lcalldelay
lcalldelay
lcalldelay
clrp1.2
lcallS
C3:
lJMPSTART
End
第七章系统调试
电子密码锁主要由矩阵键盘,LED数码显示器,提示灯,报警电路和单片机程序组成。
调试部分主要是数码显示和程序细节的调试。
数码管调试主要是看其能否完整显示6位数字。
不可以显示只能重新换过。
程序的调试是比较复杂的部分,它又可以分为比较部分和键盘部分。
首先在输入程序时,应该先输入键盘部分,然后单独运行键盘程序看键盘输入时数码管能否显示出与键盘输入的数字相对应的数字。
然后以键盘程序为主程序,把比较部分的程序作为子程序输入。
那是由于键盘程序中我们所输入的数字存在60H-65H显示缓存中只能在键盘程序中被调用,如果把键盘程序作为子程序,那我们在比较部分中要调用显示缓存中的数据便不可行。
密码放在30H-35H,当输入六个数时,程序把数据与密码进行比较,当输入与密码完全匹配时,输入正确,密码锁打开,否则显示红灯,连续三次错误时,蜂鸣器报警。
第八章心得体会
时间过得真快,转眼间,一周的单片机课程设计就结束了。
这是我的第一次课程设计,接到课题后,开始几天我主要看书,跑图书馆,上网查资料。
在图书馆找到了类似的资料,我就开始看程序,然后自己试着去改,但是很不幸在Keil中编译时有一处错误,可是我花了一天多的时间查资料和问同学也没找出哪里出错了。
于是我就另外找其他有关的程序,终于在星期天找到了,接着我边看书边看程序,目的是把程序看懂,然后自己再尝试着去改,经过一天左右的时间,程序差不多看懂了,电路图也画出来了,程序编译也没问题,于是我就把程序下到硬件里面,可是就是不显示,主要是按键不起作用。
我又重新看程序,反复的改,到晚上的时候还是没搞好,就再看书,请教同学,大概又花了两天时间,在同学的提醒下,我终于发现了问题。
主要是按键接的总线没有设定相对应的引脚。
当天晚上,我就改了,终于问题解决了,仿真也成功了!
.当时真的很高兴,毕竟我花了这么多的时间,终于有用了。
然而在生成PCB图时,我又遇到了问题,就是有些元件没封装(如按键),不知道怎么加进去,我又再网上查资料,终于找到怎么加进去的方法,我自己试着弄了一下,成功了,当时真的很兴奋,这样一来,我的课程设计就差不多好了。
我在整个设计过程中懂得了许多东西,当遇到解决不了的问题,跟同伴一起商量、合作,向掌握的好的同学请教,或许能收到事半功倍的效果。
不管学什么,一定要打好基础,并将其学好、学精,但空有知识也不一定就能说明什么,还得能为己所用;还有更重要的是培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,使自己充分体会到了在设计过程中的成功喜悦。
做课程设计不只是对我们知识的考察,也是对学习态度的测验。
经过这段时间的课程设计后,我感觉我学到了不少东西,特别是一些课外的知识,这样的课程设计很有意义,我觉得我们要多做一些这样的课程设计。
唯一的遗憾就是没有亲自动手把实物图做出来。
希望今后能多有这样的课程设计。
参考文献
[1]周润景张丽娜丁莉.基于PROTEUS的电路及单片机设计与仿真(第二版).北京航天航空大学出版社2009.12
[2]李朝清.单片机原理及接口技术(第三版).北京航天航空大学出版社.2006.12
[3]周兴华.手把手教你学单片机.北京航天航空大学出版社.2006.12
[4]张文利.微机原理及单片机接口技术.中国科学技术大学出版社2007.7