单片机综合实训二密码锁的设计.docx

上传人:b****7 文档编号:9372306 上传时间:2023-02-04 格式:DOCX 页数:22 大小:863.53KB
下载 相关 举报
单片机综合实训二密码锁的设计.docx_第1页
第1页 / 共22页
单片机综合实训二密码锁的设计.docx_第2页
第2页 / 共22页
单片机综合实训二密码锁的设计.docx_第3页
第3页 / 共22页
单片机综合实训二密码锁的设计.docx_第4页
第4页 / 共22页
单片机综合实训二密码锁的设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

单片机综合实训二密码锁的设计.docx

《单片机综合实训二密码锁的设计.docx》由会员分享,可在线阅读,更多相关《单片机综合实训二密码锁的设计.docx(22页珍藏版)》请在冰豆网上搜索。

单片机综合实训二密码锁的设计.docx

单片机综合实训二密码锁的设计

密码锁的设计报告

一、设计内容:

用4*3的键盘组成0~9的数字键及确认键、删除键;用8位数码管组成显示电路提示信息,当输入密码时,只显示“—”,当密码位数输入完毕按下确认键时,对输入的密码和设定的初始密码进行比较,若密码正确,则开锁,此时P3.0口的LED(即黄灯)亮一秒作为提示;若密码不正确,禁止输入3秒种,同时发出报警声。

初始密码为8位。

增加功能:

利用外部中断0和1分别实现复位和密码修改功能,说明见原理图

参考器件:

89C51,RES,CAP,CAP-ELEC,CRYSTAL,LED-YELLOW,

7SEG-MPX8-CC-BLUE,SOUNDER,BUTTON,74LS245

二、原理图:

三、流程图:

 

 

 

四、实物图:

五、源程序

LINE_NOEQU20H;行号

ROW_NOEQU31H;列号

LINEinitialKEYVALEQU30H;行初始键值

KEY_VALEQU32H

KEY_CNTEQU33H;数字按键的序号,如按键"541",这时KEYORDER=3

BIT_SELEQU34H

FLAGBIT00H

;初始密码存储区

LED_BIT1EQU41H

LED_BIT2EQU42H

LED_BIT3EQU43H

LED_BIT4EQU44H

LED_BIT5EQU45H

LED_BIT6EQU46H

LED_BIT7EQU47H

LED_BIT8EQU48H

;输入密码存储区

PASSWD1EQU51H

PASSWD2EQU52H

PASSWD3EQU53H

PASSWD4EQU54H

PASSWD5EQU55H

PASSWD6EQU56H

PASSWD7EQU57H

PASSWD8EQU58H

 

ORG0000H

LJMPSTART

ORG0003H

LJMPINTT0;中断处理,实现复位功能,清楚所有的有关操作

ORG0013H

LJMPINTT1

ORG0040H

START:

MOVSP,#70H

MOVP0,#0FFH

MOVA,#0FFH

MOVR0,#00H

MOVR7,#0

MOVBIT_SEL,#0;显示数码管的位数初始为0

MOVKEY_CNT,#0;按键序号初始为0

MOVDPTR,#TAB

;设置初始密码

MOVLED_BIT1,#6

MOVLED_BIT2,#7

MOVLED_BIT3,#8

MOVLED_BIT4,#9

MOVLED_BIT5,#0

MOVLED_BIT6,#1

MOVLED_BIT7,#2

MOVLED_BIT8,#3

MAIN:

SETBEX0

SETBIT0

SETBEA;开中断总允许

SETBPX0

MOVP1,#0F0H;设置P1高4位(行线)输入状态

MOVA,P1

CJNEA,#0F0H,M;P1高4位(行线)有低电平,转M进一步判断是按键还是抖动

SJMPMAIN;P1高4位(行线)无低电平,转MAIN继续监控

M:

ACALLDELAY;P1高4位(行线)有低电平,去抖延时

MOVP1,#0F0H;设置P1高4位(行线)输入状态,已经延时,准备再读

MOVA,P1

CJNEA,#0F0H,MM;再读P1高4位(行线),仍有低电平,确认是按键,转MM

SJMPMAIN;再读P1高4位(行线),无低电平,表示抖动,非有效按键,

;转MAIN继续监控

MM:

MOVLINE_NO,A;P1高4位(行线)低电平持续时间符合按键要求,有效按键,

;保存行号到LINE_NO

MOVP1,#0FH;设置P1低4位(列线)输入状态

MOVROW_NO,P1;保存列号到ROW_NO

MMM:

MOVP1,#0F0H;设置P1高4位(行线)输入状态

MOVA,P1

CJNEA,#0F0H,MMM;读出P1高4位(行线)是否低电平(未松开键)?

;未松开转MMM,继续监控松开否。

;P1高4位(行线)有低电平,表明按键松开,

;完成一次按键动作,执行下面语句

JNBLINE_NO.4,E1;LINE_NO.4!

=1第1行有按键,转E1,

;否则第1行无按键,执行下面语句,判断其他行有按键否

JNBLINE_NO.5,E2;LINE_NO.5!

=1第2行有按键,转E2,

;否则第1、2行无按键,执行下面语句,判断其他行有按键否

JNBLINE_NO.6,E3;LINE_NO.6!

=1第3行有按键,转E3,

LJMPMAIN;否则无按键,转MAIN重新监控

E1:

MOVLINEinitialKEYVAL,#0;第1行有按键,该行键初值(30H内容)为0

LJMPKEYVAL;转KEYVAL,求按键号

E2:

MOVLINEinitialKEYVAL,#4;第2行有按键,该行键初值(30H内容)为4

LJMPKEYVAL;转KEYVAL,求按键号

E3:

MOVLINEinitialKEYVAL,#8;第3行有按键,该行键初值(30H内容)为8

MOVA,ROW_NO;将31H单元内容-列号取出

JNBACC.0,D31;第3行第1列按键,转D31,

JNBACC.1,D32;第3行第2列按键,转D32

JNBACC.2,D33;第3行第3列按键,转D33

JNBACC.3,D34;第3行第4列按键,转D34

D31:

MOVR0,KEY_CNT

INCR0

MOVKEY_CNT,R0;按键序号KEY_CNT增1

MOVA,KEY_CNT;按键序号超过9个不做处理

SUBBA,#09

JZNEXT1

INCBIT_SEL

MOVA,BIT_SEL

MOVCA,@A+DPTR

MOVP2,A;选择要显示的数码管

;MOVBIT_SEL,A;数码管位号BIT_SEL左移1位

MOVA,#0

ADDA,LINEinitialKEYVAL

MOVKEY_VAL,A

;MOVCA,@A+DPTR;从键值代码显示表tab中查到该按键号对应的显示代码

MOVA,#0BFH

MOVP0,A

MOVP1,#0F0H

ACALLPASSWD

LJMPMAIN

D32:

MOVR0,KEY_CNT

INCR0

MOVKEY_CNT,R0;按键序号KEY_CNT增1

MOVA,KEY_CNT;按键序号超过9个不做处理

SUBBA,#09

JZNEXT1

INCBIT_SEL

MOVA,BIT_SEL

MOVCA,@A+DPTR

MOVP2,A;选择要显示的数码管

;MOVBIT_SEL,A;数码管位号BIT_SEL左移1位

MOVA,#1

ADDA,LINEinitialKEYVAL

MOVKEY_VAL,A

;MOVCA,@A+DPTR;从键值代码显示表tab中查到该按键号对应的显示代码

MOVA,#0BFH

MOVP0,A

MOVP1,#0F0H

ACALLPASSWD

LJMPMAIN

D33:

MOVA,KEY_CNT

JZD331;无输入数字按键时进行清除的处理

MOVA,KEY_VAL

CLRA;清楚原来输入的按键值

MOVKEY_VAL,A

ACALLPASSWD;调用密码存储子程序对当前操作进行存储

DECKEY_CNT

DECBIT_SEL

D331:

MOVA,KEY_CNT

MOVCA,@A+DPTR

MOVP2,A;选择要显示的数码管

MOVA,#0BFH

MOVP0,A

MOVP1,#0F0H

LJMPMAIN

NEXT1:

MOVKEY_CNT,#08

LJMPPWN_SOUND;超过8个按键时的警告

D34:

MOVA,R7

JNZBIT0

MOVA,LED_BIT1;初始密码

CJNEA,PASSWD1,PWN_SOUND;初始密码与输入密码进行比较

MOVA,LED_BIT2

CJNEA,PASSWD2,PWN_SOUND

MOVA,LED_BIT3

CJNEA,PASSWD3,PWN_SOUND

MOVA,LED_BIT4

CJNEA,PASSWD4,PWN_SOUND

MOVA,LED_BIT5

CJNEA,PASSWD5,PWN_SOUND

MOVA,LED_BIT6

CJNEA,PASSWD6,PWN_SOUND

MOVA,LED_BIT7

CJNEA,PASSWD7,PWN_SOUND

MOVA,LED_BIT8

CJNEA,PASSWD8,PWN_SOUND

CLRP3.0;密码正确,LED发光二极管亮一秒作为提示

ACALLDELAY1S

SETBP3.0

SETBEX1;开重置密码中断

LJMPMAIN

BIT0:

MOVA,KEY_CNT

SUBBA,#08

JNZPWN_SOUND;密码修改不是8位警报

LJMPBIT_close

PWN_SOUND:

MOVA,R7

JZSOUND

CLRP3.7;密码修改错误,LED发光二极管亮并报警

SOUND:

MOVR2,#3

START1:

JNBFLAG,NEXT3;flag=0报警低音声,flag=1报警高音声

MOVR6,#200

DV:

CPLP3.5;P1.0产生200个500Hz脉冲,报警低音声

LCALLDELY500

LCALLDELY500

DJNZR6,DV

CPLFLAG;标志位取反,两种报警声音(500Hz和1KHz)交替鸣响

NEXT3:

MOVR6,#200

DV1:

CPLP3.5;P1.0产生200个1KHz脉冲,报警高音声

LCALLDELY500

DJNZR6,DV1

CPLFLAG;标志位取反,两种报警声音(500Hz和1KHz)交替鸣响

DJNZR2,NEXT4

MOVA,R7

JZNEXT5

SETBP3.7

NEXT5:

LJMPMAIN

NEXT4:

LJMPSTART1

KEYVAL:

MOVR0,KEY_CNT

INCR0

MOVKEY_CNT,R0;按键序号KEY_CNT增1

MOVA,KEY_CNT;按键序号超过8个不做处理,为无效按键,序号仍然为8个,并返回主函数

SUBBA,#09

JZNEXT1

INCBIT_SEL

MOVA,BIT_SEL

MOVCA,@A+DPTR

MOVP2,A;选择要显示的数码管

;MOVBIT_SEL,A;数码管位号BIT_SEL左移1位

MOVA,ROW_NO;将31H单元内容-列号取出

JNBACC.0,D1;第1列按键,转D1

JNBACC.1,D2;第2列按键,转D2

JNBACC.2,D3;第3列按键,转D3

JNBACC.3,D4;第4列按键,转D4

D1:

MOVA,#0

ADDA,LINEinitialKEYVAL;按键号=行键初值+列键值(列键值为0)

MOVKEY_VAL,A

;MOVCA,@A+DPTR;从键值代码显示表tab中查到该按键号对应的显示代码

MOVA,#0BFH

MOVP0,A

MOVP1,#0F0H

ACALLPASSWD

LJMPMAIN

D2:

MOVA,#1

ADDA,LINEinitialKEYVAL;按键号=行键初值+列键值(列键值为1)

MOVKEY_VAL,A

;MOVCA,@A+DPTR;从键值代码显示表tab中查到该按键号对应的显示代码

MOVA,#0BFH

MOVP0,A

MOVP1,#0F0H

ACALLPASSWD

LJMPMAIN

D3:

MOVA,#2

ADDA,LINEinitialKEYVAL;按键号=行键初值+列键值(列键值为2)

MOVKEY_VAL,A

;MOVCA,@A+DPTR;从键值代码显示表tab中查到该按键号对应的显示代码

MOVA,#0BFH

MOVP0,A

MOVP1,#0F0H

ACALLPASSWD

LJMPMAIN

D4:

MOVA,#3

ADDA,LINEinitialKEYVAL;按键号=行键初值+列键值(列键值为3)

MOVKEY_VAL,A

;MOVCA,@A+DPTR;从键值代码显示表tab中查到该按键号对应的显示代码

MOVA,#0BFH

MOVP0,A

MOVP1,#0F0H

ACALLPASSWD

LJMPMAIN

DELY500:

MOVR0,#250;500us软件延迟程序,用于报警

LOOP:

NOP

DJNZR0,LOOP

RET

;复位实现

INTT0:

MOVPASSWD1,#0

MOVPASSWD2,#0

MOVPASSWD3,#0

MOVPASSWD4,#0

MOVPASSWD5,#0

MOVPASSWD6,#0

MOVPASSWD7,#0

MOVPASSWD8,#0

MOVKEY_CNT,#0

MOVBIT_SEL,#0

MOVA,BIT_SEL

MOVCA,@A+DPTR

MOVP2,A

MOVA,#0BFH

MOVP0,A

RETI

;修改密码实现

INTT1:

MOVR7,#1

MOVKEY_CNT,#0

MOVBIT_SEL,#0

MOVA,BIT_SEL

MOVCA,@A+DPTR

MOVP2,A

MOVA,#0BFH

MOVP0,A

LJMPMAIN

BIT_close:

MOVLED_BIT1,PASSWD1

MOVLED_BIT2,PASSWD2

MOVLED_BIT3,PASSWD3

MOVLED_BIT4,PASSWD4

MOVLED_BIT5,PASSWD5

MOVLED_BIT6,PASSWD6

MOVLED_BIT7,PASSWD7

MOVLED_BIT8,PASSWD8

MOVPASSWD1,#0

MOVPASSWD2,#0

MOVPASSWD3,#0

MOVPASSWD4,#0

MOVPASSWD5,#0

MOVPASSWD6,#0

MOVPASSWD7,#0

MOVPASSWD8,#0

CLRP3.7;密码修改正确,LED发光二极管亮一秒作为提示

ACALLDELAY1S

SETBP3.7

CLREX1

MOVR7,#0

MOVKEY_CNT,#0

MOVBIT_SEL,#0

MOVA,BIT_SEL

MOVCA,@A+DPTR

MOVP2,A

RETI

;依据按键序号顺序存入密码缓冲区

PASSWD:

MOVA,KEY_CNT

SUBBA,#01H

JNZPD2

MOVPASSWD1,KEY_VAL

PD2:

MOVA,KEY_CNT

SUBBA,#02H

JNZPD3

MOVPASSWD2,KEY_VAL

PD3:

MOVA,KEY_CNT

SUBBA,#03H

JNZPD4

MOVPASSWD3,KEY_VAL

PD4:

MOVA,KEY_CNT

SUBBA,#04H

JNZPD5

MOVPASSWD4,KEY_VAL

PD5:

MOVA,KEY_CNT

SUBBA,#05H

JNZPD6

MOVPASSWD5,KEY_VAL

PD6:

MOVA,KEY_CNT

SUBBA,#06H

JNZPD7

MOVPASSWD6,KEY_VAL

PD7:

MOVA,KEY_CNT

SUBBA,#07H

JNZPD8

MOVPASSWD7,KEY_VAL

PD8:

MOVA,KEY_CNT

SUBBA,#08H

JNZNEXT

MOVPASSWD8,KEY_VAL

NEXT:

RET

DELAY1S:

MOVR3,#10

DEL3:

MOVR4,#200

DEL2:

MOVR5,#125

DEL1:

NOP

NOP

DJNZR5,DEL1

DJNZR4,DEL2

DJNZR3,DEL3

RET

DELAY:

MOVR1,#3;延时程序

D:

MOVR2,#255

DJNZR2,$

DJNZR1,D

RET

TAB:

;DB0C0H,0F9H,0A4H,0B0H

;DB99H,92H,82H,0F8H,80H,90H,88H,83H

;DB0C6H,0A1H,86H,8EH

DB00H,01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

END

六、心得体会

在这次实训中,基本功能的实现几乎没有遇到很大的问题,只是做完后发现有些错误没有进行处理,如密码按键超过8个,或者开始就按清除键,这些我在处理时利用判断语句,若超过8个的即不增加按键序号值KEY_CNT,仍保持8个,不做响应,同理,清除键的处理也是,当按键序号值为0时,不进行减操作,跳过清除程序;最后完成以后,由于有时间剩余,加上之前做过的实训,就想到利用了外部中断进行密码修改和复位,其中复位功能的实现原理就是清除密码区的值以及按键序号值、数码管显示位数值,我做了最久的是密码修改功能,这里用到了标志位来辨别是否是密码修改功能,因此无论在确认还是报警处都要增加判断标志位来识别是否是修改密码,开始我是想到每次按键时都判断一下是否是修改密码,是就存储在初始密码区,不是就存储在确认密码区,后来发现这种做法很复杂,而且按一个就改一个,若中间我不想改了,就会导致只改了一部分,因此后来想到了一个巧妙的方法,就是利用密码确认区先存储要修改的密码,这样就省了每次0按键时的判断,而且当密码输入8个时,就关标志位和中断,把确认密码区的密码转存到初始密码区,再清除密码确认区的密码,这样就实现了密码的修改,而且中间突然不想改的话也不会影响到初始密码;在实训过程中,还遇到一个问题,就是当代码达到一定长度时,有些跳转语句会超出地址范围,第一我在处理时,就是调整代码的布局,第二就是借助中间标志,跳转到标志处再利用长跳转语句实现。

最后连接电路图时,遇到一点点小问题,接触不良导致不能下载程序。

通过此次实训,增强了自己的动手能力,学会利用前面实训学到的知识一步步增加需要实现的功能。

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

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

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

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