?? 接收.asm
字號:
ORG 0000H
MOV SP,#70 ;設置堆棧
MOV SCON,#50H ;UART工作在MODE1
MOV TMOD,#20H ;TIMER1工作在MODE2
MOV TH1,#0F3H ;波特率為2400
SETB TR1 ;啟動TIMER1
START: ORL P2,#0FFH ;電鎖不動作
MOV R4,#06H ;清除鍵盤顯示器地址30H~35H
MOV R0,#30H
CLEAR: MOV @R0,#00H
INC R0
DJNZ R4,CLEAR
L1: JBC RI,UART ;是否有接收信號?如有RI=1
CALL DISP
JMP L1
UART: MOV A,SBUF ;將接收的數據存入累加器
MOV R7,A
XRL A,#0AH ;是否為比較碼“0AH”,是則比較密碼
JZ COMP
MOV A,R7
XRL A,#0BH ;是否為清除碼“0BH”,是則清除為“000000”
JZ START
MOV A,R7 ;不是“0AH”或“0BH”,就是數字碼
XCH A,30H ;將數字碼存入(30H)
XCH A,31H ;舊(30H)值存入(31H)
XCH A,32H ;舊(31H)值存入(32H)
XCH A,33H ;舊(32H)值存入(33H)
XCH A,34H ;舊(33H)值存入(34H)
XCH A,35H ;舊(34H)值存入(35H)
CALL DISP ;調用顯示子程序
JMP L1
DISP: MOV A,35H ;D6數據值加上74138掃描值
ADD A,#50H ;顯示D6
MOV P0,A ;掃描延時
CALL DELAY
MOV A,34H ;D5數據值加上74138掃描值
ADD A,#40H ;顯示D5
MOV P0,A ;掃描延時
CALL DELAY
MOV A,33H ;D4數據值加上74138掃描值
ADD A,#30H ;顯示D4
MOV P0,A ;掃描延時
CALL DELAY
MOV A,32H ;D3數據值加上74138掃描值
ADD A,#20H ;顯示D3
MOV P0,A ;掃描延時
CALL DELAY
MOV A,31H ;D2數據值加上74138掃描值
ADD A,#10H ;顯示D2
MOV P0,A ;掃描延時
CALL DELAY
MOV A,30H ;D1數據值加上74138掃描值
ADD A,#00H ;顯示D1
MOV P0,A ;掃描延時
CALL DELAY
RET
COMP: ;比較按鍵值與密碼值
MOV R0,#35H
MOV R2,#06H ;比較6個碼
MOV R7,#00 ;TABLE密碼取值指針
X4: MOV A,R7
MOV DPTR,#TABLE ;數據指針指到TABLE
MOVC A,@A+DPTR ;至TABLE取密碼值
XRL A,@R0 ;與顯示值比較
JNZ X7 ;不相同則跳至START清除
DEC R0 ;比較下一個碼
INC R7
DJNZ R2,X4 ;六個碼比較完畢了?
MOV P2,#0FEH ;令電鎖動作
MOV R2,#200 ;0.1秒
X6: MOV R6,#248
DJNZ R6,$
DJNZ R2,X6
X7: JMP START
DELAY: MOV R7,#06 ;顯示器掃描時間
D1: MOV R6,#248
DJNZ R6,$
DJNZ R7,D1
RET
TABLE: DB 02H,02H,01H,05H,08H,02H
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -