您的位置:首页 > 其它

键盘--(微机原理实验五)

2016-05-25 14:31 483 查看
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 AL,00000010B
JNZ  LTWO
MOV  AL,04H;行首值
JMP  KEYJS
LTWO: TEST AL,00000100B
JNZ  LTHR
MOV  AL,08H;行首值
JMP  KEYJS
LTHR: TEST AL,00001000B
JNZ  NEXT;若最后一行都扫描完了,没有键按下,则跳转到下一列
MOV  AL,0CH;行首值
JMP  KEYJS
KEYJS: ADD  AL,CH;计算键值
LEA  BX,TAB
XLAT;(换码指令,把数据段中偏移地址为BX+AL的内存单元的内容送到AL中)无规则的数据放到表格中可以有序输出
MOV  DX,30H;将键值送到PA口显示输出
OUT  DX,AL

MOV  DX,34H
MOV  AL,0FH
OUT  DX ,AL
WAIT2: IN   AL,DX
AND  AL,0FH
CMP  AL,0FH
JNZ  WAIT2;JNZ表示有键按下
KEYEND: JMP  KEYSCAN;RET
NEXT: INC  CH;列加1
ROL  CL,1;修改扫描值
CMP  CL,0FEH
JZ   KEYEND
JMP  LP1

MOV AH,4CH
INT 21H
CODES ENDS
END START

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: