基于单片机实现的电子密码锁课程设计毕业设计.docx

上传人:b****4 文档编号:26866758 上传时间:2023-06-23 格式:DOCX 页数:25 大小:203.17KB
下载 相关 举报
基于单片机实现的电子密码锁课程设计毕业设计.docx_第1页
第1页 / 共25页
基于单片机实现的电子密码锁课程设计毕业设计.docx_第2页
第2页 / 共25页
基于单片机实现的电子密码锁课程设计毕业设计.docx_第3页
第3页 / 共25页
基于单片机实现的电子密码锁课程设计毕业设计.docx_第4页
第4页 / 共25页
基于单片机实现的电子密码锁课程设计毕业设计.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于单片机实现的电子密码锁课程设计毕业设计.docx

《基于单片机实现的电子密码锁课程设计毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机实现的电子密码锁课程设计毕业设计.docx(25页珍藏版)》请在冰豆网上搜索。

基于单片机实现的电子密码锁课程设计毕业设计.docx

基于单片机实现的电子密码锁课程设计毕业设计

目录:

一、系统总体方案设计………………………………………………….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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1