📄 eletronicpasswordlock.asm
字号:
;******************************************
;******************************************
;**********电子密码锁程序******************
;******************************************
;******************************************
FLAG BIT 00H
TIMERS EQU 6BH ;输入密码的位数
TIMERS1 EQU 6AH ;密码错误的次数
;**************密码缓冲区***********
PS1 EQU 69H
PS2 EQU 68H
PS3 EQU 67H
PS4 EQU 66H
PS5 EQU 65H
PS6 EQU 64H
PS7 EQU 63H
;**************已设密码存储区********
AT1 EQU 62H
AT2 EQU 61H
AT3 EQU 60H
AT4 EQU 5FH
AT5 EQU 5EH
AT6 EQU 5DH
AT7 EQU 5CH
;**************口资源定义区**********
SPK EQU P3.3 ;扬声器
SR EQU P2.2 ;输入键
QR EQU P2.3 ;确认键
L1 EQU P0.0 ;SR指示
L2 EQU P0.1 ;QR指示
L3 EQU P0.2 ;开锁指示
L4 EQU P0.3 ;锁定指示
;***************主程序****************
ORG 0000H
AJMP MAIN
org 0030H
TABLE:DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH
ORG 0050H
MAIN: LCALL INITPS ;初始化
NOP
MOV P2,#0FFH
MOV AT1,#05H ;设定密码
MOV AT2,#00H
MOV AT3,#01H
MOV AT4,#02H
MOV AT5,#09H
MOV AT6,#03H
MOV AT7,#01H
MOV 6CH,#00H
MOV R1,#PS1
LCALL DISPLAY
;*************按键扫描程序*************
CH_KEY: LCALL DISPLAY
LCALL KS
JNZ LK1
AJMP CH_KEY
LK1: LCALL T12MS
ACALL KS
JNZ LK2
LJMP CH_KEY
LK2:
MOV 6DH,A
NOKEY:
LCALL KS
JZ AJSB
LJMP NOKEY
KS: PUSH PSW
NOP
MOV A,P2
CPL A
ANL A,#0FFH
NOP
POP PSW
RET
;************按键识别程序************
AJSB: MOV A,6DH
JNB ACC.3,ABC
CLR L1
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
SETB L1
MOV @R1,6CH
MOV 6CH,#00H
LCALL DISPLAY
INC TIMERS
MOV A,TIMERS
CJNE A,#07H,UNEQUAL
LJMP DYL
UNEQUAL:
DEC R1
LJMP CH_KEY
ABC: JNB ACC.2,CH_KEY
CLR L2
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
SETB L2
INC 6CH
MOV R6,6CH
CJNE R6,#0AH,UNFULL
MOV 6CH,#00H
UNFULL:
LCALL DISPLAY
LJMP CH_KEY
;************密码比较子程序*********
DYL: PUSH PSW
MOV TIMERS,#00H
MOV R5,#07H
MOV R0,#PS1
MOV R1,#AT1
D1: CLR C
MOV A,@R0
SUBB A,@R1
JNZ WRONG ;密码错误
DEC R0
DEC R1
DJNZ R5,D1
NOP
LCALL OPEN_LOCK ;跳转到开锁
AJMP EXIT2
WRONG: LCALL WRONG1
EXIT2: NOP
POP PSW
RET
OPEN_LOCK: CLR L3 ;开锁灯亮五秒
LCALL INITPS
LCALL DELAY5S
SETB L3
AJMP CH_KEY
WRONG1: INC TIMERS1
MOV R7,TIMERS1
CLR C
CJNE R7,#03H,D0
D0: JC NEXT1
CLR L4 ;锁定指示灯亮
LCALL WARN2S
LCALL WARN2S
LCALL WARN2S
LCALL WARN2S
LCALL WARN2S
LCALL WARN2S
LCALL WARN2S
LCALL WARN2S
LCALL WARN2S
LCALL WARN2S
LCALL CLOSE_KEY ;锁定按键八秒
MOV TIMERS1,#00H
LJMP NEXT2
NEXT1: LCALL WARN2S
LCALL WARN2S
NEXT2: LCALL WARN2S
MOV TIMERS,#00H ;密码输入次数清零
MOV R7,#07H
MOV R1,#PS1
MOV A,#00H
INIT: MOV @R1,A
DEC R1
DJNZ R7,INIT
MOV R1,#PS1
NOP
AJMP CH_KEY
CLOSE_KEY: MOV R2,#8
LOOP: LCALL DELAY1S
DJNZ R2,LOOP
NOP
SETB L4 ;解锁指示(即锁键指示灯灭)
RET
;****************报警子程序*******************
WARN2S: PUSH PSW
MOV R6,#20 ;调用20次BP
WARN: LCALL BP
DJNZ R6,WARN
NOP
NOP
POP PSW
NOP
RET
BP: MOV R2,#20 ;发声子程序
BP1: CPL SPK
LCALL DELY500
DJNZ R2,BP1
NOP
RET
DELY500: MOV R7,#250
LOOP1: NOP
DJNZ R7,LOOP1
RET
;****************初始化程序******************
INITPS: PUSH ACC ;初始化密码缓冲区
PUSH PSW
MOV TIMERS,#00H ;密码输入次数清零
MOV TIMERS1,#00H ;密码输错次数清零
MOV R7,#07H
MOV R1,#PS1
MOV A,#00H
INIT_PS: MOV @R1,A
DEC R1
DJNZ R7,INIT_PS
MOV R1,#PS1
POP PSW
POP ACC
NOP
RET
DELAY1S: MOV R3,#50 ;一秒延时
DEL2: MOV R4,#100
DEL1: MOV R5,#100
DJNZ R5,$
DJNZ R4,DEL1
DJNZ R3,DEL2
RET
T100MSD: MOV R3,#200 ;100ms延时
DL1: MOV R4,#125
DL2: DJNZ R4,DL2
DJNZ R3,DL1
RET
T12MS: MOV R7,#18H
TM1: MOV R6,#0FFH
TM2: DJNZ R6,TM2
DJNZ R7,TM1
RET
DELAY5S: MOV R7,#5
DEF: DJNZ R7,EFG
LJMP XYZ
EFG: LCALL DELAY1S
LJMP DEF
XYZ: RET
DISPLAY:
PUSH ACC
PUSH PSW
MOV DPTR,#0030H
MOV A,6CH
MOVC A,@A+DPTR
MOV P1,A
NOP
POP PSW
POP ACC
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -