📄 led_51.asm
字号:
;=========4位七段显示、3x3键扫实验==============
;io equ 0ffe8h ;8155控制字口
;ioa equ 0ffe9h ;8155A口()
;iob equ 0ffeah ;8155B口(字位)
;ioc equ 0ffebh ;8155C口(键入)
LEDGD: MOV SP,#60H
MOV DPTR,#0FFE8H ;写8155控制字
MOV A,#43H
MOVX @DPTR,A ;令A、B 口为输出口
;C口为输入口
LDEGD: MOV 50H,#7EH ;清显示缓冲单元
MOV A,#10H
MOV R0,#7BH
LEGS: MOV @R0,A
INC R0
CJNE R0,#7EH,LEGS
INC A ;送待令符“p”
MOV @R0,A
LEDT: CALL XEG2 ;调闪动显示、键扫消抖子程序
CJNE A,#10H,LEG0
LEG0: JNC LDEGD ;是返“P”命令转!
acall XEG3 ;送当前LED光标闪动单元
DB 7BH,7EH ;调正光标闪动指针
SJMP LEDT ;完成送数操作返回显示键扫入口
;=======刷新光标单元调正闪动指针==========
XEG3: MOV R4,A
MOV R0,#50H
MOV A,@R0
MOV R1,A
MOV A,R4
MOV @R1,A
CLR A
POP DPH
POP DPL
MOVC A,@A+DPTR
INC DPTR
CJNE A,01H,XG30
dec r1
clr a
MOVC A,@A+DPTR
XG31: MOV @R0,A
INC DPTR
PUSH DPL
PUSH DPH
RET
XG30: DEC R1
MOV A,R1
SJMP XG31
;==========闪动显示子程序===============
XEG2: MOV R6,#80H
XGE0: ACALL XGEL
JNB ACC.5,XGX0
DJNZ R6,XGE0
MOV R6,#30H
MOV R0,#50H
MOV A,@R0
MOV R0,A
MOV A,@R0
MOV R7,A
MOV A,#10H
MOV @R0,A
XGE1: ACALL XGEL
JNB ACC.5,XGEX1
DJNZ R6,XGE1
MOV A,R7
MOV @R0,A
SJMP XEG2
XGEX1: MOV R6,A
MOV A,R7
MOV @R0,A
MOV A,R6
XGX0: RET
;========= 显示、键扫消抖程序 =========
XGEL: CALL DGEIS ;显示
XCD: CALL KGEEY ;键扫
;========= 键消抖处理程序 =============
MOV R4,A
MOV R1,#48H
MOV A,@R1
MOV R2,A
INC R1
MOV A,@R1
MOV R3,A
MOV A,R4
XRL A,R3
MOV R3,04H
MOV R4,02H
JZ XGE10
MOV R2,#88H
MOV R4,#88H
XGE10: DEC R4
MOV A,R4
XRL A,#82H
JZ XGE11
MOV A,R4
XRL A,#0EH
JZ XGE11
MOV A,R4
JZ XGE12
MOV R4,#20H
DEC R2
SJMP XGE13
XGE12: MOV R4,#0FH
XGE11: MOV R2,04H
NOP
NOP
MOV R4,03H
XGE13: MOV R1,#48H
MOV A,R2
MOV @R1,A
INC R1
MOV A,R3
MOV @R1,A
MOV A,R4
JB ACC.5,XG113
MOV DPTR,#LSG3
MOVC A,@A+DPTR
XG113: RET
;=========== 显示子程序===============
DGEIS: PUSH DPH
PUSH DPL
SETB RS1
MOV R0,#7EH
MOV R2,#80H
MOV R3,#00H
MOV DPTR,#LS0
LGES2: MOV A,@R0
MOVC A,@A+DPTR
MOV R1,#0E9H
ORL A,#80H
MOVX @R1,A
MOV A,R2
inc R1
ORL A,#0FH
MOVX @R1,A
DJNZ R3,$
MOV A,R2
CLR C
RRC A
MOV R2,A
DEC R0
JNB ACC.3,LGES2
MOV A,#0FH
movx @R1,A
dec r0
CLR A
movx @r0,a
CLR RS1
POP DPL
POP DPH
RET
;=============键扫子程序====================
KGEEY: SETB RS1
MOV R2,#0FEH
MOV R3,#03H
MOV R0,#00H
LGEP1: MOV R1,#0EAH
MOV A,R2
MOVX @R1,A
RL A
MOV R2,A
inc r1
MOVX A,@R1
CPL A
ANL A,#07H
JNZ LGEP0
INC R0
DJNZ R3,LGEP1
XGEP33: MOV A,#20H
XGEP3: mov r2,a
MOV A,#0FH
mov r1,#0EAH
movx @r1,a
mov a,r2
CLR RS1
RET
LGEP0: CPL A
JB ACC.0,XGEP0
MOV A,#00H
SJMP LGEPP
XGEP0: JB ACC.1,XGEP1
MOV A,#08H
SJMP LGEPP
XGEP1: JB ACC.2,XGEP33
MOV A,#10H
LGEPP: ADD A,R0
sjmp xGEp3
;=========== 键值表 ===================
LSG3: DB 00H,01H,02H,20H,20H,20H,20H,20H;
; 0, 1, 2,无键按下值
DB 03H,04H,05H,20H,20H,20H,20H,20H;
; 3, 4, 5,
DB 06H,07H,10H,20H,20H,20H,20H,20H;
; 6, 7, 返回键按下值
;============ 字形表 ===================
LS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92H
DB 82H,0F8H,80H,90H,88H,83H,0C6H
DB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -