8位密码锁单片机课程设计.docx

上传人:b****4 文档编号:26897293 上传时间:2023-06-23 格式:DOCX 页数:24 大小:243.27KB
下载 相关 举报
8位密码锁单片机课程设计.docx_第1页
第1页 / 共24页
8位密码锁单片机课程设计.docx_第2页
第2页 / 共24页
8位密码锁单片机课程设计.docx_第3页
第3页 / 共24页
8位密码锁单片机课程设计.docx_第4页
第4页 / 共24页
8位密码锁单片机课程设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

8位密码锁单片机课程设计.docx

《8位密码锁单片机课程设计.docx》由会员分享,可在线阅读,更多相关《8位密码锁单片机课程设计.docx(24页珍藏版)》请在冰豆网上搜索。

8位密码锁单片机课程设计.docx

8位密码锁单片机课程设计

1引言

电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。

现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。

其性能和安全性已大大超过了机械锁。

其在生活的各个方面均有应用,前景十分广阔。

其特点如下:

(1)保密性好,编码量多,远远大于弹子锁。

随机开锁成功率几乎为零;

(2)密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降;

(3)误码输入保护,当输入密码多次错误时,报警系统自动启动;

(4)无活动零件,不会磨损,寿命长;

(5)使用灵活性好,不像机械锁必须佩带钥匙才能开锁。

2设计方案及原理

2.1本设计所要实现的目标

设计一种单片机控制的密码锁,具有按键有效指示、解码有效指示、控制开锁电平、控制报警、密码修改等功能。

8位十进制密码共一亿组不重复,保密性强。

该密码锁要实现一下功能:

(1)锁的初始状态为“锁合”指示灯亮。

输入初始密码“0、1、2、3、4、5、6、7”,每输入一位,“按键有效”指示灯亮约半秒钟,输完8位按确认键,锁打开,“锁开”指示灯亮;

(2)按“上锁”键,锁又重新上锁,“锁合”指示灯亮;

(3)“锁开”状态下,可输入新密码,可重复修改密码;

(4)如果输入密码错误,“错误指示”灯亮约半秒钟。

可重新输入密码;

(5)输入密码错误超过3次,蜂鸣器启动发出报警,同时“错误”指示灯常亮。

2.2设计思路

对于电子密码锁的设计,需要解决几个问题:

键盘输入、数码管显示、单片机电路、密码比较、修改密码等。

其中最主要的就是解决掉电保存以及修改密码的问题。

先写一个循环写入8个初始密码到芯片内部EEPROM程序,先下载程序写入初始密码,此时EEPROM已存有初始密码,再把密码锁程序下载到单片机,运行电子密码锁。

本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。

其中矩阵键盘用于输入数字密码和进行各种功能的实现。

由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用的是单片机P1.2和P1.1来控制锁合和锁开LED灯的状态,P0口用于电子显示屏来显示提示语句和密码输入按键。

本系统共有两部分构成,即硬件部分与软件部分。

3硬件设计

硬件部分由键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成。

3.1键盘扫描电路

键盘接成4*4的矩阵键盘,行线为LD0-LD3分别接P2口的P0.0-P0.3,列线为HD0-HD3分别接P2口的P0.7-P0.4。

当哪一行的有键按下,则相应行的“按键有效”指示灯亮一下,其余行所对应的灯不亮。

P2初始时P2口第四位为低电平,高四位为高电平,当哪一行有键按下,则所对应的行和列对应的口变为低电平,将改为扫描到单片机中。

键盘扫描电路如图3.1所示。

图3.1键盘扫描电路

3.2晶振电路

80C31引脚XTAL1和XTAL2与晶体振荡器及电容C2/C1按图3.2所示方式连接。

晶振、电容C1/C2振荡器,振荡信号频率与晶振频率及电容C1/C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C1/C2取值范围在5~30pF之间。

根据实际情况,本设计中采用1MHZ做为系统的外部晶振。

电容取值为30pF。

晶振电路如图3.2所示。

图3.2晶振电路

3.3复位电路

上电复位电路如图3.3所示。

图3.3复位电路

3.4显示部分

显示电路是利用LM016L系列的LCD显示屏,可以双行显示。

其D0-D7与P0口相接,并且给P0口外接上拉电阻。

LCD显示电路如图3.4所示。

图3.4LCD显示密码电路

3.5报警电路

报警电路是利用SPEAKER和NPN型三极管构成,同时给蜂鸣器并联一个发光二级管,当P1.0口输出为高电平时,NPN三极管导通,蜂鸣器发声,“错误”指示灯亮。

报警电路如图3.5所示。

图3.5报警电路

3.6电路总体结构及布局

该设计的电路总体结构及布局如图3.6所示。

图3.6电路总体结构及布局

4软件设计

软件部分由主程序、初始化程序、LCD显示程序、键盘扫描程序、功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。

总流程图如图4.1所示。

图4.1程序流程图

具体程序见附录。

5Proteus仿真结果

当开启开始仿真时,LCD显示屏会显示“选择A为设置密码,选择B为开锁”,同时“锁合”指示灯(红灯D1)闪烁。

开始仿真图如图5.1所示。

图5.1开始仿真图

当按下A或B时会提示输入密码,按下每一个键都会输出“*”提示。

其仿真结果如图5.2所示。

图5.2提示输入密码界面

当输入密码正确时会显示“PASSWORDOK!

!

!

”字样,同时“错误”指示灯(绿灯D3亮)。

其仿真图如图5.3所示。

图5.3输入密码正确显示界面

当输入密码错误时,LCD显示屏会显示“PASSWORDERROR!

”。

其仿真图如图5.4所示。

图5.4当输入密码错误时显示界面

6总结

本设计是基于单片机的多功能密码锁设计。

在设计过程中,首先是确立要设计的目标及电子密码锁要实现的功能,该如何通过软硬件来实现。

接下来是根据目标来搭建电路图,设计各功能模块要实现的功能,比如报警,LED灯的显示控制,4*4矩阵键盘的搭建。

接着就要通过编程来实现各模块功能,比如输入密码,输出显示,键盘扫描程序,存储程序等等。

最后就是调试改错,下载仿真。

本设计最后实现了上面所提到的基本功能外,另外增加了LCD显示屏,开始时有提示选择,问执行什么功能,到底是设置密码呢还是开锁。

当进入任何一个界面都会出现提示信息,比如‘PASSWORDOK!

!

!

’,‘INPUTAGAIN!

’,‘SETPASSWORD’等等。

当每次输入时都会显示“*”提示。

当输入密码错误超过三次时就会直接锁死,即使按下功能复位键也不会开锁,这样直接降低了盗窃的几率。

另外,在修改密码时会提示先输入原密码,再输两次新密码,防止用户该密码是按错键,极大地提高了密码锁的可靠性。

本设计输入的密码是8位的,共有一亿组不重复密码,增加了密码的安全性。

本设计还存在一些不足之处,开锁延时一段时间后没有自动上锁功能,应该在用户开锁之后若不操作机器时,延时30秒就自动上锁,减小因疏忽而给用户带来的不便。

参考文献

[1]李华,王思明,张金敏.单片机原理及应用[M].兰州:

兰州大学出版社,2001:

11-120.

[2]顾滨.单片微计算机原理开发与应用[M].北京:

高等教育出版社,2000:

67-81.

[3]李广弟.单片机基础[M].北京:

北京航空航天大学出版社,1994:

45-56.

附录源程序

ENBITP3.0

RWBITP3.1

RSBITP3.2

DISPLAYEQUP0

SOUNDERBITP1.1

LEDBITP1.2

OPENBITP1.1

RETURNBITBIT20H.1

ORG0000H

LJMPSTART

ORG000BH

LJMPINTERMIT_T0

ORG001BH

LJMPINTERMIT_T1

ORG0030H

START:

MOVSP,#60H

LCALLSYS_INITIAL

;主程序

MAIN0:

LCALLSTRAT_DISPLAY

MAIN:

MOV52H,#0;判断输入错误次数储存地址

SETBLED

SETBTR0

LCALLKEY

CJNEA,#'A',NEXT1

LJMPCHANGE_KEY

NEXT1:

CJNEA,#'B',NEXT2

LJMPINPUT_KEY

NEXT2:

AJMPMAIN

;系统初始化

SYS_INITIAl:

CLRLED

CLROPEN

CLRSOUNDER

MOV32H,#'0'

MOV33H,#'1'

MOV34H,#'2'

MOV35H,#'3'

MOV36H,#'4'

MOV37H,#'5'

MOV38H,#'6'

MOVr7,#16

MOVr0,#40H

LOOP:

MOV@R0,#10H

INCR0

DJNZR7,LOOP;密码键值存放区清零完毕

LCALLDELAY0_1S

MOVP0,#03H

CALLWRITE_INSTRUCTION;液晶软复位

MOVP0,#01H

CALLWRITE_INSTRUCTION

MOVP0,#3FH

CALLWRITE_INSTRUCTION

MOVP0,#0FH

CALLWRITE_INSTRUCTION

MOVP0,#06H

CALLWRITE_INSTRUCTION;液晶初始化完毕

MOVR5,#10

MOVTMOD,#11H

MOVTH0,#3CH

MOVTL0,#0B0H

SETBEA

SETBET0

RET

INTERMIT_T0:

PUSHACC

PUSHPSW

MOVTH0,#3CH

MOVTL0,#0B0H

DJNZR5,RETURN

CPLLED

MOVR5,#10

RETURN:

POPPSW

POPACC

RETI

INTERMIT_T1:

PUSHACC

PUSHPSW

MOVTH1,#9EH

MOVTL1,#58H

DJNZR5,RETURN_T1

CPLLED

CPLSOUNDER

MOVR5,#10

RETURN_T1:

POPPSW

POPACC

RETI

KEY:

CALLKS;键盘扫描

JNZK1

JMPKEY

K1:

CALLDELAY

CALLKS

JNZK2

JMPKEY

K2:

CLRTR0

CLRLED

MOVR2,#0FEH

MOVR6,#00H

K3:

MOVA,R2

MOVP2,A

MOVA,P2

JBACC.4,L1

MOVA,#0

LJMPLK

L1:

JBACC.5,L2

MOVA,#4

LJMPLK

L2:

JBACC.6,L3

MOVA,#8

LJMPLK

L3:

JBACC.7,NEXT_KEY

MOVA,#12

LK:

ADDA,R6

MOVR6,A

K4:

CALLKS

JNZK4

MOVA,R6

MOVDPTR,#TABLE0

MOVCA,@A+DPTR

MOV50H,A;查表取值存入50h,保护键值

RET

NEXT_KEY:

INCR6

MOVA,R2

JNBACC.7,KEY

RLA

MOVR2,A

JMPK3

KS:

MOVP2,#0F0H

MOVA,P2

XRLA,#0F0H

RET

;修改密码程序

CHANGE_KEY:

CALLCLEAR_DISPLAY

MOVDPTR,#TABLE4

CALLINPUT_HINT

MOVR0,#40H

CALLCHANGE

JBCRETURNBIT,CHANGE_KEY;先输入原密码完毕

MOVR4,#8

MOVR0,#40H

MOVR1,#32H

INPUT_COMPERE:

MOVA,@R0

XRLA,@R1

JNZINPUT_ERROR

INCR0

INCR1

NOP

NOP

DJNZR4,INPUT_COMPERE

;验证输入密码完毕

JMPCHANGE_KEY0

INPUT_ERROR:

SETBSOUNDER

SETBLED

CALLCLEAR_DISPLAY

MOVDPTR,#TABLE5

CALLINPUT_HINT

CALLDELAY1_15S

CLRSOUNDER

CLRLED

INC52H

MOVA,52H

CJNEA,#3,CHANGE_KEY

SJMP$

;输入密码错误次数超过3次,锁死

CHANGE_KEY0:

CALLCLEAR_DISPLAY

MOVDPTR,#TABLE2

CALLINPUT_HINT

MOVR0,#40H

CALLCHANGE

JBCRETURNBIT,CHANGE_KEY;第一次输入新密码完毕

CALLCLEAR_DISPLAY

MOVDPTR,#TABLE3

CALLINPUT_HINT

CALLDELAY1_15S;显示再次输入新密码完毕

MOVDPTR,#TABLE4

CALLINPUT_HINT

MOVR0,#48H

CALLCHANGE

JBCRETURNBIT,CHANGE_KEY;第二次输入新密码完毕

MOVR4,#7

MOVR0,#40H

MOVR1,#48H

SET_COMPERE:

MOVA,@R0

XRLA,@R1

JNZSET_ERROR

INCR0

INCR1

DJNZR4,SET_COMPERE

MOV32H,40H

MOV33H,41H

MOV34H,42H

MOV35H,43H

MOV36H,44H

MOV37H,45H

MOV38H,46H;存入新密码完毕

JMPMAIN0;设置新密码成功,返回主程序

SET_ERROR:

SETBSOUNDER

SETBLED

CALLCLEAR_DISPLAY

MOVDPTR,#TABLE5

CALLINPUT_HINT

CALLDELAY1_15S

CLRSOUNDER

CLRLED

LJMPCHANGE_KEY0;设置新密码成功,返回主程序

INPUT_KEY:

;输入密码开锁程序

CALLCLEAR_DISPLAY

MOVDPTR,#TABLE4

CALLINPUT_HINT

MOVR0,#40H

CALLCHANGE

JBCRETURNBIT,INPUT_KEY;设置新密码成功,返回主程序

MOVR4,#8

MOVR0,#40H

MOVR1,#32H

INPUT_COMPERE0:

MOVA,@R0

XRLA,@R1

JNZINPUT_ERROR22

INCR0

INCR1

NOP

NOP

DJNZR4,INPUT_COMPERE0;验证输入密码完毕

JMPDISPLAY_RIGHT

INPUT_ERROR22:

SETBSOUNDER

SETBLED

CALLCLEAR_DISPLAY

MOVDPTR,#TABLE5

CALLINPUT_HINT

CALLDELAY1_15S

CLRSOUNDER

CLRLED

INC52H

MOVA,52H

CJNEA,#3,INPUT_KEY

SJMP$;输入密码错误超过3次,锁死

DISPLAY_RIGHT:

CALLCLEAR_DISPLAY

MOVDPTR,#TABLE6

CALLINPUT_HINT;显示输入密码正确提示完毕

SETBOPEN;开锁

NEXT_KEY1:

CALLKEY

NOP

NOP

CJNEA,#'F',NEXT_KEY1

CLROPEN;按下关锁键关锁

JMPMAIN0;返回主程序

STRAT_DISPLAY:

MOVP0,#80H

CALLWRITE_INSTRUCTION

MOVDPTR,#TABLE1

CALLINPUT_HINT

MOVP0,#0C0H

CALLWRITE_INSTRUCTION

MOVDPTR,#TABLE11

CALLINPUT_HINT

RET

CLEAR_DISPLAY:

;清屏

MOVDISPLAY,#01H

CALLWRITE_INSTRUCTION

MOVP0,#06H

CALLWRITE_INSTRUCTION

RET

INPUT_HINT:

MOVR4,#16

MOVA,#00H

ALL_OR_NOT:

MOVCA,@A+DPTR

MOVDISPLAY,A

CALLWRITEDATA

INCDPTR

CLRA

NOP

NOP

DJNZR4,ALL_OR_NOT

RET

CHANGE:

MOVR4,#8

MOVR1,#0C0H

MOVA,R1

MOVP0,A

CALLWRITE_INSTRUCTION

LOOP1:

CALLKEY

NOP

NOP

CJNEA,#'C',NEXT_TO

SETBRETURNBIT

JMPENDT

NEXT_TO:

MOVA,50H

MOV@R0,A

MOVDISPLAY,#'*'

CALLWRITEDATA

INCR1

INCR0

DJNZR4,LOOP1

ENDT:

RET

WRITEDATA:

;写数据

SETBRS

CLRRW

CLREN

SETBEN

NOP

NOP

CLREN

SETBEN

NOP

NOP

CLREN

CALLDELAY

RET

WRITE_INSTRUCTION:

;写指令

CLRRS

CLRRW

CLREN

SETBEN

NOP

NOP

CLREN

CALLDELAY

RET

DELAY1_15S:

;延时程序

PUSH77H

PUSH72H

PUSH73H

MOVR7,#15

DEL22S:

MOVR3,#0

DEL11S:

MOVR2,#0

DJNZR2,$

DJNZR3,DEL11S

POP03H

POP02H

POP07H

RET

DELAY0_1S:

PUSH02H

PUSH03H

MOVR3,#0

DEL21S:

MOVR2,#0

NOP

NOP

DJNZR2,$

DJNZR3,DEL21S

POP03H

POP02H

RET

DELAY:

PUSH07H

PUSH06H

MOVR7,#10

D1:

MOVR6,#248

NOP

NOP

DJNZR6,$

DJNZR7,D1

POP06H

POP07H

RET

TABLE0:

DB'C','B','0','A';

DB'D','9','8','7';

DB'E','6','5','4';

DB'F','3','2','1';

TABLE1:

DB'PASSWORD:

ASET';

TABLE11:

DB'BOPEN';

TABLE2:

DB'SETPASSWORD:

';

TABLE3:

DB'INPUTAGAIN!

';

TABLE4:

DB'INPUTPASSWROD:

';

TABLE5:

DB'PASSWORDERROR!

';

TABLE6:

DB'PASSWORDOK!

!

!

';

END

.

 

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

当前位置:首页 > 高等教育 > 理学

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

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