Files
Operating-System/8086/Exam/第9章 人机交互接口.md
2026-06-29 21:12:21 +08:00

450 lines
25 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第9章 人机交互接口(期末复习总结)
本章内容主要来源于课程 PPT第 337 页起,共 29 页PPT 重点讲述了**键盘接口**与**发光二极管LED七段显示器接口**两部分。本总结在此基础上补充 LCD、打印机、鼠标、触摸屏等常见人机交互设备的知识以便期末复习。
---
## 一、详细内容分析
### 9.1 键盘接口
#### 9.1.0 键盘基本分类
**1. 按编码提供方式分(编码键盘 vs 非编码键盘)**
- **编码键盘**:能够由硬件逻辑自动提供与被按键对应的 ASCII 码或其它编码。某一键按下后,能够直接提供与该键相对应的编码信息。硬件复杂,但使用简单、响应快。
- **非编码键盘**:仅仅提供被按键行和列的矩阵,其它工作都靠程序实现,为系统软件在定义键盘的某些操作上提供了更大的灵活性。本章 PPT 重点讲解非编码键盘。
**2. 按按键连接方式分(线性键盘 vs 矩阵键盘)**
- **线性键盘**:采用独立式按键,直接用 I/O 线构成单个按键电路。适用于按键数量少的场合。
- **矩阵键盘**:行列式键盘,用 I/O 口线组成行、列结构,按键设置在行列的交点上,可有效减少 I/O 口占用(如 4×4 矩阵只需 8 根线)。
#### 9.1.1 消除抖动及重键处理
**1. 抖动Key Bounce**
- 当机械开关的触点闭合时,达到稳定之前需要短暂抖动或弹跳几下,反复闭合、断开几次之后才能可靠地闭合。开关断开时也有同样现象。
- **抖动时间:约 1020ms**。
- 抖动会引起一次按键被读入多次(误识别)。
**2. 消抖方法**
- **硬件消抖**
- 对每一个键加上 **R-C 滤波电路**
- 或加上 **RS 触发器(双稳态触发器)去抖电路**
- **软件消抖**
- 采用 **20ms 左右延迟子程序**,等待键的输出达到完全稳定后才去读取代码;
- 两次读键比较(前沿消抖:第一次检测到按下 → 延时 20ms → 再读一次确认) 。
**3. 重键处理(多键同时按下)**
- 定义:两个或两个以上的键同时按下,或者一个键按下后还未弹开,另一个键又按下的情况。
- 三种解决方法:
1. 不理会所有被按下的键,直至只剩下一个键按下时为止(最简单);
2. 将所有按键的信息存入内部键盘输入缓冲器,逐个处理(成本高);
3. **n 键连锁技术**:当一键被按下时,在此键未完全释放之前,其它的键虽然可被按下或松开,但并不产生任何代码(最常用)。
#### 9.1.2 线性键盘
- 采用独立式按键,每个按键接到独立的 I/O 口线。
- PPT 例题8255A 的 A 口、B 口、C 口、控制口地址为 60H/61H/62H/63H4 个按键 K3K0 接 PA3PA0按下时为 "0",未按为 "1"。
- 控制字归纳为 10010000B90HA 口方式 0 输入B/C 口方式 0 输出。
- 编程步骤:
1. 检测是否有键按下(全 1 无键按下,有 0 表示有键按下);
2. 软件消抖(调用 20ms 延时);
3. 再读一次确认;
4. 逐位比较确定是哪个键K3K0 对应编码 30
5. 若有多个键按下,则设 AH = 0FFH 作为标识。
#### 9.1.3 矩阵键盘
**1. 行扫描法**
- 步骤:
1. **行全输出 0读列值**:若列值全 1无键按下否则有键按下
2. 依次只让一行输出 0其他行输出 1读列值
3. 若列值全 1则按键不在此行转扫描下一行
4. 否则按键在此行,并由此时的行、列构建**位置码**(高 4 位行号 + 低 4 位列号);
5. 通过位置码查表确定按键。
- PPT 例题4×4 键盘0F 共 16 个键):行输出端口 200H列输入端口 201H。
- B 键位于第 2 行第 3 列:行号 = 1011B列号 = 0111B位置码 = 1011 0111B。
- 查表法:将每个键的位置码按顺序存入 TABLE 表,下标即为键号。
- 编程要点:
- 初始化 → 行输出 00H 检查有无键按下 → 软件消抖 → 再次确认 → 循环扫描行(用 `ROL AH, 1` 移位产生扫描码)→ 列值与全 1 比较 → 形成位置码(用 `SHL AH, 4` + `OR AL, AH`)→ 查表得键号 → 存 AH。
- 4 行全扫完却未发现键按下(可能是干扰)时,以 **80H 作为标志**
- 重键时以 0FFH 作为标志。
**2. 线反转法**
- 步骤:
1. **第一步:行输出,列输入**。行设为输出D7D4列设为输入D3D0。输出行号 0000B读列数据若列数据为 1111B无键按下否则有键按下。
2. **第二步:线反转**。有键按下时把列转为输出D7D4行为输入D3D0并从列输出第一步读回的数据然后读回行数据。
3. 由这两次读回的数据拼接成位置码(高 4 位 + 低 4 位)。
- 优点:只需两步即可得到位置码,比行扫描法更快。
#### 9.1.4 键盘工作方式
1. **程序控制扫描方式**:利用 CPU 工作的空闲时间,调用键盘扫描子程序,响应键盘的输入请求。
2. **定时扫描方式**利用定时器产生定时中断CPU 响应中断后对键盘进行扫描。属于中断方式,但不是实时响应,而是定时响应。
3. **中断扫描方式**当键盘上有键闭合时便产生中断请求CPU 响应中断后执行中断服务程序对闭合键进行识别。CPU 效率最高(无须空扫描)。
#### 9.1.5 PC 键盘接口(补充)
- PC 标准键盘采用 **Intel 8042或者兼容芯片 8742作为键盘控制器**,通过 5 芯 DIN 插座与主机相连。
- 信号线KBDDATA双向数据线、KBDCLK时钟线、GND、+5V、KBDRESET复位
- 键盘内部的单片机扫描键盘,得到**扫描码**(接通码/断开码),通过串行方式发送给键盘控制器。
- 键盘控制器接收扫描码后产生**中断请求 IRQ1**,进入 INT 09H 中断处理。
#### 9.1.6 BIOS 键盘中断及 DOS 键盘功能调用
**1. 中断 09H 的处理过程**
- 从键盘接口的输出缓冲寄存器60H读取**系统扫描码**
- 判断该键的分类:
1. ASCII 码 0127 → 缓冲区写入 `系统扫描码ASCII 码)`
2. ASCII 码 128255 → 缓冲区写入 `0ASCII 码)`
3. 组合键和功能键 → 缓冲区写入 `扩展码0`,如 SHIFT+a
4. 特殊命令组合键(如 Ctrl+Alt+Del→ 不形成代码,直接完成相应操作;
5. 特殊键 → 设置"键盘状态字节"的状态(对应 D0D7 位R-Shift、L-Shift、Ctrl、Alt、Scroll Lock、Num Lock、Caps Lock、Insert
**2. 键盘缓冲区**
- 建立在系统主存的 BIOS 数据区中;
- 占用 **32 个字节**,可存放 16 次击键产生的 ASCII 码和扫描码(每次击键占 2 字节);
- 以**先进先出FIFO**的方式工作,形成循环队列;
- 地址范围40:1EH 40:3DH
- 队首指针在 40:1AH队尾指针在 40:1CH
- **INT 09H 写入时指针总指向队尾**INT 16H 读取时总指向队首。
**3. INT 16H 的功能(读取键盘缓冲区)**
- 以 FIFO 工作,输出指针总指向队首;
- 3 种子功能,由 AH 区分:
- **AH = 0**:从键盘读入字符送 AL 寄存器无键按下时处于等待状态出口AL = 字符的 ASCII 码AH = 扫描码;
- **AH = 1**:从键盘缓冲器中读入字符送 AL并设置 ZF 标志ZF = 0有键→ AL 中为字符 ASCII 码ZF = 1无键**不等**,常用来轮询;
- **AH = 2**读取特殊功能键的状态出口AL 为各特殊功能键的状态(对应键盘状态字节)。
**4. INT 21H 的功能DOS 键盘功能调用)**
| 子功能 | 功能描述 | 入口参数 | 出口参数 |
|---|---|---|---|
| AH=01H | 从键盘输入一个字符并回显 | AH=1 | AL=字符 |
| AH=06H | 读键盘字符(直接控制台 I/O | AH=6, DL=0FFH | 有字符 AL=字符, ZF=0无 AL=0, ZF=1 |
| AH=07H | 从键盘输入一个字符,不回显 | AH=7 | AL=字符 |
| AH=08H | 从键盘输入一个字符,不回显,检测 Ctrl_Break | AH=8 | AL=字符 |
| AH=0AH | 输入字符到缓冲区 | AH=0AH, DS:DX=缓冲区首址 | 无 |
| AH=0BH | 读键盘状态 | AH=0BH | AL=0FFH 有键AL=0 无键 |
| AH=0CH | 清除键盘缓冲区,并调用一种键盘功能 | AH=0CH, AL=功能号 | 与调用功能有关 |
---
### 9.2 发光二极管LED显示器接口
#### 9.2.1 发光二极管七段显示器结构
**1. 结构**
- 由 7 段发光二极管a、b、c、d、e、f、g和小数点h 或 dp组成"8"字形;
- 每段是一个发光二极管,通过点亮不同段显示 09、AF 等字符。
**2. 共阴极 vs 共阳极(高频考点)**
| 类型 | 共阴极 | 共阳极 |
|---|---|---|
| 公共端 | 接地GND | 接高电平(+5V |
| 段点亮条件 | 段输入"1"(高电平) | 段输入"0"(低电平) |
| 段码特征 | 0 = 3FH、1 = 06H …… | 0 = C0H、1 = F9H …… |
| 段码关系 | 共阴极段码 = **共阳极段码取反**(按位) |
**3. 共阴极 LED 七段显示器段码表**
| 字形 | h | g | f | e | d | c | b | a | 段码H |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 3FH |
| 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06H |
| 2 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 5BH |
| 3 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 4FH |
| 4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 66H |
| 5 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 6DH |
| 6 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 7DH |
| 7 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 07H |
| 8 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 7FH |
| 9 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 6FH |
| A | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 77H |
| B | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 7CH |
| C | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 39H |
| D | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 5EH |
| E | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 79H |
| F | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 71H |
| 不显示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00H |
> 例:共阴极 LED 显示"2"的七段码为 0101 1011B = **5BH**a、b、d、e、g 段亮 → b111 1011注意 D7 不接,置 0
#### 9.2.2 显示方式:静态显示 vs 动态显示(高频考点)
**1. 静态显示**
- 当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止;
- 每一显示位可独立显示,在同一时刻不同的显示位可以显示不同的字符;
- **优点**显示稳定无闪烁CPU 负担轻;编程简单;
- **缺点**:占用 I/O 口线多(每位需 8 根段码线 + 公共端),成本高,不适合多位显示;
- 典型电路:通过 8255A 控制 3 位静态 LEDPA、PB、PC 各驱动一位)。
**2. 动态显示(扫描显示)**
- 一位一位地轮流点亮各位显示器(扫描)。对于某一位显示器来说,每隔一段时间点亮一次。
- 工作过程:
1. 把在第 N 位要显示的字符七段码输出;
2. 把这一位的选通信号置为有效(其他位选通信号都无效);
3. 这一位显示相应字符,延时一定时间;
4. 依同样方式显示下一位,依次轮询所有位;
5. 利用**视觉暂留**,人眼看上去所有位同时点亮。
- **段选信号**:控制每位的段码(决定显示什么字符);
- **位选信号**:控制哪一位有效(每次只有 1 位有效,由译码器或 I/O 线实现);
- **优点**:占用 I/O 口线少(多位共享段码线),硬件成本低;
- **缺点**CPU 需不断扫描;显示亮度受扫描频率影响;编程较复杂。
#### 9.2.3 接口及应用举例
- **段码转换方法**:硬件译码(专用译码器如 7447/7448、软件译码建表 XLAT 查表);
- **例 9.2.1**(软件译码静态显示):通过 8255A 控制共阳极 LED 显示 4 位开关对应的 1 位十六进制数0F
- 8255A 端口地址A 口 C4HB 口 C5HC 口 C6H控制口 C7H
- 控制字 90H方式 0A 口输入B 口输出;
- 软件流程:输入 A 口 → 与 0FH 屏蔽高 4 位 → `XLAT` 查段码表 → 输出段码到 B 口 → 延时 → 循环;
- 段码表LEDTAB存放 0F 的共阳极段码3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H。
---
### 9.3 LCD 液晶显示器接口(补充)
#### 9.3.1 LCD 简介
- LCDLiquid Crystal Display利用液晶的电光效应显示字符或图形
- 优点:功耗低、体积小、显示信息丰富(可显示任意图形);
- 缺点:响应速度慢、对比度受视角影响、需背光。
#### 9.3.2 字符型 LCD如 1602即 16×2
**1. 1602 主要引脚16 脚)**
| 引脚 | 符号 | 功能 |
|---|---|---|
| 1 | VSS | 电源地 |
| 2 | VDD | +5V 电源 |
| 3 | VO | 液晶对比度调整(接电位器) |
| 4 | RS | 寄存器选择0=命令寄存器1=数据寄存器 |
| 5 | R/W | 读写选择0=写1=读 |
| 6 | E | 使能信号(下降沿触发写,高电平读) |
| 714 | D0D7 | 8 位双向数据线 |
| 15 | ABL+ | 背光正极 |
| 16 | KBL- | 背光负极 |
**2. 常用控制指令(高频考点)**
| 指令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 功能 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 清屏 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 清 DDRAM光标归位AC=0 |
| 光标归位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | x | AC=0光标回到原点 |
| 输入模式设置 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | I/D=1 增量/0 减量S=1 整屏移动 |
| 显示开关控制 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | D=显示0=关/1=开C=光标B=闪烁 |
| 光标/显示移位 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | x | x | S/C=1 整屏/0 光标R/L=1 右移/0 左移 |
| 功能设置 | 0 | 0 | 0 | 0 | 1 | DL | N | F | x | x | DL=8 位/4 位N=2 行/1 行F=5×10/5×7 |
| 设置 CGRAM 地址 | 0 | 0 | 0 | 1 | A5 | A4 | A3 | A2 | A1 | A0 | 设置自定义字符 RAM 地址 |
| 设置 DDRAM 地址 | 0 | 0 | 1 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | 设置显示数据 RAM 地址 |
| 读忙标志 BF 和地址 | 0 | 1 | BF | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | BF=1 忙BF=0 空闲 |
| 写数据 | 1 | 0 | 写入数据到 DDRAM 或 CGRAM |
| 读数据 | 1 | 1 | 从 DDRAM 或 CGRAM 读出数据 |
**3. 初始化流程(高频考点)**
- 上电后等待 15ms 以上(电源稳定);
- 写功能设置指令 38H8 位数据接口2 行显示5×7 点阵);
- 写显示开关控制 0CH开显示关光标关闪烁
- 写清屏指令 01H
- 写输入模式设置 06H地址自动 +1光标右移
- 之后即可向 DDRAM 写入要显示的字符 ASCII 码。
**4. 编程示例(伪代码)**
```
写命令子程序RS=0, R/W=0, E=下降沿, 数据→D0~D7
写数据子程序RS=1, R/W=0, E=下降沿, 数据→D0~D7
初始化38H → 0CH → 01H → 06H
显示字符:写 DDRAM 地址(如 80H 表示第一行首字符)→ 连续写数据ASCII 码)
读忙标志RS=0, R/W=1, 读 BF 位(每次写操作前最好先读 BF 判忙)
```
#### 9.3.3 图形点阵 LCD
- 常见型号12864128×64 点阵、19264 等;
- 内部结构:显示控制器(如 KS0108、HD61202+ 显示屏;
- 显示原理每个点对应显存中的一位1=亮0=灭);
- 显示步骤:
1. 设置显示起始行;
2. 设置页地址Y 地址,每 8 行为一页);
3. 设置列地址X 地址);
4. 连续写入一字节8 个点)的显示数据;
5. 列地址自动 +1直到写完一行。
---
### 9.4 打印机接口Centronics 标准)(补充)
#### 9.4.1 概述
- 打印机是常用的输出设备;
- 接口标准:**Centronics 并行接口标准**(早期 36 脚 Amphenol 连接器,现多用 USB但 Centronics 信号线仍是基础);
- 数据传输方式:**8 位并行数据**,单向传输(主机→打印机),采用**应答式**(握手)通信。
#### 9.4.2 Centronics 接口主要信号线(高频考点)
| 信号线 | 方向 | 功能 |
|---|---|---|
| DATA1DATA8 | 主机 → 打印机 | 8 位并行数据 |
| **STROBE**(选通) | 主机 → 打印机 | 低电平有效,数据选通信号,下降沿时打印机读取数据 |
| **BUSY**(忙) | 主机 ← 打印机 | 高电平表示打印机忙,不能接收数据 |
| **ACK**(应答) | 主机 ← 打印机 | 低电平脉冲,表示打印机已接收数据,可以接收下一个数据 |
| PE缺纸 | 主机 ← 打印机 | 高电平表示缺纸 |
| SLCT选择 | 主机 ← 打印机 | 高电平表示打印机处于联机状态 |
| **INIT**(初始化) | 主机 → 打印机 | 低电平使打印机复位 |
| AUTO FEED XT | 主机 → 打印机 | 低电平使打印机自动换行 |
| SELECT IN | 主机 → 打印机 | 低电平使打印机处于被选中状态 |
| ERROR出错 | 主机 ← 打印机 | 低电平表示打印机处于错误、脱机或缺纸状态 |
| GND | — | 地线 |
#### 9.4.3 打印机接口编程
**1. 查询方式**
```
发送数据流程:
1. 读 BUSY 信号:若 BUSY=1则等待若 BUSY=0则可发数据
2. 将数据送到数据线 DATA1DATA8
3. 产生 STROBE 选通信号(低电平脉冲),打印机读数据;
4. 等待 ACK 应答信号(下降沿表示接收完毕);
5. 准备发送下一字节。
```
**2. 中断方式**
- 利用 ACK 信号(或 BUSY 下降沿触发中断在中断服务程序中发送下一字节CPU 效率高。
---
### 9.5 其他输入设备(补充)
#### 9.5.1 鼠标
- **机械式鼠标**:通过底部滚球的转动带动光栅盘转动,光电传感器检测移动方向和距离;
- **光电式鼠标**:通过底部 LED 照射表面,光学传感器拍照比对,识别移动(精度高、不需滚球);
- **接口**PS/2、USB、蓝牙、无线2.4G
- **数据格式**(以 PS/2 鼠标为例):
- 3 字节包:第 1 字节 = 按键状态 + 方向溢出;第 2、3 字节 = X、Y 方向位移量(带符号整数);
- 通过 INT 33HDOS或 Windows 驱动访问。
#### 9.5.2 触摸屏
- **电阻式触摸屏**
- 由两层透明电阻薄膜组成,中间用绝缘点隔开;
- 按压时两层导电接触,分时给 X、Y 方向加电压,测量接触点电压 → 计算坐标;
- 优点:精度高、价格低、可戴手套触摸;缺点:透光率较低、多点触摸实现难。
- **电容式触摸屏**
- 利用人体电流感应;
- 分**表面电容式**和**投射电容式**(支持多点触摸,现代手机、平板多用);
- 优点:透光率高、支持多点触摸;缺点:不能戴手套(表面电容)、需人体接触。
- **红外/声表面波触摸屏**:屏幕四周装红外发射/接收对管或声波传感器,触摸时遮挡或衰减,定位触摸点。
#### 9.5.3 扫描仪
- 通过光电耦合器件CCD/CMOS将图像转换为数字信号
- 关键参数分辨率DPI、色彩深度、扫描幅面
- 接口USB、SCSI早期
#### 9.5.4 音频接口(补充)
- 声卡通过 **DAC**(数模转换)输出模拟音频信号;
- **AC'97 / HD Audio 标准**:定义音频控制器与编解码器之间的接口;
- 输入设备麦克风MIC、线路输入Line In
- 输出设备扬声器Speaker、耳机、线路输出Line Out
---
## 二、考点总结
### 高频考点
- **【高频】共阴极 vs 共阳极数码管段码差异**:共阴极点亮段=1公共端接地共阳极点亮段=0公共端接+5V**共阴极段码按位取反=共阳极段码**。必须牢记 0F 的段码表(最常考的是 0=3FH、1=06H、2=5BH、3=4FH、4=66H、5=6DH、6=7DH、7=07H、8=7FH、9=6FH
- **【高频】动态扫描显示原理**:段选信号(送段码)+ 位选信号(每次只有 1 位有效利用视觉暂留依次轮流点亮各位CPU 需周期性扫描。
- **【高频】矩阵键盘扫描法**
- **行扫描法**:行全 0 检测有无按键 → 延时消抖 → 逐行扫描ROL AH, 1 → 读列值 → 拼接位置码(高 4 位行号 + 低 4 位列号)→ 查表得键号;
- **线反转法**:行输出/列输入 → 读列值 → 反转为列输出/行输入 → 读行值 → 拼接位置码(只需两步)。
- **【高频】按键消抖方法**
- **硬件**R-C 滤波电路、RS 触发器;
- **软件**:检测到按下后延时 20ms再读一次确认。
- **【高频】LCD 1602 常用控制指令**:清屏 01H、光标归位 02H、显示开关 0CH、功能设置 38H8 位/2 行/5×7、输入模式 06H、读 BF 地址、写数据等。
- **【高频】Centronics 接口关键信号**STROBE选通主机→打印机、BUSY打印机→主机、ACK应答打印机→主机、DATA188 位数据、INIT初始化、ERROR出错
### 其他常考要点
- 编码键盘 vs 非编码键盘的区别(硬件 vs 软件实现编码)。
- 线性键盘 vs 矩阵键盘的适用场景(按键少 vs 按键多)。
- 重键处理三种方法不理、缓冲、n 键连锁),**n 键连锁**最常用。
- 键盘工作方式三种(程序控制、定时扫描、中断扫描),效率递增。
- INT 09H 处理过程:读扫描码 → 判断分类 → 写入键盘缓冲区。
- 键盘缓冲区32 字节,位于 40:1EH40:3DHFIFO 循环队列。
- INT 16H 三个子功能AH=0读字符等待、AH=1读字符检 ZF、AH=2读特殊键状态
- INT 21H 键盘调用AH=1输入回显、AH=6直接控制台、AH=7不回显、AH=0BH读状态
- 8255A 控制字格式D7=1 特征位方式选择I/O 方向)。
- 共阳极段码表共阴极段码按位取反0=C0H, 1=F9H, 2=A4H, 3=B0H, 4=99H, 5=92H, 6=82H, 7=F8H, 8=80H, 9=90H, A=88H, B=83H, C=C6H, D=A1H, E=86H, F=8EH。
- 静态显示 vs 动态显示的优缺点I/O 口占用、CPU 负担、亮度)。
- LCD 1602 引脚RS0=命令/1=数据、R/W0=写/1=读、E使能下降沿触发写
- 打印机数据传输:查询方式(读 BUSY和中断方式ACK 触发)。
### 常见题型
- **计算/设计题:数码管段码表推导**
- 例:给定字形(共阴极/共阳极),求段码(注意按 a 在 D0、b 在 D1 …… 的位序);
- 例:给出共阴极段码表,求共阳极段码(按位取反);
- 例:设计用 8255A 控制 LED 显示 0F 的硬件电路与软件流程。
- **分析题:给出键盘扫描程序判断按下哪个键**
- 例:给定行扫描法程序片断,分析某次扫描得到的行号、列号,确定按键位置码和键号;
- 例:给出 8255A 控制字,判断各端口的 I/O 方向。
- **简答题:动态扫描 vs 静态显示优缺点**
- 静态:每位独立显示,稳定无闪烁,占用 I/O 多;
- 动态:节省 I/O但需 CPU 持续扫描,可能闪烁。
- **设计题LCD 初始化序列与字符显示程序**
- 例:用 8255A或 8155连接 LCD 1602写出初始化序列38H → 0CH → 01H → 06H以及在指定位置显示字符串的子程序。
- **简答题:键盘消抖方法及优缺点**
- 硬件:电路复杂但实时性好;
- 软件:简单灵活但占用 CPU 时间20ms
- **简答题:行扫描法与线反转法的比较**
- 行扫描:循环扫描每行,速度慢但实现简单;
- 线反转:两步即可,速度快但需双向 I/O 口。
- **简答题Centronics 接口的工作流程STROBE/BUSY/ACK 三线握手)**
- 1. 主机检查 BUSY
- 2. BUSY=0 时,主机送出数据;
- 3. 主机产生 STROBE 下降沿;
- 4. 打印机置 BUSY=1处理数据
- 5. 打印机发出 ACK 脉冲,置 BUSY=0
- 6. 主机准备发送下一字节。
- **简答题:键盘缓冲区的作用**
- 解决 CPU 速度快、键盘输入慢的矛盾;允许按键暂时"堆积";实现 FIFO 顺序读取。
---
## 三、复习提示
1. PPT 重点在 **9.1 键盘接口****9.2 LED 七段显示器**,这两部分的例题和程序必须能看懂、能修改、能独立编写。
2. **段码表**(特别是 09必须能背下来尤其是共阴极的 3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。
3. **键盘扫描程序** 是本章最重要的综合题,要熟练掌握行扫描法(带查表)和线反转法。
4. **LCD、打印机、鼠标、触摸屏** 部分 PPT 未涉及,需要根据教材补充,主要掌握 **LCD 1602 控制指令****Centronics 接口信号** 即可应付考试。
5. 8255A 的控制字、端口地址、工作方式(方式 0/1/2是贯穿全章的基础必须熟练。
6. 复习时建议结合第 7、8 章的 8255A、74LS138、ADC0809 等芯片的应用,形成完整的"接口 + 外设"知识体系。