;4X4 行列矩阵键盘*行扫描法*
.MODEL SMALL
.DATA
ASCTABLE DB '0123456789ABCDER'
CTRL EQU 0C803H
PA EQU 0C800H
PB EQU 0C801H
PC EQU 0C802H
.CODE
.STARTUP
START: MOV DX,CTRL ;设置 8255 的 PC 为列线输入,PB 为行线输出
MOV AL,89H
OUT DX,AL
NEXT: MOV DX,PB
MOV AL,0
OUT DX,AL
MOV DX,PC
AB: IN AL,DX
AND AL,0FH
CMP AL,0FH
JZ AB
MOV CX,0;闭合延时去抖
LOOP DELAY1
DELAY1:
MOV BH,0
MOV BL,0
MOV CX,4
MOV AH,0FEH
AGAIN: MOV AL,AH
MOV DX,PB
OUT DX,AL
MOV DX,PC
IN AL,DX
AND AL,0FH
CMP AL,0FH
JNZ AB1
ADD BH,4
ROL AH,1
LOOP AGAIN
JMP NEXT
AB1:
AB3:
MOV CX,4
SHR AL,1
JC AB2
JMP AB4
AB2:
INC BL
LOOP AB3
AB4:
ADD BH,BL
MOV AL,BH
LEA BX,ASCTABLE
XLAT
MOV DL,AL
MOV AH,2
INT 21H
push dx
MOV CX,0
;释放延时去抖
DELAY2:
LOOP DELAY2
AB5:
MOV DX,PC
IN AL,DX
AND AL,0FH
CMP AL,0FH
JNZ AB5
pop dx
CMP dl,'R'
JNZ NEXT
.EXIT 0
ex:
END