键盘--(微机原理实验五)
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
相关文章推荐
- ORA-12154:TNS:无法解析指定的连接标识符
- 合并关联表数据
- 【转】HBase 超详细介绍
- github 提交代码 failed to push some refs to git
- iOS 应用支持 IPv6,就那点事儿
- 对css3动画事件的监听
- 《Python基础教程》学习笔记 Chap3 使用字符串
- Volley框架的基本解读(六)
- 如何增加微信朋友圈分享链接的小图片
- OD中条件断点的设置方法
- Oracle查看分区、索引、表占用空间大小
- GCDAsyncSocket 支持IPv6 需要设置IPv4PreferredOverIPv6=NO
- Android 简述touch事件中的MotionEvent
- UX web instance
- ShareSDK 取消分享到微信收藏
- android shape的使用
- JAVA学习笔记四之方法
- Android自定义ViewGroup的实现方法
- Css学习总结(1)——20个很有用的CSS技巧
- android 中 EditText加入图标 更改边框颜色 设置透明 代码