📄 ex9-8.asm
字号:
ORG 0000H
START: LJMP MAIN
ORG 0013H
LJMP PKEYI
ORG 0030H
MAIN: MOV SP,#60H ;主程序
MOV 70H,#00 ;设置显示缓冲区初值
MOV 71H,#01
MOV 72H,#02
MOV 73H,#03
MOV 74H,#04
MOV 75H,#05
MOV 76H,#06
MOV 77H,#07
LCALL INI79 ;调8279初始化子程序
LOOP: LCALL RDIR ;调8279显示更新子程序
SJMP LOOP
;8279初始化子程序
INI79: MOV DPTR,#7FFFH ;8279命令口地址
MOV A,#0D1H ;清0命令
MOVX @DPTR,A
WNDU: MOVX A,@DPTR ;等待8279清0结束
JB ACC.7,WNDU
MOV A,#00 ;设置8279为编码扫描方式,两键互锁
MOVX @DPTR,A
MOV A,#34H ;设置8279扫描频率
MOVX @DPTR,A
MOV IE,#84H ;允许8279中断
RET
;8279显示更新子程序
RDIR: MOV DPTR,#7FFFH ;8279命令口地址
MOV A,#90H ;写显示RAM命令
MOVX @DPTR,A
MOV R0,#70H ;显示缓冲器首地址→R0
MOV R7,#8
MOV DPTR,#7EFFH
RDLO: MOV A,@R0 ;取显示数据
ADD A,#5 ;加偏移量
MOVC A,@A+PC ;查表转换为段码数据
MOVX @DPTR,A
INC R0
DJNZ R7,RDLO
RET
SEG: DB 3fH,06H,5BH,4FH ;段码表
DB 66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H
DB 00H
;8279按键输入中断服务程序
PKEYI: PUSH PSW
PUSH DPL
PUSH DPH
PUSH ACC
PUSH B
SETB PSW.3 ;选工作寄存器1区
MOV DPTR,#7FFFH ;8279命令口地址
MOVX A,@DPTR ;读FIFO状态字
ANL A,#0FH
JZ PKYR ;判FIFO中是否有数据?
MOV A,#40H ;读FIFO命令
MOVX @DPTR,A
MOV DPTR,#7EFFH ;8279数据口地址
MOVX A,@DPTR ;读数据
MOV R2,A
ANL A,#38H ;计算键值
RR A
RR A
RR A
MOV B,#04H
MUL AB
XCH A,R2
ANL A,#7
ADD A,R2
MOV 70H,A
MOV 71H,#16
MOV 72H,#16
MOV 73H,#16
MOV 74H,#16
MOV 75H,#16
PKYR: POP B
POP ACC
POP DPH
POP DPL
POP PSW
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -