微机原理与接口技术——8255A的应用-键盘与数码管

(一) 操作练习

对于8255A的3个并行端口,选用端口C的低4位和高4位分别接4*4键盘的行列信号线,选用端口A驱动数码管,数码管采用静态共阳极接法。实现当有一个按键按下时,LED和数码管均能显示其按键值。

IO3 EQU 0600H
CODE SEGMENT 'CODE'
ASSUME CS:CODE,DS:CODE
START: MOV AX,CODE
       MOV DS,AX
L: MOV AL,    10000001B     ;设置8255A工作方式0(二三为00表示工作方式0),端口A、B输出(所以第四位0代表A输出第六位0代表B输出),端口C高4位输出(第五位0代表C高位输出)、低4位输入(第八位1代表低位输入)
   MOV DX,IO3+6
   OUT DX,AL
   MOV DX,IO3+4
   MOV AL,00   ;高4位送0
   OUT DX,AL
NOKEY: IN AL,DX
       AND AL,0FH
       CMP AL,0FH
       JZ NOKEY
       CALL DELAY10
       IN AL,DX
       MOV BL,0
       MOV CX,4
  LP1: SHR AL,1 
       JNC LP2
       INC BL
       LOOP LP1
  LP2: MOV AL,    10001000B            ;设置8255A工作方式0(二三为00表示工作方式0),端口A、B输出(所以第四位0代表A输出第六位0代表B输出),端口C高4位输入(第五位1代表C高位输入)、低4位输出(第八位0代表低位输出)
       MOV DX,IO3+6
	   OUT DX,AL
	   MOV DX,IO3+4
	   MOV AL,00  ;低4位送0
	   OUT DX,AL
	   IN AL,DX
	   AND AL,0F0H
	   CMP AL,0F0H
	    JZ L
	    MOV BH,0
	    MOV CX,4
   LP3: SHL AL,1
        JNC LP4
	    INC BH
	    LOOP LP3
   LP4: MOV AX,4
        MUL BH
	    ADD AL,BL
	    MOV DX,IO3+2
	    OUT DX,AL
	    MOV BX,OFFSET SEGDATA
	    XLAT
	    MOV DX,IO3
	    OUT DX,AL
	    MOV CX,0
   J1: LOOP J1
	   JMP L
		RET
DELAY10 PROC
MOV CX,882
LOOP $
RET
DELAY10 ENDP
SEGDATA DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,
0A1H,86H,8EH,0BFH
CODE ENDS
END START

仿真结果(截图放在下面):
在这里插入图片描述
在这里插入图片描述

  1. 请回答:下面这段代码实现了什么功能?
NOKEY: IN AL,DX
        AND AL,0FH
      CMP AL,0FH
          JZ NOKEY
          CALL DELAY10
        IN AL,DX
          MOV BL,0
MOV CX,4
LP1:  SHR AL,1 
JNC LP2
INC BL
LOOP LP1

确定按键列是否输入并判断输入键位置得出代表的数据

  1. 请回答:下面这段代码实现了什么功能?
IN AL,DX
	   AND AL,0F0H
	   CMP AL,0F0H
	   JZ L
	   MOV BH,0
	   MOV CX,4
   LP3: SHL AL,1
        JNC LP4
INC BH
LOOP LP3

确定按键行是否输入并判断输入键位置得出代表的数据

  1. 请回答:MUL和XLAT是什么指令,它们分别实现了什么功能?
    MUL是乘法指令,实现操作数与AL相乘;
    XLAT是查表指令,把待查表格的一个字节内容送到AL中。

  2. 标出下面按键的行号和列号。(提示:COL4是第几行,ROW1是第几列)

在这里插入图片描述
COL4:第0行 ROW1:第0列
COL3:第1行 ROW2:第1列
COL2:第2行 ROW3:第2列
COL1:第3行 ROW4:第3列

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值