📄 8155kd.asm
字号:
;键盘显示程序
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV 10H,#0 ;显示区送初值
MOV 11H,#1
MOV 12H,#2
MOV 13H,#3
MOV 14H,#4
MOV 15H,#5
MOV DPTR,#0FF20H ;8155方式
MOV A,#03
MOVX @DPTR,A
SDISP: LCALL DISP
OFFDISP:MOV A,#0FFH ;关显示器
MOV DPTR,#0FF22H
MOVX @DPTR,A
;--------------------------------------读键程序
MOV DPTR,#0FF21H ;是否有键输入?
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#0FF23H
MOVX A,@DPTR
ANL A,#07H
CJNE A,#07H,HK
AJMP SDISP
HK: MOV R7,#10
LCALL DELAY
MOV DPTR,#0FF21H ;再次判断是否有键输入?
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#0FF23H
MOVX A,@DPTR
ANL A,#07H
CJNE A,#07H,READK ;确实有键,转读键程序
AJMP SDISP
READK:
MOV R4,#0 ;键盘列数初值
MOV R5,#0FEH ;扫描键盘第一列
SCAN: MOV A,R5
MOV DPTR,#0FF21H ;
MOVX @DPTR,A
RL A ;准备扫下一列
MOV R5,A
MOV DPTR,#0FF23H ;读行线(8155C口)
MOVX A,@DPTR
ANL A,#07H
CJNE A,#07H,KEYOP1 ;是这一列, 再确定是哪一行
INC R4 ;不是这一列,列数+1
CJNE R4,#8,SCAN ;没有扫描完列线,继续
LJMP SDISP
KEYOP1: ;确定行线(行数×8)
JB ACC.0,KEYOP2
MOV A,#0
AJMP KEYOP
KEYOP2: JB ACC.1,KEYOP3
MOV A,#08H
AJMP KEYOP
KEYOP3: JB ACC.2,KEYOP4
MOV A,#10H
AJMP KEYOP
KEYOP4: JB ACC.3,SDISP
MOV A,#18H
KEYOP: ADD A,R4 ;合成键值 (行数×8+列数)
MOV B,A
CLR C ;判断键值是否 > F
SUBB A,#10H
JC KEYNAM
AJMP SDISP ; >F,按键无效
;-------------------------------------------------------
KEYNAM: MOV A,B
MOV DPTR,#KEYC ;确定键名
MOVC A,@A+DPTR
MOV 1EH,A ;暂存键名
MOV R0,#14H ;显示区的数移位
MOV R1,#15H
DISLOOP:MOV A,@R0
MOV @R1,A
DEC R0
DEC R1
CJNE R1,#10H,DISLOOP ;----------------
MOV 10H,1EH ;键码送显示区
MOV DPTR,#0FF21H ;按键是否抬起?
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#0FF23H
KEYON: MOVX A,@DPTR
ANL A,#0FH
CJNE A,#0FH,KEYON ;没有抬起,再查
LJMP SDISP ;--------------
DELAY: MOV R6,#0
DJNZ R6,$
DJNZ R7,DELAY
RET
DISP: MOV R0,#10H
MOV R1,#01H
DNEXT: MOV DPTR,#DISPC ;指向显示码表
MOV A,@R0 ;取显示数
MOVC A,@A+DPTR ;取显示码
MOV DPTR,#0FF22H ;显示数从PB口送出
MOVX @DPTR,A
MOV DPTR,#0FF21H ;确定显示位
MOV A,R1
MOVX @DPTR,A
RL A
MOV R1,A
MOV R7,#2
ACALL DELAY
INC R0
CJNE R0,#16H,DNEXT
RET
KEYC: DB 07H,04H,08H,05H,09H,06H,0AH,0BH ;0----7
DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH ;8----F
DB 10H,12H,14H,16H ;TV,EPRGH,PRT,EXEC
DB 11H,13H,15H,17H ;REG,ODRW,COMP,PCDBG
DB 18H,1AH,1CH,1EH ;F1,EPROM,MOVE,SETP
DB 19H,1BH,1DH,1FH ;F2,EPCH,DAR,MON
DISPC: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -