8086与8255A(矩阵按钮的应用)

在这里插入图片描述
这一段是用来选择端口(CS),三个八位锁存器74ls373用于锁存8086CPU的20位地址位。将对应的地址位连接右下角的位选电路,用于选择对应的端口号(0000 0000 0110 0–0B)CS。当地址位006-H时,CS端口被选中。
在这里插入图片描述
CS端口与8255相连,当CS被选中时,8255启用。AB1与AB2两位地址用来选择使用8255四个寄存器中的哪一个寄存器。AB1AB2对应00、01、10、11分别对应端口A、端口B、端口C和控制端。端口A用于输出,输出元件使用数码管。端口B接受由矩阵按钮行的信号。端口C接受由矩阵按钮列的信号。
在这里插入图片描述
矩阵按钮。
在这里插入图片描述
初始化。设置控制字1000 0001B,即端口A选择方式0,端口A输出,端口C高四位输出,端口B方式0,端口B输出,端口C第四位输入。将控制字送给控制端口66H。将62H端口赋值为0,用于判断是否按钮按下。将64H端口的值赋值给al,当al某一位为1时,则表示有按钮按下。重复执行一次相同的程序,是去抖动,防止误触。如果两次执行的结果都为1,则表示按下按钮。再检查数值。

DATA SEGMENT
TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,
7FH,6FH,77H,7CH,58H,5EH,79H,71H

DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA

START:
MOV AX,DATA
MOV DS,AX
E:
MOV AL,10000001B
OUT 66H,AL ;控制字送入控制端口
;写行读列
ABC:MOV AL,00000000B
OUT 62H,AL
IN AL,64H
AND AL,0FH
CMP AL,0FH
JNC ABC
;去抖动
mov cx,03000h
LOOP $
;写行读列
MOV AL,00000000B
OUT 62H,AL
IN AL,64H
AND AL,0FH
CMP AL,0FH
JNC ABC
;确定列号
MOV DL,0
X2:MOV CX,4
SHR AL,1
JNC X1
INC DL
LOOP X2
X1:MOV BL,DL
MOV AL,10000010B
OUT 66H,AL ;控制字送入控制端口
;写列读行
DEF:MOV AL,00000000B
OUT 64H,AL
IN AL,62H
AND AL,0FH
CMP AL,0FH
JNC DEF
;去抖动
mov cx,03000h
LOOP $
;写行读列
MOV AL,00000000B
OUT 64H,AL
IN AL,62H
AND AL,0FH
CMP AL,0FH
JNC DEF
;确定列号
MOV DL,0
X3:MOV CX,4
SHR AL,1
JNC X4
INC DL
LOOP X3
X4:MOV AL,DL
SHL AL,1
SHL AL,1
ADD AL,BL

OUTPUT:MOV BX,OFFSET TABLE
XLAT
OUT 60H,AL
mov cx,30000h
LOOP $
JMP E
MOV AH,4CH
INT 21H
ENDLESS:
JMP ENDLESS
CODE ENDS
END START

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值