11.4 8255、键盘与显示接口
前面几节分别构建了译码器、状态寄存器和握手通路。8255 可编程外围接口(8255 Programmable Peripheral Interface)把三个 8 位端口 A、B、C 封装在一块芯片中,并允许软件配置方向和工作方式。软件通过写入控制字完成配置。
构造 8255 方式设置控制字
当控制字 D7 为 1 时,这次写入用于设置 I/O 方式和方向:
| 位 | 含义 |
|---|---|
| D6–D5 | A 组方式:00 为方式 0,01 为方式 1,1x 为方式 2 |
| D4 | A 口方向:1 输入,0 输出 |
| D3 | 方式 0 下 C 口高四位方向 |
| D2 | B 组方式:0 为方式 0,1 为方式 1 |
| D1 | B 口方向:1 输入,0 输出 |
| D0 | 方式 0 下 C 口低四位方向 |
方式 0(Mode 0)提供基本锁存输出或简单输入。方式 1(Mode 1)增加选通输入或输出,并从 C 口分配握手线。方式 2(Mode 2)让 A 口成为带握手控制的 8 位双向总线。由于握手方式会占用部分 C 口引脚,软件不能再假设 C 口八个位全都是通用 I/O。
当 D7 为 0 时,控制字改为针对某个 C 口位的位置位/复位(bit set/reset, BSR)命令:D3…D1 选择 PC0–PC7,D0 决定置位还是复位。它只修改一个位,不会替换整套 I/O 方式配置。
扫描键盘矩阵并驱动显示器
键盘矩阵(keyboard matrix)把按键布置在行线与列线的交点,用较少引脚连接更多按键。为了找出被按下的键,接口每次只激活一行,再读取全部列输入。活动行号与有效列号共同确定按键。
对 4×4 键盘:
1. 把四根行线配置为输出,把四根列线配置为输入。
2. 激活第 0 行并读取各列。
3. 对第 1–3 行重复扫描。
4. 连续多次得到相同结果后,才接收该按键。
消抖(debouncing)用于排除机械触点接通和断开时的快速电气跳变。若没有消抖,一次物理按键可能被识别成多次。多个按键同时按下还可能形成不存在的交点,称为鬼键(ghosting);隔离二极管或软件限制可以避免它。
七段显示器使用 a 到 g 七根独立灯段。数字图案就是一个位掩码;对共阴极显示器而言,高电平点亮对应灯段。多位显示器常使用动态扫描(multiplexing):每次只点亮一位,但切换速度足够快,人眼会觉得所有数字都持续发光。
第 11 章把 CPU 总线周期连接到了真实外围设备行为:地址空间选择、端口译码、状态查询、握手、缓冲、可编程并行 I/O、键盘扫描和可见输出。第 12 章将用能够打断普通程序流程的事件取代反复查询。