450 lines
25 KiB
Markdown
450 lines
25 KiB
Markdown
# 第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)**
|
||
|
||
- 当机械开关的触点闭合时,达到稳定之前需要短暂抖动或弹跳几下,反复闭合、断开几次之后才能可靠地闭合。开关断开时也有同样现象。
|
||
- **抖动时间:约 10~20ms**。
|
||
- 抖动会引起一次按键被读入多次(误识别)。
|
||
|
||
**2. 消抖方法**
|
||
|
||
- **硬件消抖**:
|
||
- 对每一个键加上 **R-C 滤波电路**;
|
||
- 或加上 **RS 触发器(双稳态触发器)去抖电路**。
|
||
- **软件消抖**:
|
||
- 采用 **20ms 左右延迟子程序**,等待键的输出达到完全稳定后才去读取代码;
|
||
- 两次读键比较(前沿消抖:第一次检测到按下 → 延时 20ms → 再读一次确认) 。
|
||
|
||
**3. 重键处理(多键同时按下)**
|
||
|
||
- 定义:两个或两个以上的键同时按下,或者一个键按下后还未弹开,另一个键又按下的情况。
|
||
- 三种解决方法:
|
||
1. 不理会所有被按下的键,直至只剩下一个键按下时为止(最简单);
|
||
2. 将所有按键的信息存入内部键盘输入缓冲器,逐个处理(成本高);
|
||
3. **n 键连锁技术**:当一键被按下时,在此键未完全释放之前,其它的键虽然可被按下或松开,但并不产生任何代码(最常用)。
|
||
|
||
#### 9.1.2 线性键盘
|
||
|
||
- 采用独立式按键,每个按键接到独立的 I/O 口线。
|
||
- PPT 例题:8255A 的 A 口、B 口、C 口、控制口地址为 60H/61H/62H/63H,4 个按键 K3~K0 接 PA3~PA0,按下时为 "0",未按为 "1"。
|
||
- 控制字归纳为 10010000B(90H):A 口方式 0 输入,B/C 口方式 0 输出。
|
||
- 编程步骤:
|
||
1. 检测是否有键按下(全 1 无键按下,有 0 表示有键按下);
|
||
2. 软件消抖(调用 20ms 延时);
|
||
3. 再读一次确认;
|
||
4. 逐位比较确定是哪个键(K3~K0 对应编码 3~0);
|
||
5. 若有多个键按下,则设 AH = 0FFH 作为标识。
|
||
|
||
#### 9.1.3 矩阵键盘
|
||
|
||
**1. 行扫描法**
|
||
|
||
- 步骤:
|
||
1. **行全输出 0,读列值**:若列值全 1,无键按下;否则有键按下;
|
||
2. 依次只让一行输出 0,其他行输出 1,读列值;
|
||
3. 若列值全 1,则按键不在此行(转扫描下一行);
|
||
4. 否则按键在此行,并由此时的行、列构建**位置码**(高 4 位行号 + 低 4 位列号);
|
||
5. 通过位置码查表确定按键。
|
||
- PPT 例题(4×4 键盘,0~F 共 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. **第一步:行输出,列输入**。行设为输出(D7~D4),列设为输入(D3~D0)。输出行号 0000B,读列数据;若列数据为 1111B,无键按下,否则有键按下。
|
||
2. **第二步:线反转**。有键按下时,把列转为输出(D7~D4),行为输入(D3~D0),并从列输出第一步读回的数据,然后读回行数据。
|
||
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 码 0~127 → 缓冲区写入 `(系统扫描码,ASCII 码)`;
|
||
2. ASCII 码 128~255 → 缓冲区写入 `(0,ASCII 码)`;
|
||
3. 组合键和功能键 → 缓冲区写入 `(扩展码,0)`,如 SHIFT+a;
|
||
4. 特殊命令组合键(如 Ctrl+Alt+Del)→ 不形成代码,直接完成相应操作;
|
||
5. 特殊键 → 设置"键盘状态字节"的状态(对应 D0~D7 位: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"字形;
|
||
- 每段是一个发光二极管,通过点亮不同段显示 0~9、A~F 等字符。
|
||
|
||
**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 位静态 LED(PA、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 位十六进制数(0~F);
|
||
- 8255A 端口地址:A 口 C4H,B 口 C5H,C 口 C6H,控制口 C7H;
|
||
- 控制字 90H:方式 0,A 口输入,B 口输出;
|
||
- 软件流程:输入 A 口 → 与 0FH 屏蔽高 4 位 → `XLAT` 查段码表 → 输出段码到 B 口 → 延时 → 循环;
|
||
- 段码表(LEDTAB)存放 0~F 的共阳极段码:3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H。
|
||
|
||
---
|
||
|
||
### 9.3 LCD 液晶显示器接口(补充)
|
||
|
||
#### 9.3.1 LCD 简介
|
||
|
||
- LCD(Liquid 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 | 使能信号(下降沿触发写,高电平读) |
|
||
| 7~14 | D0~D7 | 8 位双向数据线 |
|
||
| 15 | A(BL+) | 背光正极 |
|
||
| 16 | K(BL-) | 背光负极 |
|
||
|
||
**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 以上(电源稳定);
|
||
- 写功能设置指令 38H(8 位数据接口,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
|
||
|
||
- 常见型号:12864(128×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 接口主要信号线(高频考点)
|
||
|
||
| 信号线 | 方向 | 功能 |
|
||
|---|---|---|
|
||
| DATA1~DATA8 | 主机 → 打印机 | 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. 将数据送到数据线 DATA1~DATA8;
|
||
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 33H(DOS)或 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;**共阴极段码按位取反=共阳极段码**。必须牢记 0~F 的段码表(最常考的是 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、功能设置 38H(8 位/2 行/5×7)、输入模式 06H、读 BF 地址、写数据等。
|
||
- **【高频】Centronics 接口关键信号**:STROBE(选通,主机→打印机)、BUSY(忙,打印机→主机)、ACK(应答,打印机→主机)、DATA1~8(8 位数据)、INIT(初始化)、ERROR(出错)。
|
||
|
||
### 其他常考要点
|
||
|
||
- 编码键盘 vs 非编码键盘的区别(硬件 vs 软件实现编码)。
|
||
- 线性键盘 vs 矩阵键盘的适用场景(按键少 vs 按键多)。
|
||
- 重键处理三种方法(不理、缓冲、n 键连锁),**n 键连锁**最常用。
|
||
- 键盘工作方式三种(程序控制、定时扫描、中断扫描),效率递增。
|
||
- INT 09H 处理过程:读扫描码 → 判断分类 → 写入键盘缓冲区。
|
||
- 键盘缓冲区:32 字节,位于 40:1EH~40:3DH,FIFO 循环队列。
|
||
- 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 引脚:RS(0=命令/1=数据)、R/W(0=写/1=读)、E(使能下降沿触发写)。
|
||
- 打印机数据传输:查询方式(读 BUSY)和中断方式(ACK 触发)。
|
||
|
||
### 常见题型
|
||
|
||
- **计算/设计题:数码管段码表推导**
|
||
- 例:给定字形(共阴极/共阳极),求段码(注意按 a 在 D0、b 在 D1 …… 的位序);
|
||
- 例:给出共阴极段码表,求共阳极段码(按位取反);
|
||
- 例:设计用 8255A 控制 LED 显示 0~F 的硬件电路与软件流程。
|
||
|
||
- **分析题:给出键盘扫描程序判断按下哪个键**
|
||
- 例:给定行扫描法程序片断,分析某次扫描得到的行号、列号,确定按键位置码和键号;
|
||
- 例:给出 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. **段码表**(特别是 0~9)必须能背下来,尤其是共阴极的 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 等芯片的应用,形成完整的"接口 + 外设"知识体系。 |