基于单片机实现的电子密码锁课程设计毕业设计.docx
《基于单片机实现的电子密码锁课程设计毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机实现的电子密码锁课程设计毕业设计.docx(25页珍藏版)》请在冰豆网上搜索。
![基于单片机实现的电子密码锁课程设计毕业设计.docx](https://file1.bdocx.com/fileroot1/2023-6/23/dbc83261-be40-4820-af49-9a0b8a8a8bab/dbc83261-be40-4820-af49-9a0b8a8a8bab1.gif)
基于单片机实现的电子密码锁课程设计毕业设计
目录:
一、系统总体方案设计………………………………………………….1
二、硬件电路设计…………………………………………………….3
2.1键盘电路设计……………………………………………………….3
2.2LED显示电路………………………………………………………….4
2.3开锁电路…………………………………………………………….6
2.4报警电路……………………………………………………………….6
三、软件设计思路…………………………………………………….7
四、系统调试……………………………………………………………。
五、心得体会……………………………………………………………9
六、参考文献……………………………………………………………9
附录……………………………………………………………………
1、硬件原理图………………………………………………………10
2、源程序清单……………………………………………………………。
实验要求及主要功能:
本次设计使用STC89C52实现一基于单片机的电子密码锁的设计,要求如下:
(1)允许用户设定密码,设定密码时数码管上显示“—”;
(2)当用户输入密码时,输入的数字在数码管上依次显示(密码为8位,0—F)
(3)若密码正确,灯亮。
(4)若密码不正确,则蜂鸣器鸣叫。
若密码输入错误次数超过3次,蜂鸣器不再鸣叫且锁定键盘。
电子密码锁的设计主要由三部分组成:
4×4矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路。
另外系统还有LED提示灯,报警蜂鸣器等。
密码锁设计的关键问题是实现密码的输入、清除、更改、开锁等功能:
(1)密码输入功能:
按下一个数字键,相应键值就显示在最右边的数码管上,同时将先前输入键值向左移动一位。
(2)密码清除功能:
当按下清除键时,清除前面输入键值。
(3)开锁功能:
当按下开锁键,系统将输入与密码进行检查核对,如果正确锁打开,用发光二极管亮表示;否则不打开,蜂鸣器鸣叫
(4)密码设置功能:
当密码输入正确时,检查设置键是否按下,若按下则允许用户设置密码,否则结束。
若密码错误时按下设置键则有操作错误提醒。
(5)设置密码保存功能:
当用户设置完新密码后,密码变为新密码。
一、系统方案设计
采用一种是用以为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。
其原理如图1-2所示。
89S51
单片机
输入错误锁定键盘
矩阵
键盘
控制
延时报警控制电路
开锁控制电路
AT24C02掉电存储
指示电路
串口显示电路
图1-2单片机控制方案
单片机不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,本方案采用一种是用以STC89C51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密
码锁功能。
初步设计思路如下:
输入密码用5*4矩形键盘,包括数字键和功能键。
前四行用作数字键,最后一行为功能键,分别为”CLR”清除键,”ENTER”比较键,”SET”设置键,”SAVE”保存键
LED数码管显示输入密码,用74LS245驱动数码管发光显示数码。
用发光二极管代替开锁的电路,发光表示开锁。
输入密码错误次数超过3次,键盘锁死。
打开电源后,设原始密码为“12345678”,只要输入此密码便了开门。
这样可预防停电后再来电时无密码可用。
欲重新设定密码,先输入正确密码,按设置键,输入键值后按保存键。
输入密码,再按“enter”键。
若密码与设定密码相同,则开门。
否则蜂鸣器鸣叫。
软件的设计主要包括键盘键值的读取,LED显示程序,密码比较程序,设置密码程序和报警程序。
二、硬件电路设计
2.1键盘电路设计
使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
其原理如图3.1。
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就要识别哪一个按键按下。
对键的识别通常有两种方法:
一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。
逐行扫描法如下:
对照图3.1所示的5×4键盘,此处用逐行扫描查询法,具体方法如下:
给P1口赋值为0FH,P3.4置零,先将列线即低四位置0,行线即高四位置1,逐行扫描,当有按键按下时高四位一定有一个被拉为0.通过这个判断是不是有按键按下。
然后给P1口赋值为0F0H,P3.4置1,将列线即低四位置1,行线即高四位置0,,逐列扫描来判断是哪个键按下。
通过行号和列号我们得到键值,键值=行号*4+列号,并将键值存入一变量地址中。
。
图3.1矩阵键盘
具体的功能设计如表3.1:
表3.1按键功能
按键
键名
功能说明
1-F键
数字键
输入密码
SET键
重设密码键
设定新密码
ENTER键
确定键
比较密码
CLR键
清除键
使显示器清零
SAVE键
保存键
保存输入新密码
2.2LED显示电路
本系统设计的显示电路是为了给使用者以提示而设置的。
本系统的显示采用串行显示的方式,只使用单片机的一个串行口,利用74LS245驱动数码管发光显示数码,就可以完成单片机的显示功能,显示电路的电路原理图如图3.2所示。
用P0.0—P0.7接74LS245的A0-A7端口,74LS245的输出口接LED的七段显示;而P1.0—P1.7接LED的位显示。
通过软件实现数字和位控制,对数码管进行动态扫描,并将键值循环左移。
图3.2LED显示电路
用74LS245可以驱动数码管。
74LS247的逻辑功能表如表3.2:
表3.274LS245的逻辑功能表
2.3掉电存储电路
用AT24C02进行掉电存储,以防关闭电源后用户设置的密码丢失
其功能是一个2K位串行CMOSE2PROM,内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。
AT24C02有一个16字节页写缓冲器。
该器件通过IC总线接口进行操作,有一个专门的写保护功能,通过此电路设计用户可保存自己已设的密码不丢失,否则关闭电源后密码变为初始密码。
2.4开锁电路
在本次设计中,基于节省材料的原则,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁。
电路图如3.3所示。
当P3.1口输出高电平时,二极管发光,表示开锁。
图3.3开锁电路
2.5报警电路
报警模块由蜂鸣器和单片机组成。
选择一只压电式蜂鸣器,压电式蜂鸣器工作时约需要100mA驱动电流。
蜂鸣器电路如图3.4所示。
当STC89C52的P3.0口输出为高电平时,蜂鸣器产生蜂鸣音,STC89C52输出为低电平时,蜂鸣器不发声。
这样在密码错误时即会报警。
图3.4报警电路
三、软件设计思路
电子密码锁工作的主要过程是LED数码管提示开始输入密码,通过键盘输入密码,同时LED显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。
当输入密码连续输入错误3次时,键盘锁死。
密码的设定,在此程序中用户输入的密码是固定40H—47H中,初始密码放在38H-3FH中,假设预设的密码为"12345678"共8位密码。
由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。
在输入过程中,根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕按下“enter”键,才能完成密码的输入过程。
进入密码的判断比较处理状态并给出相应的处理过程。
若密码正确,用户可自行设计密码,否则报警,设置后,按下保存键,然后新设密码可保存于初始密码地址中。
下次新输入密码即与新设密码相比。
在比较过程中若密码连续错误三次,则键盘锁死,不允许用户输入。
在此过程中,数码管一直处于动态扫描中,故总的程序流程图如下:
总程序流程图:
是
四、系统调试:
进行调试时,出现的主要问题是虚焊,因为电路板做在了一块板上所以PCB比较密集,刚腐蚀完的时候线路有部分断路和短路
五、心得体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整五星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。
附录:
1、硬件原理图
总程序清单:
LED_BIT_1EQU30H
LED_BIT_2EQU31H
LED_BIT_3EQU32H
LED_BIT_4EQU33H
LED_BIT_5EQU34H
LED_BIT_6EQU35H
LED_BIT_7EQU36H
LED_BIT_8EQU37H
;以下8个字节存放初始密码
WORD_1EQU38H
WORD_2EQU39H
WORD_3EQU3AH
WORD_4EQU3BH
WORD_5EQU3CH
WORD_6EQU3DH
WORD_7EQU3EH
WORD_8EQU3FH
;以下8个字节存放用户输入的8位密码
KEY_1EQU40H
KEY_2EQU41H
KEY_3EQU42H
KEY_4EQU43H
KEY_5EQU44H
KEY_6EQU45H
KEY_7EQU46H
KEY_8EQU47H
;*******************************************************
CNT_AEQU48H
CNT_BEQU49H
KEY_CNTEQU4AH;已输出的密码位数
LINEEQU4BH;按键行号
ROWEQU4CH;按键列号
VALEQU4DH;键值
CHANGEEQU20H.0
SOLVEEQU21H.0
;*********************************************************
;以下为初始化程序,包括数据存储空间初始化,设置初始密码
ORG0000H
SJMPMAIN
ORG000BH
LJMPINT_T0
MAIN:
MOVSP,#60H
MOVWORD_1,#8;初始密码12345678
MOVWORD_2,#7
MOVWORD_3,#6
MOVWORD_4,#5
MOVWORD_5,#4
MOVWORD_6,#3
MOVWORD_7,#2
MOVWORD_8,#1
START:
MOVCNT_A,#00H;程序初始化
MOVCNT_B,#00H
MOVKEY_CNT,#00H
MOVLINE,#00H
MOVROW,#00H
MOVVAL,#00H
CLRP3.5;蜂鸣器
CLRP3.7;二极管
MOVLED_BIT_1,#00H;消隐
MOVLED_BIT_2,#00H
MOVLED_BIT_3,#00H
MOVLED_BIT_4,#00H
MOVLED_BIT_5,#00H
MOVLED_BIT_6,#00H
MOVLED_BIT_7,#00H
MOVLED_BIT_8,#00H
MOVKEY_1,#00H;输入密码存储区清零
MOVKEY_2,#00H
MOVKEY_3,#00H
MOVKEY_4,#00H
MOVKEY_5,#00H
MOVKEY_6,#00H
MOVKEY_7,#00H
MOVKEY_8,#00H
MOVTMOD,#01H
MOVTH0,#0FDH;(65535-700)/256
MOVTL0,#00H
MOVIE,#82H;SETBTR0SETBET0SETBEA
A0:
LCALLDISP
;以下为键盘扫描程序,计算键值并存入VAL
LSCAN:
MOVP1,#0FH;扫描行码
CLRP3.4
L1:
JNBP1.7,L2
LCALLDLY_S
JNBP1.7,L2
MOVLINE,#00H
LJMPRSCAN
L2:
JNBP1.6,L3
LCALLDLY_S
JNBP1.6,L3
MOVLINE,#01H
LJMPRSCAN
L3:
JNBP1.5,L4
LCALLDLY_S
JNBP1.5,L4
MOVLINE,#02H
LJMPRSCAN
L4:
JNBP1.4,L5
LCALLDLY_S
JNBP1.4,L5
MOVLINE,#03H
LJMPRSCAN
L5:
JNBP3.4,A0
LCALLDLY_S
JNBP3.4,A0
MOVLINE,#04H
RSCAN:
MOVP1,#0F0H;扫描列码
SETBP3.4
C1:
JNBP1.3,C2
MOVROW,#00H
LJMPCALCU
C2:
JNBP1.2,C3
MOVROW,#01H
LJMPCALCU
C3:
JNBP1.1,C4
MOVROW,#02H
LJMPCALCU
C4:
JNBP1.0,C1
MOVROW,#03H
CALCU:
MOVA,LINE;计算键值
MOVB,#04H
MULAB
ADDA,ROW
MOVVAL,A
;********************************************************
;以下为按键处理程序,对不同的按键做出响应
CJNEA,#10H,J1;是否为"CLR"键
MOVR1,KEY_CNT
CJNER1,#00H,J2
LCALLALARM_1
LJMPSTART
J2:
LCALLSHIFTR
DECKEY_CNT
W00:
LCALLDISP;等待按键抬起
JBP3.4,W01
LJMPA0
W01:
MOVA,P1
CJNEA,#0F0H,W02
LJMPA0
W02:
SJMPW00
J1:
MOVA,VAL
CJNEA,#11H,SETK;判断是否为"ENTER"键
MOVR1,KEY_CNT
CJNER1,#08H,J4
JNBCHANGE,NEXT3
MOVWORD_1,28H
MOVWORD_2,29H
MOVWORD_3,2AH
MOVWORD_4,2BH
MOVWORD_5,2CH
MOVWORD_6,2DH
MOVWORD_7,2EH
MOVWORD_8,2FH
NEXT3:
MOVA,WORD_1;比较密码
CJNEA,40H,J5
MOVA,WORD_2
CJNEA,41H,J5
MOVA,WORD_3
CJNEA,42H,J5
MOVA,WORD_4
CJNEA,43H,J5
MOVA,WORD_5
CJNEA,44H,J5
MOVA,WORD_6
CJNEA,45H,J5
MOVA,WORD_7
CJNEA,46H,J5
MOVA,WORD_8
CJNEA,47H,J5
SETBP3.7
LCALLDLY_L
SETBSOLVE
MOVR0,#00H
LJMPSTART
J5:
LCALLALARM_2
LJMPSTART
J4:
LCALLALARM_1
LJMPSTART
LCALLALARM_1
LJMPSTART
SETK:
CJNEA,#12H,SAVEK;设置键
MOVR1,KEY_CNT
CJNER1,#00H,WRONG1
JBSOLVE,STORE
LCALLALARM_1
LJMPSTART
WRONG1:
LCALLALARM_1
STORE:
CLRSOLVE
SETBPSW.5
W30:
LCALLDISP;等待按键抬起
JBP3.4,W31
LJMPA0
W31:
MOVA,P1
CJNEA,#0F0H,W32
LJMPA0
W32:
SJMPW30
SAVEK:
MOVA,VAL;保存键之后按下第一个键时会响一下
CJNEA,#13H,J3
CLRPSW.5
SETBCHANGE
LJMPFINI
WRONG:
LCALLALARM_1
LJMPSTART
W40:
LCALLDISP;等待按键抬起
JBP3.4,W41
LJMPA0
W41:
MOVA,P1
CJNEA,#0F0H,W42
LJMPA0
W42:
SJMPW40
J3:
INCKEY_CNT;按下数字键
MOVA,KEY_CNT
CJNEA,#09H,K1
LCALLALARM_1
W10:
LCALLDISP;等待按键抬起
MOVA,P1
CJNEA,#0FH,W11
LJMPSTART
W11:
MOVA,P1
CJNEA,#0F0H,W12
LJMPSTART
W12:
SJMPW10
LJMPSTART
LJMPSTART
K1:
LCALLSHIFTL
W20:
LCALLDISP;等待按键抬起
JBP3.4,W21
LJMPA0
W21:
MOVA,P1
CJNEA,#0F0H,W22
LJMPA0
W22:
SJMPW20
LJMPA0
ALARM_1:
SETBTR0
JBTR0,$
RET
ALARM_2:
INCR0
CJNER0,#3H,NEXT2
MOVP1,#0FFH
SJMP$
NEXT2:
SETBTR0
JBTR0,$
LCALLDLY_L
RET
;***********************************************************
;定时器终端服务程序,用于声音报警
INT_T0:
CPLP3.5
MOVTH0,#0FDH
MOVTL0,#00H
INCCNT_A
MOVR1,CNT_A
CJNER1,#30H,RETUNE
MOVCNT_A,#00H
INCCNT_B
MOVR1,CNT_B
CJNER1,#20,RETUNE
MOVCNT_A,#00H
MOVCNT_B,#00H
CLRTR0
RETUNE:
RETI
;******************************************************************
;段码,输入密码左移程序
SHIFTL:
JBPSW.5,GO_ON
LJMPGO_ON1
GO_ON:
MOVA,#40H
MOVLED_BIT_8,LED_BIT_7
MOVLED_BIT_7,LED_BIT_6
MOVLED_BIT_6,LED_BIT_5
MOVLED_BIT_5,LED_BIT_4
MOVLED_BIT_4,LED_BIT_3
MOVLED_BIT_3,LED_BIT_2
MOVLED_BIT_2,LED_BIT_1
MOVLED_BIT_1,A
MOVKEY_8,KEY_7
MOVKEY_7,KEY_6
MOVKEY_6,KEY_5
MOVKEY_5,KEY_4
MOVKEY_4,KEY_3
MOVKEY_3,KEY_2
MOVKEY_2,KEY_1
MOVKEY_1,VAL
MOV28H,KEY_1
MOV29H,KEY_2
MOV2AH,KEY_3
MOV2BH,KEY_4
MOV2CH,KEY_5
MOV2DH,KEY_6
MOV2EH,KEY_7
MOV2FH,KEY_8
RET
GO_ON1:
MOVA,VAL
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVLED_BIT_8,LED_BIT_7
MOVLED_BIT_7,LED_BIT_6
MOVLED_BIT_6,LED_BIT_5
MOVLED_BIT_5,LED_BIT_4
MOVLED_BIT_4,LED_BIT_3
MOVLED_BIT_3,LED_BIT_2
MOVLED_BIT_2,LED_BIT_1
MOVLED_BIT_1,A
MOVKEY_8,KEY_7
MOVKEY_7,KEY_6
MOVKEY_6,KEY_5
MOVKEY_5,KEY_4
MOVKEY_4,KEY_3
MOVKEY_3,KEY_2
MOVKEY_2,KEY_1
MOVKEY_1,VAL
RET
;********************************************************************
;段码,输入密码右移程序
SHIFTR:
MOVLED_BIT_1,LED_BIT_2
MOVLED_BIT_2,LED_BIT_3
MOVLED_BIT_3,LED_BIT_4
MOVLED_BIT_4,LED_BIT_5
MOVLED_BIT_5,LED_BIT_6
MOVLED_BIT_6,LED_BIT_7