25 KiB
25 KiB
第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. 重键处理(多键同时按下)
- 定义:两个或两个以上的键同时按下,或者一个键按下后还未弹开,另一个键又按下的情况。
- 三种解决方法:
- 不理会所有被按下的键,直至只剩下一个键按下时为止(最简单);
- 将所有按键的信息存入内部键盘输入缓冲器,逐个处理(成本高);
- 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 无键按下,有 0 表示有键按下);
- 软件消抖(调用 20ms 延时);
- 再读一次确认;
- 逐位比较确定是哪个键(K3~K0 对应编码 3~0);
- 若有多个键按下,则设 AH = 0FFH 作为标识。
9.1.3 矩阵键盘
1. 行扫描法
- 步骤:
- 行全输出 0,读列值:若列值全 1,无键按下;否则有键按下;
- 依次只让一行输出 0,其他行输出 1,读列值;
- 若列值全 1,则按键不在此行(转扫描下一行);
- 否则按键在此行,并由此时的行、列构建位置码(高 4 位行号 + 低 4 位列号);
- 通过位置码查表确定按键。
- 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 作为标志。
- 初始化 → 行输出 00H 检查有无键按下 → 软件消抖 → 再次确认 → 循环扫描行(用
2. 线反转法
- 步骤:
- 第一步:行输出,列输入。行设为输出(D7~D4),列设为输入(D3~D0)。输出行号 0000B,读列数据;若列数据为 1111B,无键按下,否则有键按下。
- 第二步:线反转。有键按下时,把列转为输出(D7~D4),行为输入(D3~D0),并从列输出第一步读回的数据,然后读回行数据。
- 由这两次读回的数据拼接成位置码(高 4 位 + 低 4 位)。
- 优点:只需两步即可得到位置码,比行扫描法更快。
9.1.4 键盘工作方式
- 程序控制扫描方式:利用 CPU 工作的空闲时间,调用键盘扫描子程序,响应键盘的输入请求。
- 定时扫描方式:利用定时器产生定时中断,CPU 响应中断后对键盘进行扫描。属于中断方式,但不是实时响应,而是定时响应。
- 中断扫描方式:当键盘上有键闭合时便产生中断请求,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)读取系统扫描码;
- 判断该键的分类:
- ASCII 码 0~127 → 缓冲区写入
(系统扫描码,ASCII 码); - ASCII 码 128~255 → 缓冲区写入
(0,ASCII 码); - 组合键和功能键 → 缓冲区写入
(扩展码,0),如 SHIFT+a; - 特殊命令组合键(如 Ctrl+Alt+Del)→ 不形成代码,直接完成相应操作;
- 特殊键 → 设置"键盘状态字节"的状态(对应 D0~D7 位:R-Shift、L-Shift、Ctrl、Alt、Scroll Lock、Num Lock、Caps Lock、Insert)。
- ASCII 码 0~127 → 缓冲区写入
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. 动态显示(扫描显示)
- 一位一位地轮流点亮各位显示器(扫描)。对于某一位显示器来说,每隔一段时间点亮一次。
- 工作过程:
- 把在第 N 位要显示的字符七段码输出;
- 把这一位的选通信号置为有效(其他位选通信号都无效);
- 这一位显示相应字符,延时一定时间;
- 依同样方式显示下一位,依次轮询所有位;
- 利用视觉暂留,人眼看上去所有位同时点亮。
- 段选信号:控制每位的段码(决定显示什么字符);
- 位选信号:控制哪一位有效(每次只有 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=灭);
- 显示步骤:
- 设置显示起始行;
- 设置页地址(Y 地址,每 8 行为一页);
- 设置列地址(X 地址);
- 连续写入一字节(8 个点)的显示数据;
- 列地址自动 +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 三线握手)
-
- 主机检查 BUSY;
-
- BUSY=0 时,主机送出数据;
-
- 主机产生 STROBE 下降沿;
-
- 打印机置 BUSY=1,处理数据;
-
- 打印机发出 ACK 脉冲,置 BUSY=0;
-
- 主机准备发送下一字节。
-
-
简答题:键盘缓冲区的作用
- 解决 CPU 速度快、键盘输入慢的矛盾;允许按键暂时"堆积";实现 FIFO 顺序读取。
三、复习提示
- PPT 重点在 9.1 键盘接口 和 9.2 LED 七段显示器,这两部分的例题和程序必须能看懂、能修改、能独立编写。
- 段码表(特别是 0~9)必须能背下来,尤其是共阴极的 3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。
- 键盘扫描程序 是本章最重要的综合题,要熟练掌握行扫描法(带查表)和线反转法。
- LCD、打印机、鼠标、触摸屏 部分 PPT 未涉及,需要根据教材补充,主要掌握 LCD 1602 控制指令 和 Centronics 接口信号 即可应付考试。
- 8255A 的控制字、端口地址、工作方式(方式 0/1/2)是贯穿全章的基础,必须熟练。
- 复习时建议结合第 7、8 章的 8255A、74LS138、ADC0809 等芯片的应用,形成完整的"接口 + 外设"知识体系。