1. 基本输入输出应用举例
(1) 检测开关量的状态
(2) 七段LED显示器显示开关状态
工作状态:
A口工作于方式0,输入
B口工作与方式0,输出
工作过程:
读取开关的状态
K
3
K
2
K
1
K
0
K_3K_2K_1K_0
K3K2K1K0。
把
K
3
K
2
K
1
K
0
K_3K_2K_1K_0
K3K2K1K0转换位十六进制,用七段显示译码器输出
2. 键盘接口
A口作输出,B作输入。
四条行线接到
P
A
3
∼
P
A
0
,
P
B
3
∼
P
B
0
PA_3 \sim PA_0,PB_3 \sim PB_0
PA3∼PA0,PB3∼PB0
四条列线接到
P
B
4
∼
P
B
7
PB_4 \sim PB_7
PB4∼PB7
B口既能读列信号,也能读行信号。
B口的高四位存储行信息,第四位存储列信息
当一个按键被按下,它的所在行输出一个低电平,由于按下后的行列相连,列也表现为低电平。
-
检测矩阵中是否有键压下的方法:
自输出口A向所有行线输出低电平,再通过B口的低4位读取列值,若有零值,则有键被按下。 -
确认上一次压下的键是否已松开的方法:
-
消除键抖动的方法:检测到有键压下后,延长一定时间,再检查是否仍然被压下,如果是,则确实被按下。
-
确定压下键所在的行列号的方法:先从A口输出一个低电平到一行线上,再从B口读入各列的值,若没有一列为低电平,说明压下的键不在此列。再向下一行输出一个低电平,检测各列线上是否有低电平。依次对每一行重复,直到检查到某一列线出现低电平为止。
假设
- 端口A——0FF9H
- 端口B——0FFBH
- 端口C——0FFDH
- 控制字寄存器——0FFFH
MOV DX 0FF9H