第六章人机交互设备接口设计与应用
本节聚焦于嵌入式系统中最基础、最核心的人机交互(HMI)组件:从简单的按键、显示器,到复杂的触摸屏。
6.1 人机交互接口概述
大家好!在嵌入式系统中,人机交互(Human-Machine Interface, HMI) 是用户和设备“对话”的关键部分。它就像飞腾派系统的“脸”和“耳朵”,让用户能轻松操作设备(输入),并清楚了解设备的状态(输出)。例如,你通过触摸屏点击,飞腾派在显示屏上展示结果;或者你按一个按钮,设备发出蜂鸣声提醒。HMI的设计直接影响用户体验——好的人机交互让设备用起来简单又舒服。
6.1.1 定义与作用
人机接口(Human-Machine Interface, HMI) 是用户与嵌入式系统交互的所有组件和方法的总称。你可以把HMI想象成汽车的仪表盘和控制台:仪表盘显示车速、油量(输出),方向盘、油门让驾驶员控制车辆(输入)。在飞腾派系统中,HMI让用户和设备“对话”,完成任务。
输入端(人到机器)
- 作用:用户通过HMI向系统发送指令,告诉设备“做什么”。
- 常见设备:
- 按键:像键盘或按钮,触发特定功能。
- 触摸屏:用手指点击或滑动,操作直观。
- 语音:通过麦克风说指令(如“打开灯光”)。
- 传感器:如手势传感器,检测动作。
- 例子:在飞腾派智能家居系统中,你按按钮(输入),系统打开灯;或通过触摸屏选择空调温度。
输出端(机器到人)
- 作用:系统通过HMI向用户反馈状态、结果或提示。
- 常见设备:
- 显示屏:如LCD或OLED,显示图像或文字。
- 指示灯:如LED,亮起表示状态(如电源开启)。
- 蜂鸣器:发出声音提醒(如警报)。
- 例子:飞腾派显示屏上显示“温度:25°C”,或蜂鸣器“嘀”一声表示任务完成。
为什么重要?
HMI决定了设备的易用性和用户体验。一个好的HMI就像友好的服务员,让用户轻松上手;差的HMI像复杂的手册,让人摸不着头脑。在飞腾派系统中,HMI设计直接影响产品是否受欢迎。
飞腾派实践:飞腾派FTC核心(基于ARMv8-A架构)支持多种HMI设备,如触摸屏(输入)和LCD屏(输出)。例如,在工业控制面板中,用户通过触摸屏输入参数,屏幕显示机器状态,FTC核心高效处理这些交互。
6.1.2 人机接口的三代发展历程
HMI的发展经历了三个阶段,就像人与机器的对话从“写信”到“视频聊天”越来越自然。每个阶段都让交互更简单、更直观。下面我们用表格和例子详细讲解。
| 时期 | 名称 | 代表系统/方式 | 交互特点 |
|---|---|---|---|
| 第一代 | 字符命令时代 (CLI) | DOS、UNIX命令行 | 用户输入严格的命令和语法,学习曲线陡峭,交互效率低。 |
| 第二代 | 图形式交流时代 (GUI) | Windows、macOS | 用键盘、鼠标操作图形图标,直观易学,普及了计算机。 |
| 第三代 | 自然交流时代 | 智能语音助手、手势控制 | 用语音、手写、体感等自然方式,机器像人一样理解指令。 |
(1) 第一代:字符命令时代 (CLI, Command Line Interface)
- 特点:用户通过键盘输入特定命令,系统以文字反馈。命令格式严格,用户需要记住复杂语法。
- 比喻:像写信给设备,必须用“官方语言”,错一个字就无效。
- 代表系统:DOS(输入
dir列目录)、UNIX(输入ls)。 - 优缺点:
- 优点:简单,适合早期计算机,资源占用少。
- 缺点:学习难,效率低,普通用户用起来费劲。
- 飞腾派实践:在飞腾派运行嵌入式Linux时,可以通过串口终端输入命令(如
reboot重启)。这类似CLI,适合开发者调试,但对普通用户不友好。 - 例子:用飞腾派串口输入
cat /proc/cpuinfo查看CPU信息,屏幕显示文字结果。初学者可以把这想象成“跟设备发短信”,指令要精确。

(2) 第二代:图形式交流时代 (GUI, Graphical User Interface)
- 特点:用户通过键盘、鼠标操作图形界面(如图标、窗口),系统以图像、文字反馈。交互直观,“所见即所得”。
- 比喻:像用遥控器点电视菜单,点什么得什么。
- 代表系统:Windows(点击图标打开程序)、macOS(拖动文件)。
- 优缺点:
- 优点:直观,学习简单,普及了计算机。
- 缺点:需要更多计算资源(如显示屏、显卡)。
- 飞腾派实践:飞腾派连接LCD触摸屏,运行GUI系统(如Qt框架)。用户点击屏幕图标,系统响应,比如打开设置界面。

(3) 第三代:自然交流时代
- 特点:用户用人类自然的交流方式(如语音、手势、手写),系统智能解析指令,接近真人对话。
- 比喻:像跟朋友聊天,说“开灯”,设备就懂。
- 代表系统:智能语音助手(如Siri)、手势控制(如体感游戏)。
- 优缺点:
- 优点:最自然,用户几乎不用学,体验最好。
- 缺点:需要复杂算法(如AI语音识别),占用资源多。
- 飞腾派实践:飞腾派FTC核心支持高性能计算,可运行语音识别或手势检测程序。例如,连接麦克风,用语音控制智能家居。

6.2 输入设备接口设计:按键与键盘
在嵌入式系统中,按键是最简单、最常见的输入方式,它让用户通过按下或松开按钮,向设备发送指令。比如,在飞腾派开发板上,你按一个键,系统就能知道“开灯”或“开始测量”。按键将你的机械动作(手指按压)转换成电信号,让CPU“听懂”你的意图。这就像家里的遥控器按钮,按一下电视就换台。
6.2.1. 独立按键接口设计
独立按键是最基本的连接方法,每个按键只用飞腾派芯片上的一个I/O口线(GPIO,通用输入/输出引脚)。GPIO想象成芯片伸出的“小手指”,每个手指连接一个按键。

如果不加“稳定器”,GPIO在按键没按时会“悬空”(电平不稳,像风中摇摆),导致CPU读错信号。所以,用上拉电阻或下拉电阻来固定状态。
6.2.1.1 GPIO识别方式
飞腾派的主控芯片(MCU)用三种方式检测按键状态,每种适合不同场景。
- 随机方式(查询/轮询 Polling):
- 原理:CPU在程序循环中,不断读GPIO状态,就像你反复问“按了吗?”。
- 工作流程:
- 写一个
while(1)无限循环。 - 循环里读GPIO寄存器(地址如0xFE010004)。
- 如果读到0(按下),处理事件。
- 写一个
- 优缺点:简单,但CPU忙于检查,浪费资源。如果按键快,CPU可能错过。
- 中断方式 (Interrupt):
- 原理:按键变化时触发信号,CPU“被叫醒”处理,就像电话铃响。
- 工作流程:
- 配置GPIO为中断源(下降沿触发,按下时从高到低)。
- 按下触发中断,CPU暂停主程序,跑中断服务程序(ISR)。
- ISR处理后,返回。
- 优缺点:效率高,CPU不浪费时间。是实时系统的首选。
- 定时方式 (Timer):
- 原理:用定时器每隔时间(如5ms)触发中断,在中断中检查按键。
- 工作流程:
- 设置定时器周期中断。
- 中断服务程序扫描GPIO状态。
- 优缺点:结合查询和中断,准确且简单,常用于消抖。
6.2.1.2 按键消抖技术
按键是机械开关,按下或松开时,触点会因弹性反复接触/分离,产生电平波动(抖动),持续5-10ms。如果不处理,CPU会误判一次按为多次。

软件消抖: 软件消抖通过延时忽略波动:
- 检测初次变化:读到GPIO从1变0(按下)。
- 延时等待:等20ms(大于抖动时间)。
- 二次确认:再读,如果还是0,就是有效按下。
- 有效判定:处理事件(如点灯)。
- 释放检测:等GPIO回1,才能下次检测。
注意:硬件消抖用电容滤波,但软件更灵活。
6.2.2 矩阵按键接口设计
独立按键每个占一个GPIO,多按键会用光引脚。矩阵按键把按键排成网格(行x列),像键盘布局,只需行+列个GPIO。

- I/O口占用:16键独立需16GPIO;4x4矩阵只需8GPIO(4行+4列),节省一半。
- 比喻:像棋盘,按键在交叉点,按下连接行和列。

飞腾派实践:FTC核心GPIO多,但矩阵适合键盘设计,如数码键盘。
6.2.2.1 扫描法
用扫描法检测:
- 逐行输出:行线(R1-R4)设输出,逐一设低电平(激励)。
- 列线检测:列线(C1-C4)设输入,读状态。
- 确定键位:某行低且某列低,即该交叉按下。
- 说明:循环“点亮”每行,检查列。初学者:这像找棋盘上的棋子,一行一行扫。
注意:矩阵支持组合键,但需消抖。

6.2.2.2 翻转法
翻转法的工作原理基于“电平变化检测”。在矩阵键盘中,按键按下时会连接行线和列线,形成电路通路。翻转法通过主动“翻转”(改变)行或列的电平(高电平1≈3.3V,低电平0≈0V),观察另一方向的电平变化,来判断哪个按键被按下。
- 为什么叫“翻转法”?因为它不是一次性扫描所有,而是先“整体检查”是否有按键,然后“翻转”行或列的电平,逐一确认位置。这像玩“猜位置”游戏:先问“有东西吗?”,然后翻牌确认。
- 优点:节省CPU时间,只在有按键时深入扫描;减少误判;支持多键检测。
- 缺点:比简单扫描稍复杂,需要处理电平翻转逻辑。
- 适用场景:飞腾派的中大型键盘(如4×4或更大),如智能家居控制面板。
翻转法的详细步骤:翻转法通常以“行翻转”为主(也可列翻转,原理类似)。假设一个4行×4列矩阵键盘,行线(R0-R3)连接GPIO输出,列线(C0-C3)连接GPIO输入(上拉电阻,确保未按时高电平)。
步骤1: 整体检测是否有按键(初次扫描)
- 先把所有行线设为低电平(0),列线设为输入模式(上拉高电平)。
- 如果没有按键,所有列线保持高电平(1)。
- 如果有按键按下,该按键会将对应列线拉低(0),因为行低通过按键传到列。
- CPU读取所有列线状态,如果任何列是低,就知道“有按键按下”,进入下一步;否则,继续等待。
步骤2: 翻转行扫描,定位按键
- 确认有按键后,开始“翻转”:逐一行设为高电平(1),其他行保持低(0)。
- 对于每行翻转:
- 设该行高,其他低。
- 读取列线:如果某列高(或变化),说明无按键;如果低,说明该行该列按键按下。
- 重复所有行,找到所有按键(支持多键检测)。
步骤3: 消抖和处理
- 按键有抖动(机械弹跳,5-10ms波动),需消抖(参考5.4.2简介)。
- 检测到键码后,处理事件(如数字输入),然后等待释放(列回高)。
6.2.2.3 模拟量按键接口设计
模拟量按键用一个ADC输入口连接多个按键,通过电阻网络产生不同电压,节省GPIO。
- 电阻分压:按不同键,总电阻变,电压不同,ADC读电压转数字。
- 比喻:像一个旋钮,不同位置不同电压,识别键。
A/D转换与键值判断
- 模拟到数字:ADC把电压(0-3.3V)转数字(0-1023)。
- 编程逻辑:预定义每个键的电压范围,判断读值在哪范围。

6.3 输出设备接口设计:显示器
显示器是嵌入式系统的“面子”,负责将系统内部处理的结果、状态信息等以人能够理解的方式呈现出来。本节将详细介绍常用的三种显示设备:LED数码管、LED点阵和LCD液晶显示器。
6.3.1 LED数码管
在嵌入式系统中,输出设备是系统向用户“说话”的方式,就像设备的“嘴巴”。其中,LED数码管是最简单、成本最低的显示设备,常用于显示数字、时间、温度或简单字符,比如电子钟上的“12:34”或温度计上的“25.6°C”。在飞腾派平台上,LED数码管通过FTC核心(基于ARMv8-A架构)的GPIO控制,简单又实用。
1显示原理与结构
LED数码管就像一个简单的“数字灯箱”,能显示0-9的数字和一些字母(如A、F)。它由8个发光二极管(LED)组成,排列成“8”字形,点亮不同组合就能显示不同字符。

- 组成:
- 7段显示:7个LED(标记为$a, b, c, d, e, f, g$)组成“8”字形,分别控制上、中、下、左右等部分。
- 1个小数点:第8个LED(标记$dp$),用于显示小数点(如3.5)。
- 点亮原理:给LED加正向电压(电流流过),它就亮。控制哪些LED亮,就能显示数字或字符。
- 比喻:像七巧板,点亮不同部分拼出数字。比如,点亮$a, b, c$显示“7”。
- 特点:
- 结构简单:只用LED和引脚。
- 成本低:比LCD屏便宜。
- 使用方便:GPIO直接控制。
2 数码管的连接方式
数码管的LED连接方式决定驱动方法,分两种类型:
| 类型 | LED连接方式 | 驱动电平 | 特点 |
|---|---|---|---|
| 共阴极 (Common Cathode) | 所有LED阴极接一起,接GND(0V)。 | 段引脚给高电平(1,3.3V)点亮。 | 常见,飞腾派GPIO可直接驱动。 |
| 共阳极 (Common Anode) | 所有LED阳极接一起,接VCC(3.3V)。 | 段引脚给低电平(0,0V)点亮。 | 稍复杂,需注意GPIO电平。 |
- 段码表:要显示数字,查表找段组合。例如(共阴极,1=点亮):
- 0: $a, b, c, d, e, f$亮(1111110)
- 1: $b, c$亮(0110000)
- 2: $a, b, d, e, g$亮(1101101)
- …依此类推。
- 电路设计:每个段接一个GPIO,控制电平。加限流电阻(如220Ω)保护LED。
- 比喻:像控制多盏灯,点亮不同灯拼数字。

3 显示控制技术
多位数码管(如4位显示“12.34”)需控制多组段码和位选(哪位显示)。有两种驱动方式:
| 驱动方式 | 静态控制 (Static Drive) | 动态控制 (Dynamic Drive) |
|---|---|---|
| 原理 | 每位数码管的段码和位选(使能该位)各接独立GPIO,持续输出直到内容变。 | 所有数码管的段码并联(共用GPIO),每位有独立位选,快速轮流点亮。 |
| I/O占用 | 多。如4位需4×8+4=36GPIO。 | 少。如4位需8+4=12GPIO。 |
| 显示效果 | 稳定,亮度高,无闪烁。 | 靠人眼视觉暂留,刷新快(>50Hz)看像全亮。 |
| 适用性 | 少位、高亮度场合。 | 多位显示(如时钟),常见。 |
- 静态控制:
- 流程: 每一个数码管的段码都要独占具有锁存功能的输出口,控制器把要显示的字码送到输出口上,就可以使数码管显示对应的字符,特点是每个数码管的段选必须接8位数据线来保持显示的字形码(持续的信号输出)。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。
- 例子:4位显示“1234”,每位用8GPIO段码+1GPIO位选,36引脚全开。

- 动态控制:
- 流程:段码共用GPIO,位选轮流高(共阴极),每位显示1ms,循环快(50Hz+),人眼看全亮。

- 串行控制:
- 原理:GPIO少时,用74HC595芯片(串并转换)。MCU用3引脚(数据、时钟、锁存)串行发数据,74HC595并行输出段码/位选。
- 优点:4位只需3GPIO,省资源。
LED数码管是飞腾派最简单的输出设备,像“数字灯箱”。通过段码控制和静态/动态驱动,显示数字或字符。串行控制省GPIO,适合多位。代码和比喻让你轻松上手。
6.3.2 LED点阵显示模块
LED点阵显示模块可以显示数字、字母、汉字、图形甚至简单的动画,比简单的LED数码管更灵活。它在飞腾派平台上通过FTC核心(基于ARMv8-A架构)的GPIO控制,能轻松实现从简单数字到滚动文字的显示。
1 组成
LED点阵是由许多发光二极管(LED)按行和列排列组成的矩阵,像是电子版的“像素画板”。每个LED是一个“像素点”,通过控制哪些点亮或灭,拼出字符、图形或动画。


- 组成:
- 矩阵结构:由$N \times M$个LED组成(如8×8、16×16)。$N$是行数,$M$是列数。
- 显示类型:
- 单色:单一颜色(如红色、绿色),常见于简单显示。
- 双色:两种颜色(如红绿切换),可显示更丰富内容。
- 全彩色:RGB三色LED,显示彩色图像(较复杂,飞腾派高端应用)。
- 比喻:像电子积木,每个LED是一个小灯,点亮组合成字或图,就像在格子纸上画画。
2 级联应用
LED点阵模块可以像积木一样级联(串联或并联),组成更大的显示屏,常用于滚动字幕、广告牌或信息栏。
- 原理:
- 多个点阵模块(如4个8×8)拼接成更大矩阵(如8×32或16×16)。
- 数据通过串行接口(如SPI)或专用芯片(如74HC595)传输,控制所有模块。
- 比喻:像拼接多个小画板,组成一个大屏幕,滚动显示“欢迎使用飞腾派”。
3 控制方式:动态扫描
LED点阵采用动态控制,通过快速扫描行和列,点亮特定LED,利用人眼视觉暂留(>50Hz)让图案看起来持续显示。这与LED数码管的动态控制类似,但更复杂,能显示图形。
- 原理:
- 行线和列线:每个LED位于行和列交叉点。行线控制“哪一行点亮”,列线控制“哪些点亮”。
- 扫描方式:
- 选一行(如R0设高,R1-R7设低,共阳极)。
- 设列线电平(如C0-C7设0/1,控制LED亮灭)。
- 快速切换下一行,重复。
- 频率>50Hz,人眼看全图。
- 比喻:像快速翻书,每页只亮一行,翻快了整页都在。
采用列输出编码显示字符,需要行线都输出“1”,把形成的列编码(低电平输出有效)分别送到相应的列线上;采用行输出编码显示字符,需要列线都输出“0”,形成的行编码分别送到相应的行线上。静态控制无法实现数据的显示,需要采用动态方式实现。

LED点阵是飞腾派的“数字画板”,通过动态扫描显示复杂图案。级联和串行控制支持大屏和滚动显示。
6.3.3 LCD液晶显示器
输出设备是系统向用户“展示信息”的窗口,而LCD液晶显示器(Liquid Crystal Display)就像设备的“高清屏幕”,可以显示文字、数字、图形甚至动画,广泛用于智能手机、工业面板和飞腾派开发板。相比LED数码管或点阵,LCD耗电少、体积小、无闪烁、辐射低,适合显示复杂内容。

1 显示原理与结构
LCD就像一个“智能窗帘”,通过控制光线穿过与否,显示文字或图像。它不像LED直接发光,而是利用液晶这种特殊物质,在电压作用下改变光线通过的方式,点亮或关闭像素。
- 显示原理:
- 液晶是一种介于液体和固体之间的物质,电压改变其分子排列,控制光线通过(亮)或阻挡(暗)。
- 每个像素由液晶单元组成,背后有背光源(如LED背光),电压决定像素亮暗。
主要类型:
| 类型 | 特点 | 优缺点 | 应用场景 |
|---|---|---|---|
| STN(Super-Twisted Nematic) | 无源驱动,单色或低彩,对比度低,响应慢。 | 成本低,耗电少,但显示效果差。 | 早期设备,如单色计算器、飞腾派低成本字符显示。 |
| TFT(Thin-Film Transistor) | 有源驱动,每个像素有晶体管开关,高对比度、快响应、全彩色。 | 高清,效果好,但成本高、控制复杂。 | 现代设备,如手机、飞腾派智能界面。 |
- STN:用简单电路驱动,适合显示简单文字(如“Temp: 25°C”)。
- TFT:每个像素独立控制,适合高清图形(如GUI界面)。飞腾派多用TFT支持彩色显示。
2 驱动与控制
市场上的LCD有两种模块形式
- 一种是LCD显示屏后边有印刷板并在板上带有驱动芯片的LCD模块。这种LCD可以方便的与各种单片机使用总线方式来驱动,例如8051单片机的显示形式就属于这种。
- 另一种在微处理器芯片上的内置LCD控制器来驱动显示模块(如S3C2440),它可以支持彩色/灰度/单色三种模式,灰度模式下可支持4级灰度和16级灰度,彩色模式下最多支持256色,LCD的实际尺寸可支持到640×480像素。
LCD液晶显示器 液晶显示有字符型模块和点阵图形模块:
- 字符型模块:用于显示字母、数字、符号等点阵式LCD,目前常用16×1,16×2,32×1和32×2行等和的模块。

- 点阵图形模块:能够绘制液晶显示有字符型模块和点阵图形模块。

LCD1602液晶显示模块

LCD1602液晶显示模块 (1)可编程选择显示三种带游标的字型:一行5×8点、二行5×8点和一行5×10点。 (2)内含字型库CGROM,产生192个点阵字型,包括96个标准ASCII码、96个日文字符和希腊字符。 (3)内含128个字节的RAM,其中80个字节为显示DDRAM,可以存储80个字符显示码。 (4)内含64个字节的自定义字型CGRAM,可暂存自建矩阵字型。
LCD1602液晶屏与MCU连接一般将R/W信号接地,通过延时方式控制,所以只需写入数据,不用读取LCD状态,采用4位数据总线方式。

小结
本章聚焦于嵌入式系统中最核心的人机交互设备接口设计与应用。HMI 的发展经历了从严格的字符命令时代(CLI) 到直观的图形交流时代(GUI),并正迈向自然交流时代。在输入设备方面,介绍了最基本的 独立按键 接口设计,以及通过轮询、中断 和 定时器 三种方式识别按键状态,并强调了 消抖技术 的必要性;对于多按键场景,则采用可节省 GPIO 的 矩阵按键,并通过 扫描法 或 翻转法 进行键位检测;此外,还引入了利用 ADC 和电阻分压的 模拟量按键 设计。在输出设备方面,本章详细阐述了 LED 数码管、LED 点阵显示模块以及LCD 液晶显示器的结构、原理与驱动方式,为飞腾派平台的人机界面设计提供了全面的硬件接口和软件控制基础。
