?? key lock (1).asm
字號:
;R3——輸入錯誤次數
;R4——密碼個數
;R7——輸入密碼暫存
;R2——鍵值暫存
;R6——延時參數
ORG 00H
SJMP START
ORG 0BH
START:
;設置初始密碼
PASSWORD:
MOV R4,#08H ;密碼個數8個
MOV R0,#40H ;密碼暫存區
MOV A,#00H ;初始密碼0,1,2,3,4,5,6,7
PASSNEXT:
MOV @R0,A
INC R0
INC A
DJNZ R4,PASSNEXT
MLOOP:
CLR P3.0 ;鎖合
SETB P3.1 ;鎖開
SETB P3.2 ;鍵有效
SETB P3.3 ;錯誤
SETB P3.4 ;報警
MOV R3,#03H ;錯誤次數3次
;輸入密碼
GETPW: MOV R4,#08H ;密碼個數
MOV R0,#30H ;輸入密碼暫存區
AGAIN: ACALL KEY ;輸入密碼
CJNE A,#0AH,CONTIUE ;按確認鍵無效
SJMP AGAIN
CONTIUE:
MOV @R0,A
ACALL DISPLED ;按鍵有效顯示
INC R0
DJNZ R4,AGAIN
AGAIN1: ACALL KEY ;按確認鍵
CJNE A,#0AH,AGAIN1
ACALL DISPLED ;按確認鍵有效顯示
ACALL COMP ;比較密碼
SETB P3.0 ;息鎖合
CLR P3.1 ;開鎖
WAIT: MOV C,P3.5 ;是否重新上鎖
JNC MLOOP ;主循環
ACALL TestKey ;是否有鍵按下,是否修改密碼
JZ WAIT ;累加器的內容為0,則轉移;否則執行下一條指令
ACALL CHPSW ;修改密碼子程序
SJMP WAIT
COMP: MOV R4,#08H
MOV R0,#30H
AGAI: MOV 50H,@R0 ;取輸入密碼到50H
MOV A,R0
ADD A,#010H ;40H
MOV R0,A
MOV A,@R0 ;取密碼
MOV B,A
MOV A,R0
SUBB A,#010H ;30H
MOV R0,A
MOV A,B
CJNE A,50H,ONCEMORE ;比較
INC R0
DJNZ R4,AGAI
RET ;正確返回
ONCEMORE:
CLR P3.3 ;輸入錯誤
MOV R6,#0FFH
ACALL DELAY
MOV R6,#0FFH
ACALL DELAY
SETB P3.3
DJNZ R3,GETPW ;3次錯誤輸入
CLR P3.4 ;聲報警
CLR P3.3 ;光報警
W: SJMP W
;修改密碼子程序
CHPSW: MOV R4,#07H
MOV R0,#48H
ACALL KEY
CJNE A,#0AH,CONTIUE2 ;按確認鍵無效
LJMP WAIT ;返回
CONTIUE2:
MOV @R0,A
INC R0
ACALL DISPLED ;按鍵有效顯示
ANOTHER:
ACALL KEY
CJNE A,#0AH,CONTIUE3 ;按確認鍵無效
SJMP ANOTHER
CONTIUE3:
MOV @R0,A
INC R0
ACALL DISPLED ;按鍵有效顯示
DJNZ R4,ANOTHER
AGAIN2: ACALL KEY ;按確認鍵
CJNE A,#0AH,AGAIN2
ACALL DISPLED ;按確認鍵有效顯示
MOV R4,#08H
MOV R0,#40H
MOV R1,#48H
CHANGE: ;確認后修改密碼
MOV A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R4,CHANGE
RET
;按鍵有效顯示
DISPLED:
CLR P3.2 ;按鍵有效顯示
MOV R6,#80H
ACALL DELAY
SETB P3.2
RET
TestKey:MOV P1,#0FH
MOV A,P1 ;讀入鍵狀態
CPL A ;累加器取
ANL A,#0F0H
RET
;取鍵值子程序,陣列式鍵盤
KEY: MOV P1,#0F0H
MOV A,P1
CJNE A,#0F0H,K11
K10: AJMP KEY
K11: MOV R6,#02H
ACALL DELAY
MOV P1,#0F0H
MOV A,P1
CJNE A,0F0H,K12
SJMP K10
K12: MOV B,A
MOV P1,#0FH
MOV A,P1
CJNE A,#0FH,K122
K121: AJMP KEY
K122: MOV R6,#02H
ACALL DELAY
MOV P1,#0FH
MOV A,P1
CJNE A,0FH,K13
AJMP K10
K13:
ANL A,B
MOV B,A
MOV R1,#11
MOV R2,#0
MOV DPTR,#K1TAB
K14: MOV A,R2
MOVC A,@A+DPTR
CJNE A,B,K16
MOV P1,#0FH
K15: MOV A,P1
CJNE A,#0FH,K15
MOV R6,#02H
ACALL DELAY
MOV A,R2
RET
K16: INC R2
DJNZ R1,K14
AJMP K10
;鍵碼表
K1TAB: DB 81H,41H,21H,11H
DB 82H,42H,22H,12H
DB 84H,44H,24H
;延時子程序
DELAY: MOV R6,#80H
AA1: MOV R5,#0F8H
AA: NOP
NOP
DJNZ R5,AA
DJNZ R6,AA1
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -