单片机电子锁程序.docx

上传人:b****6 文档编号:7728775 上传时间:2023-01-26 格式:DOCX 页数:30 大小:19.55KB
下载 相关 举报
单片机电子锁程序.docx_第1页
第1页 / 共30页
单片机电子锁程序.docx_第2页
第2页 / 共30页
单片机电子锁程序.docx_第3页
第3页 / 共30页
单片机电子锁程序.docx_第4页
第4页 / 共30页
单片机电子锁程序.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

单片机电子锁程序.docx

《单片机电子锁程序.docx》由会员分享,可在线阅读,更多相关《单片机电子锁程序.docx(30页珍藏版)》请在冰豆网上搜索。

单片机电子锁程序.docx

单片机电子锁程序

;********************************************

;*********电子密码锁*********

;********************************************

;*********2005/12/24*********

;********************************************

;显示缓冲区

;LED1EQU6FH

BUFFEQU6EH

TIMERS1EQU6DH;输入回车的次数

TIMERS2EQU6CH;报警的次数

TIMERSEQU6BH;输入数字的位数

;LED6EQU6AH

;密码缓冲区

PS1EQU69H

PS2EQU68H

PS3EQU67H

PS4EQU66H

PS5EQU65H

PS6EQU64H

;AT24C02读取缓冲区

AT1EQU63H

AT2EQU62H

AT3EQU61H

AT4EQU60H

AT5EQU5FH

AT6EQU5EH

;按键标志位

F_1BIT20H

F_2BIT21H

F_3BIT22H

F_4BIT23H

BUF_FULLBIT24H;密码已经够六位的标志位,为1表示满

CH_STATEBIT25H;系统更改的状态标志位,为1表示busy

FLAG1BIT26H;功能键标志位,为1表示功能按键。

F_F1BIT27H

F_F2BIT28H

PSW_FBIT29H;密码是否正确的标志位

;口资源定义

SPKBITP2.1

JDQBITP2.3

SDABITP2.4;定义串口数据端

SCLBITP2.5

;发光二极管灯

L1BITP1.0

L2BITP1.1

L3BITP1.2

;

ORG0000H

AJMPMAIN

ORG000BH

;AJMPTIMER0

ORG001BH

;AJMPTIMER1

ORG0030H

MAIN:

MOVSP,#70H

MOVTMOD,#11H

MOVTH0,#3CH

MOVTL0,#0B0H

MOVTH1,#3CH

MOVTL1,#0B0H

CLRF_1;清除标志位

CLRF_2

CLRF_3

CLRF_4

CLRBUF_FULL

CLRCH_STATE

CLRFLAG1

CLRF_F1

CLRF_F2

CLRPSW_F

MOVBUFF,#00H;调用

LCALLINITPS;初始化环境

LCALLINITAT

LCALLXSA;调用默认显示

MOVTIMERS1,#00H

NOP

MOVPS1,#11H;初始化密码830620

MOVPS2,#0AH

MOVPS3,#02H

MOVPS4,#13H

MOVPS5,#0BH

MOVPS6,#02H

START:

NOP;程序开始

LCALLCH_KEY;检查键盘

AJMPSTART;返回

CH_KEY:

LCALLKS;检查有没有按键按下

JNZLK1

AJMPCH_KEY

LK1:

LCALLT12MS

ACALLKS

JNZLK2

RET

LK2:

NOP

LCALLSBIE;按键识别子程序

MOVBUFF,A;送缓冲区以识别是数字键还是功能键?

LCALLCH_KF;判断按键功能。

JBFLAG1,KEY_FUN;标志为1,则为功能键

;***********数字按键输入并且存放到缓冲区内等待比较***********

KEY_DIG:

NOP;设一标志,辨别输入是否满

;SETBTR0

INCTIMERS;输入数字的位数

MOVA,TIMERS

CLRC

SUBBA,#01H

JNZPS_2

MOVPS1,BUFF;依照顺序存放密码

AJMPNEXT

PS_2:

MOVA,TIMERS

SUBBA,#02H

CLRC

JNZPS_3

MOVPS2,BUFF

AJMPNEXT

PS_3:

MOVA,TIMERS

CLRC

SUBBA,#03H

JNZPS_4

MOVPS3,BUFF

AJMPNEXT

PS_4:

MOVA,TIMERS

CLRC

SUBBA,#04

JNZPS_5

MOVPS4,BUFF

AJMPNEXT

PS_5:

MOVA,TIMERS

CLRC

SUBBA,#05

JNZPS_6

MOVPS5,BUFF

AJMPNEXT

PS_6:

MOVA,TIMERS

CLRC

SUBBA,#06H

JNZCH_KEY

MOVPS6,BUFF

NEXT:

LCALLXSC

MOVR7,TIMERS;比较输入的次数。

CJNER7,#06H,FULL

FULL:

JCNEXT9

SETBBUF_FULL

MOVTIMERS,#06H

CLRL3

NOP

CLRP2.1

LCALLT100MSD

SETBP2.1

NOP

AJMPCH_KEY

NEXT9:

CLRP2.1;密码输入一位,鸣叫一声。

CLRL3

LCALLT100MSD;延时100ms

SETBL3

SETBP2.1

AJMPCH_KEY

;*****************功能按键比较并且跳转*************

KEY_FUN:

CLRFLAG1

CLRC

MOVA,BUFF

SUBBA,#03H;按键CL跳转

JNZEN_C

AJMPCL

EN_C:

CLRC

MOVA,BUFF;按键EN跳转

SUBBA,#00H

JNZF1_C

AJMPEN

F1_C:

CLRC

MOVA,BUFF

SUBBA,#1BH

JNZF2_C

AJMPFU1

F2_C:

CLRC

MOVA,BUFF

SUBBA,#1AH

JNZF3_C

AJMPFU2

F3_C:

CLRC

MOVA,BUFF

SUBBA,#19H

JNZF4_C

AJMPFU3

F4_C:

CLRC

MOVA,BUFF

SUBBA,#18H

JZFU4

EXIT8:

NOP

LJMPCH_KEY

;***************开门子程序********************************

CL:

NOP

SETBL3

MOVBUFF,#00H;消密码缓冲

MOVTIMERS,#00H

LCALLINITPS;消除AT缓冲,加调电存储后一定要加上

LCALLXSC

LCALLBP

LCALLBP

LCALLT100MSD

LCALLBP

CLRFLAG1

AJMPCH_KEY

FU4:

NOP

LCALLBP

LCALLT100MSD

LCALLBP

LCALLT100MSD

LCALLBP

LCALLT100MSD

LCALLBP

LCALLT100MSD

LCALLBP

CLRFLAG1

AJMPCH_KEY

FU3:

NOP

LCALLBP

LCALLT100MSD

LCALLBP

LCALLKILLXS;关闭显示

CLRFLAG1

AJMPCH_KEY

FU1:

NOP

LCALLXSC

JBF_F1,NEXT_F1

CLRL1

LCALLBP

SETBF_F1

AJMPCH_KEY

NEXT_F1:

SETBL1

LCALLBP

CLRF_F1

;LCALLCH_STATE;查看现在的状态以防误按

;SETBTR1;报警限制暂时不开

;INCF_F1

CLRFLAG1

AJMPCH_KEY

FU2:

NOP

JBF_F2,NEXT_F2

CLRL2

LCALLBP

SETBF_F2

AJMPCH_KEY

NEXT_F2:

SETBL2

LCALLBP

CLRF_F2

CLRFLAG1

AJMPCH_KEY

;***************按键的功能描述*************************

EN:

NOP

JBBUF_FULL,GOON

AJMPEXIT

GOON:

CLRBUF_FULL

JBF_F2,AT_WRON;F2按键标志,若为1,则调用修改密码子程序。

LCALLAT_RADE

LCALLC_PSW;比较密码子程序

JBPSW_F,OPEN;密码比较正确,则调用开锁子程序

LCALLXSD

INCTIMERS2

MOVR7,TIMERS2;密码错误,调入输入密码输入次数,准备锁定键盘

CJNER7,#03H,D0

D0:

JCNEXT1;错误次数小3次

LCALLXSE;锁定5分钟

LCALLWARN2S

LCALLLOCK_1M

NEXT1:

LCALLWARN2S;报警2分钟

LCALLXSA

EXIT:

LCALLINITPS

MOVBUFF,#00H

CLRFLAG1

MOVTIMERS,#00H

AJMPCH_KEY;跳出

AT_WRON:

LCALLAT_WR

LCALLXSF

LCALLBP

LCALLT100MSD

LCALLBP

LCALLT500MSD

LCALLKILLXS

LCALLT500MSD

LCALLXSF

LCALLT500MSD

LCALLKILLXS

LCALLT500MSD

LCALLXSF

LCALLT500MSD

NOP

NOP

LCALLXSA

AJMPEXIT

OPEN:

MOVA,TIMERS1

CJNEA,#09H,CLT1

CLT1:

JCGOON1

MOVTIMERS1,#00H

GOON1:

INCTIMERS1;输入回车的次数

MOVTIMERS2,#00H

SETBL3

CLRPSW_F

LCALLXSB

CLRJDQ;开门

LCALLBP

LCALLBP

LCALLBP

LCALLBP

LCALLSEC

LCALLSEC

LCALLSEC

LCALLSEC

LCALLSEC

LCALLSEC

LCALLSEC

LCALLSEC

SETBJDQ

LCALLXSA

NOP

AJMPEXIT

;**************各类子程序********************************

;****注意清楚缓冲区时AT1...AT6不应在初始化中执行,以***

;****防两缓冲区都为0,相同开锁***

;********************************************************

CLR_BUF:

MOVR7,#06H

MOVR0,#6FH

LOOP1:

MOVA,#00H

MOV@R0,A

DECR0

DJNZR7,LOOP1

RET

;*************初始化显示缓冲区以及其他缓冲区**************

INITPS:

PUSHACC

PUSHPSW

MOVR7,#06H

MOVR1,#PS1

MOVA,#00H

INIT_PS:

MOV@R1,A

DECR1

DJNZR7,INIT_PS

POPPSW

POPACC

NOP

RET

INITAT:

PUSHACC

PUSHPSW

MOVR7,#06H

MOVR1,#AT1

MOVA,#00H

INIT_AT:

MOV@R1,A

DECR1

DJNZR7,INIT_AT

MOVTIMERS,#00H;密码输入的次数清零。

POPPSW

POPACC

RET

;*************按键识别子程序***************************

SBIE:

MOVR2,#0EFH;识别按键子程序,数据送A保存,课本P146页。

MOVR4,#00H

LK4:

MOVA,R2

MOVP0,A

NOP

MOVA,P0

JBACC.0,LONE

MOVA,#00H

AJMPLKP

LONE:

JBACC.1,LTWO

MOVA,#08H

AJMPLKP

LTWO:

JBACC.2,LTHR

MOVA,#10H

AJMPLKP

LTHR:

JBACC.3,NEXTT;判断下一列

MOVA,#18H

LKP:

ADDA,R4

PUSHACC

LK3:

ACALLKS

JNZLK3

POPACC

RET

NEXTT:

INCR4

MOVA,R2

JNBACC.7,KND

RLA

MOVR2,A

AJMPLK4

KND:

AJMPCH_KEY

KS:

MOVP0,#0FH

NOP

MOVA,P0

CPLA

ANLA,#0FH

NOP

RET

CH_KF:

CLRC

MOVA,BUFF;判断是数字按键还是功能按键,为1表示功能键

CJNEA,#17H,KY

KY:

JCSET_CH;假若是数字按键则标志置为0

SETBFLAG1;假若是功能按键则标志置为1

AJMPCHKE_END

SET_CH:

CLRC

MOVA,BUFF

SUBBA,#00H

JNZEN_CH

SETBFLAG1

AJMPCH_END

EN_CH:

MOVA,BUFF

SUBBA,#03H

JNZDIG

SETBFLAG1

AJMPCH_END

DIG:

CLRFLAG1

CH_END:

NOP

CHKE_END:

RET

T12MS:

MOVR7,#18H

TM1:

MOVR6,#0FFH

TM66:

DJNZR6,TM66

DJNZR7,TM1

RET

;****************检验密码正误******************************

C_PSW:

PUSHPSW

PUSHACC

MOVR2,#06H

MOVR0,#PS1

MOVR1,#AT1

C_P:

CLRC

MOVA,@R0

SUBBA,@R1

JNZRETURN

DECR0

DECR1

DJNZR2,C_P

NOP

SETBPSW_F

AJMPEXIT7

RETURN:

CLRPSW_F

EXIT7:

NOP

POPACC

POPPSW

RET

;×××××××××××××××××锁定,鸣笛子程序××××××××××××

LOCK_1M:

MOVR4,#3CH;锁定1分钟

M1_LOOP:

LCALLSEC

DJNZR4,M1_LOOP

NOP

RET

WARN2S:

PUSHPSW

PUSHACC

MOVR5,#14H;调用20次BP,报警2s

WARN:

LCALLBP

DJNZR5,WARN

NOP

POPACC

POPPSW

NOP

RET

BP:

CLRSPK;鸣笛子程序

LCALLT100MSD

SETBSPK

NOP

RET

;***************************

;*****显示子程序********

;***************************

;功能:

分五屏幕显示数据,分别是XSA,XSB,XSC,XSD,XSE.代表六种状态。

;锁定状态显示。

XSA:

PUSHACC

PUSHPSW

MOVA,TIMERS1

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVSBUF,A;送已经输入密码的次数

JNBTI,$

CLRTI

MOVSBUF,#0FEH;送短线

JNBTI,$

CLRTI

MOVSBUF,#0FEH;送短线

JNBTI,$

CLRTI;送F

MOVSBUF,#78H

JNBTI,$

CLRTI

MOVSBUF,#78H

JNBTI,$

CLRTI

MOVSBUF,#11H

JNBTI,$

CLRTI

POPPSW

POPACC

RET

;成功开锁状态显示

XSB:

PUSHACC

PUSHPSW

MOVA,TIMERS1

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

MOVSBUF,#0FEH

JNBTI,$

CLRTI

MOVSBUF,#0FEH

JNBTI,$

CLRTI

MOVSBUF,#10H

JNBTI,$

CLRTI

MOVSBUF,#10H

JNBTI,$

CLRTI

MOVSBUF,#10H

JNBTI,$

CLRTI

POPPSW

POPACC

RET

;密码输入及修改状态

XSC:

PUSHACC

PUSHPSW

LCALLKILLXS

SETBRS1;切换到第三组寄存器。

防止操作数读取错误。

MOVR6,TIMERS

MOVA,R6

SUBBA,#01H

JNCSC0

JZSC1

SC0:

MOVSBUF,#0FEH

JNBTI,$

CLRTI

SC1:

MOVA,R6

SUBBA,#02H

JNCSC11

JNZSC2

SC11:

MOVSBUF,#0FEH

JNBTI,$

CLRTI

SC2:

MOVA,R6

SUBBA,#03H

JNCSC22

JNZSC3

SC22:

MOVSBUF,#0FEH

JNBTI,$

CLRTI

SC3:

MOVA,R6

SUBBA,#04H

JNCSC33

JNZSC4

SC33:

MOVSBUF,#0FEH

JNBTI,$

CLRTI

SC4:

MOVA,R6

SUBBA,#05H

JNCSC44

JNZSC5

SC44:

MOVSBUF,#0FEH

JNBTI,$

CLRTI

SC5:

MOVA,R6

SUBBA,#06H

JNCSC55

JNZSC6

SC55:

MOVSBUF,#0FEH

JNBTI,$

CLRTI

SC6:

MOVA,R6

SUBBA,#07H

JNCSC66

JNZEXIT_C

SC66:

MOVSBUF,#0FEH

JNBTI,$

CLRTI

NOP

NOP

EXIT_C:

NOP

CLRRS1

POPPSW

POPACC

NOP

RET

;密码输入错误的提示

XSD:

PUSHACC

PUSHPSW

MOVSBUF,#98H

JNBTI,$

CLRTI

MOVSBUF,#79H

JNBTI,$

CLRTI

MOVSBUF,#11H

JNBTI,$

CLRTI

MOVSBUF,#79H

JNBTI,$

CLRTI

MOVSBUF,#79H

JNBTI,$

CLRTI

MOVSBUF,#38H

JNBTI,$

CLRTI

POPPSW

POPACC

RET

;锁定状态显示

XSE:

PUSHACC

PUSHPSW

MOVSBUF,#0FEH

JNBTI,$

CLRTI

MOVSBUF,#54H

JNBTI,$

CLRTI

MOVSBUF,#39H

JNBTI,$

CLRTI

MOVSBUF,#11H

JNBTI,$

CLRTI

MOVSBUF,#3DH

JNBTI,$

CLRTI

MOVSBUF,#0FEH

JNBTI,$

CLRTI

POPPSW

POPACC

RET

XSF:

PUSHACC

PUSHPSW

MOVSBUF,#98H

JNBTI,$

CLRTI

MOVSBUF,#38H

JNBTI,$

CLRTI

MOVSBUF,#39H

JNBTI,$

CLRTI

MOVSBUF,#39H

JNBTI,$

CLRTI

MOVSBUF,#3DH;U

JNBTI,$

CLRTI

MOVSBUF,#98H

JNBTI,$

CLRTI

POPPSW

POPACC

RET

KILLXS:

PUSHACC

PUSHPSW

MOVR7,#06H

LOOP_XS:

MOVSBUF,#0FFH

JNBTI,$

CLRTI

DJNZR7,LOOP_XS

NOP

POPPSW

POPACC

RET

TAB:

DB11H,0D7H,32H,92H,0D4H,98H,1

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

当前位置:首页 > 高等教育 > 研究生入学考试

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

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