# 第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 等芯片的应用,形成完整的"接口 + 外设"知识体系。