DATAS SEGMENT
TAB DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
KEYSCAN: MOV AL,10000001B;8255A的方式选择控制字为81H
MOV DX,36H;控制端口为36H
OUT DX,AL;8255A方式选择控制字写入控制端口
WAIT1: MOV AL,00001111B;让列全为0,行为1
MOV DX,34H;PC口地址为34H
OUT DX,AL;把行和列的状态送到C端口
IN AL,DX;读行线的状态
AND AL,00001111B
CMP AL,0FH
JZ KEYEND;若相等(行全为1),则无键按下,使用WAIT时要等待按键按下
MOV CL,0EFH;(11101111B,扫描初值)
MOV CH,0;0列
LP1:MOV DX,34H
MOV AL,CL
OUT DX,AL
IN AL,DX
TEST AL,00000001B;
JNZ LONE;表示0行没有按下,则跳转到下一行
MOV AL,00H;行首值
JMP KEYJS;无条件跳转到计算键值
LONE: TEST
键盘--(微机原理实验五)
最新推荐文章于 2022-11-22 22:20:29 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)