📄 ex5121.asm
字号:
D_BUF EQU 77H
P_CON EQU 0FF20H
PORT_A EQU 0FF21H
PORT_B EQU 0FF22H
PORT_C EQU 0FF23H
;
ORG 0000H
LJMP START
;
ORG 0030H
START: MOV SP,#60H
MOV DPTR,#P_CON ;8155控制字
MOV A,#03H
MOVX @DPTR,A
MOV R0,#D_BUF
MOV R7,#6
LP0: MOV @R0,#10H ;关显示
INC R0
DJNZ R7,LP0
LCALL DISPLAY
MOV R0,#40H
MOV R1,#7AH
MOV R7,#1
CLR 0
CLR 1
LP1: SETB PSW.3
LCALL KEYIN
CLR PSW.3
LCALL INDT
JNB 1,LP1
CLR 0
CLR 1
MOV R0,#50H
MOV R1,#78H
MOV R7,#1
LP3: SETB PSW.3
LCALL KEYIN
CLR PSW.3
LCALL INDT
JNB 1,LP3
MOV R2,40H
MOV R3,50H
LCALL BTD
LP4: MOV A,R4
ANL A,#0F0H
SWAP A
MOV 7CH,A
MOV A,R4
ANL A,#0FH
MOV 7BH,A
MOV A,R5
ANL A,#0F0H
SWAP A
MOV 7AH,A
MOV A,R5
ANL A,#0FH
MOV 79H,A
MOV A,R6
ANL A,#0F0H
SWAP A
MOV 78H,A
MOV A,R6
ANL A,#0FH
MOV 77H,A
LP5: LCALL DISPLAY
SETB PSW.3
LCALL KEYIN
CLR PSW.3
LCALL START
INDT: CLR 1 ;保存
ANL A,#0FH
MOV @R1,A
DEC R1
JBC 0,INL1
SETB 0
SWAP A
MOV @R0,A
SJMP INLR
INL1: ANL A,#0FH
XCHD A,@R0
DEC R0
DJNZ R7,INLR
SETB 1
INLR: RET
;
BTD: CLR A ;二进制转十进制
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#16
BOOP: CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,BOOP
RET
DISPLAY:MOV R0,#D_BUF+5 ;显示子程序
MOV R2,#20H
DIS_LP: MOV DPTR,#DATACO
MOV A,@R0
MOVC A,@A+DPTR
MOV DPTR,#PORT_B
MOVX @DPTR,A
MOV DPTR,#PORT_A
MOV A,R2
MOVX @DPTR,A
MOV R3,#00H
DJNZ R3,$
DEC R0
MOV A,R2
RR A
MOV R2,A
JNB ACC.7,DIS_LP
RET
DATACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
KEYIN: ACALL DISPLAY ;键扫子程序
ACALL INKEY
CJNE A,#0FFH,FLASH
SJMP KEYIN
FLASH: RET
INKEY:
ACALL IS_KEY
CJNE A,#0FFH,SK1
SJMP KEYSM10
SK1: ACALL DISPLAY
ACALL DISPLAY
ACALL IS_KEY
CJNE A,#0FFH,KEYSM
SJMP KEYSM10
KEYSM:
MOV A,#0FFH
MOV DPTR,#0FF22H
MOVX @DPTR,A
KEYSM0: MOV R2,#0FEH
MOV R3,#08H
MOV R0,#00H
KEYSM1: MOV A,R2
MOV DPTR,#0FF21H
MOVX @DPTR,A
NOP
RL A
MOV R2,A
MOV DPTR,#0FF23H
MOVX A,@DPTR
CPL A
NOP
NOP
NOP
ANL A,#0FH
JNZ KEYSM2
INC R0 ;没有按键
DJNZ R3,KEYSM1
SJMP KEYSM10
KEYSM2: ;有按键
CPL A ;判断键号
JB 0E0H,KEYSM3
MOV A,#00H
SJMP KEYSM7
KEYSM3: JB 0E1H,KEYSM4
MOV A,#08H
SJMP KEYSM7
KEYSM4: JB 0E2H,KEYSM5
MOV A,#10H
SJMP KEYSM7
KEYSM5: JB 0E3H,KEYSM12
MOV A,#18H
KEYSM7: ADD A,R0
CJNE A,#10H,KEYSM9
KEYSM9: JNC KEYSM12
MOV DPTR,#KEYDATA
MOVC A,@A+DPTR
KEYSM12:PUSH ACC ;等按键释放
KEYSM11:ACALL DISPLAY
ACALL IS_KEY
CJNE A,#0FFH,KEYSM11
POP ACC
KEYSM10:RET
IS_KEY: MOV DPTR,#PORT_A ;是否按键
CLR A
MOVX @DPTR,A
MOV DPTR,#PORT_C
MOVX A,@DPTR
ORL A,#0FCH
RET
KEYDATA:DB 07H,04H,08H,05H,09H,06H,0AH,0BH
DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -