📄 8255.asm
字号:
CODE SEGMENT
;MAIN PROC FAR
ASSUME CS:CODE,DS:CODE
ORG 100H
START: MOV AX,CODE
MOV DS,AX
MOV DX,303H ;8255A命令口
MOV AL,10001000B ;工作方式字
OUT DX,AL ;A口0方式,C4-C7输入,C0-C3输出
;检查是否有按键按下
BEGIN: MOV CX,4
MOV AL,00H
L0: OUT DX,AL ;循环输出扫描码,使所有行线C0-C3为0
ADD AL,02H
LOOP L0
WT: MOV DX,302H
IN AL,DX ;读入列线C4-C7状态,检查是否有列线为0
AND AL,0FH
CMP AL,0FH
JZ WT
;延时去抖动
MOV CX,7FFH
L1: LOOP L1
;识别被按下的键
MOV BL,4 ;行数送BL
MOV BH,4 ;列数送BH
MOV AL,0FEH ;扫描码,0行为0?????
MOV CL,0FH ;列线屏蔽码送CL
MOV CH,0FFH ;置键号初值为-1
L2: OUT DX,AL ;扫描其中一行
ROL AL,1
MOV AH,AL ;修改扫描码并送AH保存
IN AL,DX
AND AL,CL
CMP AL,CL ;读入列线值,检查是否有列线为0
JNZ L3 ;有列线为0时转去找该列线
ADD CH,BH ;否则,指向该行末列键号
MOV AL,AH ;取回扫描码
DEC BL
JNZ L2 ;行数减1,未完转下一行
JMP BEGIN
L3: INC CH ;键号加1,指向本行首列键号
RCR AL,1
JC L3 ;该列非0,检查下一列
MOV AL,CH ;该列为0,键号送AL
;JMP KEYTABLE ;转查找键盘编码表子程序,获取与键功能对应的编码
MOV AH,4CH
INT 21H ;返回DOC
;MAIN ENDP
;KEYTABLE PROC FAR ;AH存放行号,Al存放列号
;MOV DX,350H ;点亮LED
CODE ENDS ;代码段结束
END START ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -