这次直接来看一个家电彩屏方案:LT165A,2.8 英寸,320×240 分辨率,用在除湿机人机交互上。很多做除湿机、空净、加湿器、暖通设备的产品工程师,遇到的第一道坎不是“能不能显示”,而是“这块屏到底怎么评估、怎么驱动、怎么做界面、怎么稳定量产”。这篇文章不谈虚的,重点回答几个问题:LT165A 这块彩屏方案的硬件接口大概是什么形态,主控 MCU 怎么选,固件工程怎么组织,除湿机 UI 要画哪些页面,实测时重点观察哪些指标,以及真机调试时最容易踩哪些坑。
先说结论:LT165A 这类 2.8 寸 QVGA 彩屏方案,定位并不是“炫酷”,而是“低成本、高可读、易开发”。320×240 分辨率放在除湿机上刚刚好:能清楚显示温度、湿度、风速、定时、水箱满、化霜等状态,又不会给主控带来太多刷屏压力。如果前端 LCD 驱动 IC 支持 SPI 或 MCU 并口,一颗带 2D DMA 的国产 MCU 就能流畅完成人机交互,甚至不需要外挂 SRAM。你只需要处理好帧缓冲、触摸(如果带)和刷新策略。
下面按“选型评估 → 环境准备 → 接口确认 → 固件驱动 → UI 设计 → 功能测试 → 性能观察 → 排错 → 量产建议”的顺序展开。内容偏工程实现,适合产品硬件工程师、嵌入式软件工程师和正在选型的中小家电团队参考。整篇文章基于 2.8 寸 320×240 彩屏在家电行业常见用法来写,具体电阻触摸、电容触摸是否需要,以及模块接口定义,请以你手上规格书为准。
1. LT165A 核心能力速览
| 项目 | 说明 |
|---|---|
| 方案名称 | LT165A 2.8 寸 320×240 除湿机彩屏显示方案 |
| 屏幕尺寸 | 2.8 英寸(对角线),常见该类面板有效显示区域约 57.6mm × 43.2mm |
| 分辨率 | 320×240,即 QVGA |
| 色彩格式 | RGB565 / RGB666 较为常见,具体以模组规格为准 |
| 驱动方式 | 需确认:SPI + 并行 RGB / MCU 8080 并口 / 串口屏协议 |
| 典型主控 | 常见选择为 STM32、GD32、ESP32 或国产 8051 系列,也可用带 LCD 控制器的专用芯片 |
| 支持功能 | 实时温湿度显示、模式切换、风速档位、定时、水箱满提醒、滤网清洁提醒、故障代码显示 |
| 背光 | LED 背光,需 PWM 调光,暗光场景降低功耗 |
| 接口电平 | 建议统一 3.3V,若主控 5V 需加电平转换 |
| 是否适合高湿环境 | 除湿机内部湿度高,整机必须做防潮、防凝露处理 |
| 显示方案形态 | 可能是裸屏模组,也可能是带中控板的整机方案,需按实际供货方式确认 |
除湿机不像消费数码产品那样要求超高分辨率。2.8 寸 320×240 的优势很实际:字库渲染消耗小,图标资源可以用 16 位色 BMP 直接解码,不需要大容量 Flash 存放复杂贴图。即便是没有硬件图像加速器的 MCU,用 DMA 刷一帧纯色也只需要毫秒级,MCU 还有大量时间处理温湿度采样、压缩机控制和通讯协议。
2. 方案适用场景与使用边界
2.1 适合的场景
LT165A 这类彩屏首先适合挂在除湿机、移动空调、新风系统、加热器这类“强状态反馈”设备上。用户需要一眼看清当前湿度是否达到目标,环境温度是多少,机器是除湿还是干衣模式。数码管和断码屏能显示数字,但表达不了“湿度趋势”“静电除尘”“负离子”等复杂状态。彩屏可以。
也适合用在需要频繁设置参数的产品中,比如目标湿度 40% 到 80% 可调、定时 1 到 24 小时、风速自动/低/中/高。这些多级菜单用轻触按键加屏幕即可完成,不需要额外做多个丝印字符,单 PCB 就能兼顾生产效率和交互友好度。
2.2 使用边界与合规红线
这类显示方案如果只做“桌面调试”很轻松,但一旦进入整机产品,有几个边界必须先确认。
第一是电气安全。除湿机属于强电设备,彩屏控制板通常与电源板、压缩机强电部分在同一个系统里,必须做隔离设计和 ESD 防护。屏幕的 FPC、排线要走弱电区域,避免靠近压缩机驱动线和加热线。整机认证时通常要满足家电相关安规与 EMC 要求,屏幕方案里的时钟、SPI 走线如果设计不好,可能成为辐射干扰源。
第二是防潮和凝露。除湿机内部是冷热交汇环境,尤其蒸发器附近湿度非常高。显示屏 PCB 应该涂三防漆或使用带防护涂层的模组,液晶面板和背光组件不能直接暴露在冷凝水环境中。如果屏幕位置靠近进风口,需要考虑导风结构避免水滴直接落在屏幕上。
第三是软件显示内容的合规。UI 上不能使用未经授权的人物肖像、商标、第三方图标。温度、湿度、故障码的显示精度要真实,不能为了视觉效果粉饰采集值。设置目标湿度后,如果实际湿度达不到,界面应该如实反馈。
第四是用户安全边界。除湿机涉及压缩机延时启动、化霜自动切换、水箱满停机,界面提示必须和主控状态机严格一致。不能用“仅 UI 显示错误”掩盖底层状态异常,所有界面状态都必须来自主控真实上报。
3. 环境准备与前置条件
3.1 硬件环境准备
在开始写固件前,先把最小系统凑齐。一般一套 LT165A 开发调试环境包含:
- 一块 2.8 寸 320×240 彩屏模组或整机显示板;
- 开发板或主控评估板,建议使用与量产目标一致的主控,避免后面移植踩坑;
- 一个逻辑分析仪或示波器,用于看 SPI/I2C/RGB/MCU 时序;
- USB 转串口工具,用于打印主控日志;
- 稳压电源,统一 3.3V 供电,观察电流变化;
- 温湿度传感器模块和模拟环境,用于联调真实数据流。
很多工程师犯的第一个错误,是直接拿 51 或 Cortex-M0 强行刷全屏。320×240 的裸屏如果走 SPI,刷一帧 16 位色数据大约需要 153.6KB 数据量,如果 SPI 时钟只有 18MHz,纯刷全屏也要 70ms 以上,再加上控制指令和协议开销,平时刷新局部可以,刷新大区域就会明显闪烁。
因此在选硬件时先确认:
- 主控是否有足够 RAM 做局部缓冲区或整帧缓冲?
- 主控是否支持 DMA + SPI 双缓冲?
- LCD 接口是否支持 RGB 并口,能省掉 MCU 逐点搬运压力?
- Flash 容量能不能装下字库和必要图标资源?
3.2 固件开发工具链
如果底屏由主控直接驱动,推荐使用带 DMA 的 SPI 外设,并优先选择一个成熟 GUI 框架。常见组合是:
- STM32/GD32/ESP32 + LVGL + SPI LCD;
- STM32/GD32 + 轻量版 FreeRTOS + LVGL;
- 资源更小的低端主控用裸机消息循环,自己维护几个全屏页面。
工具链方面,Windows 下可以选 Keil MDK 或 STM32CubeIDE,Linux 下可以用 GCC Makefile 工程。需要先准备好:
- LCD 数据手册和初始化代码
- 主控 LCD 外设驱动库
- GUI 库源码,例如 LVGL 的源码包
- 字库生成工具,例如 PCtoLCD2002,或 LVGL 的字体转换工具
串口屏方案则简单得多:主控只通过串口发指令,例如“页面切换 1”“设置文本 100 0 "60%"”,所有绘制在屏端完成。这适合 UI 复杂、团队 MCU 资源有限、需要快速出样的场景。
3.3 先认清你拿到的是“裸屏”还是“串口屏”
写代码之前最重要的一件事,不是急着抄初始化代码,而是分清屏幕形态。
- 裸屏模组:只有 TFT 玻璃、背光和 FPC,必须由主控自己完成 LCD 驱动 IC 初始化、刷像素和背光控制。优点是成本低、可控性强;缺点是需要投入底层驱动和 GUI 工作量。
- 带控制器的串口屏/智能屏:模组内部已经有一颗处理绘制命令的芯片,主控只负责业务逻辑。优点是开发快;缺点是成本高,且 UI 资源和逻辑在屏端,后续改版需要重新烧录屏幕固件。
从项目标题里的“彩屏显示方案”来看,LT165A 更偏向一套完整方案,也就是说可能屏端已经做了基础设计。但无论形态如何,作为开发者你必须至少找到一份规格书,确认接口引脚定义。下面给一个通用检查表。
| 检查项 | 需要确认的内容 |
|---|---|
| 供电电压 | VCC 是 3.3V 还是 5V,是否有单独背光供电 |
| 逻辑电平 | SPI/MCU 接口是 3.3V 电平还是 5V 兼容 |
| 接口类型 | SPI、8080、6800、RGB 还是 UART 串口协议 |
| LCD 驱动 IC | 具体型号,拿到官方初始化序列 |
| 背光引脚 | 是否支持 PWM 调光,背光开启电平高低 |
| 触摸 | 是否带触摸,电阻还是电容,I2C 地址多少 |
| 可视角度 | 12 点 / 6 点方向是否满足实际安装方式 |
以上内容如果在资料里找不到,不要猜,直接联系模组供应商要。
4. 固件工程搭建与屏幕点亮
4.1 创建工程目录
一个清晰的项目目录比什么都重要。建议按下面方式组织,把驱动、UI、业务逻辑、资源分开,避免三个月后自己也找不到代码。
lt165a_dehumidifier/ ├── app/ │ ├── main.c │ ├── ui_controller.c │ └── device_state.c ├── bsp/ │ ├── lcd_drv.c │ ├── lcd_drv.h │ ├── backlight.c │ ├── touch.c │ ├── sensor_humi.c │ └── board_gpio.c ├── gui/ │ ├── lvgl/ │ ├── assets/ │ ├── fonts/ │ └── screens/ ├── modules/ │ ├── dehumidify_mode.c │ ├── timer_ctrl.c │ └── fault_code.c └── build/ └── Makefile这种结构把“显示相关”和“业务相关”分开。BSP 层只做寄存器操作和驱动,GUI 层只做界面渲染,应用层则把传感器数据搬运到 UI。除湿机的主控状态机放在 modules 里,不依赖具体屏幕接口,后续换屏不影响核心逻辑。
4.2 LCD 初始化示例逻辑
初始化 LCD 前,先做基础 IO 配置:复位引脚、片选、数据/命令选择、SPI 时钟和背光 PWM。下面给出一段通用初始化逻辑示例,具体寄存器需要按 LCD 驱动 IC 数据手册替换。
/* lcd_drv.c 示例,完整的寄存器表需要按实际驱动 IC 填写 */ void lcd_init(void) { lcd_pin_config(); backlight_pwm_config(1000); /* 1kHz PWM */ lcd_reset(10); /* 硬件复位 */ lcd_set_cs(0); lcd_send_cmd(0x11); /* Sleep Out,命令号以数据手册为准 */ lcd_delay_ms(120); lcd_send_cmd(0x36); /* Memory Access Control 示例 */ lcd_send_data(0x48); lcd_send_cmd(0x3A); /* Pixel Format 示例 */ lcd_send_data(0x66); /* 18-bit 或 RGB666,与主控匹配 */ lcd_send_cmd(0x2A); /* Column Address Set */ lcd_send_data(0x00); lcd_send_data(0x00); lcd_send_data(0x01); lcd_send_data(0x3F); lcd_send_cmd(0x2B); /* Row Address Set */ lcd_send_data(0x00); lcd_send_data(0x00); lcd_send_data(0x00); lcd_send_data(0xEF); lcd_send_cmd(0x2C); /* Memory Write */ lcd_set_cs(1); }点亮屏幕最常用的验证动作不是直接画图标,而是清屏成几个纯色,例如全红、全绿、全蓝、全黑、全白,使用这种方法可以快速判断数据线、RGB 排列、扫描方向是否正确。
void lcd_fill_color(uint16_t color) { int x, y; lcd_set_window(0, 0, 319, 239); lcd_set_cs(0); lcd_send_cmd(0x2C); for (y = 0; y < 240; y++) { for (x = 0; x < 320; x++) { lcd_send_data(color >> 8); lcd_send_data(color & 0xFF); } } lcd_set_cs(1); }如果你的主控支持 SPI DMA,这个纯色刷屏可以改成 DMA 环形缓冲区,CPU 占用会大幅下降。除湿机 UI 有周期性的温湿度数值更新,只要刷新区域控制在几十个像素的大小,CPU 压力可忽略。
5. LT165A 除湿机界面设计与交互逻辑
5.1 主界面信息层级
除湿机开机后第一屏用户看的不是动画,而是三个问题:现在湿度多少、目标多少、机器在不在工作。因此主屏建议把信息分为三层:
第一层是最大字号的环境湿度,例如“当前湿度 68%”,使用类似 24px 到 32px 的数字字体,颜色建议选用高对比白色或青色,在大数字旁边标注“当前湿度”。
第二层是目标湿度,通常显示为进度条或环形百分比,颜色可以使用绿色表示正常,黄色表示略高,红色表示远超目标。
第三层是工作状态和故障提示,风速、定时剩余时间、水箱满、化霜等图标放在屏幕底部或右上角,小图标不干扰主要信息的阅读。
主 UI 页面之间切换使用轻触按键加状态机。除湿机按键一般不超过 6 个,包括“开/关”“模式”“风速”“湿度+”“湿度-”“定时”,用短按和长按组合减少物理按键数量。
5.2 页面流转示例
用状态机描述很简单,例如:
POWER_OFF → 待机页 待机页 → 按下开关键 → 运行主界面 运行主界面 → 按下模式键 → 模式选择子页 运行主界面 → 湿度+/湿度- → 目标湿度调整页 运行主界面 → 定时键 → 定时设置页 任意页面 → 10 秒无按键 → 返回主界面或进入亮屏状态无论按键还是触摸,UI 事件最终都转换成“用户请求”,然后查询当前状态机是否允许转换。比如压缩机正在强制延时启动的 3 分钟保护期间,用户虽然能改风速,但不能在 UI 上立即重启压缩机。这个规则应该在业务状态机里做,而不是界面层做。
5.3 使用 LVGL 组织界面
如果选用 LVGL,页面组织就简单了很多。下面是一个最小示例,演示把“当前湿度”与“目标湿度”显示到屏幕。
#include "lvgl.h" static lv_obj_t *label_current_humi = NULL; static lv_obj_t *bar_target_humi = NULL; void ui_main_screen_create(void) { lv_obj_t *scr = lv_scr_act(); lv_obj_t *label_title = lv_label_create(scr); lv_label_set_text(label_title, "DEHUMIDIFIER"); lv_obj_set_style_text_font(label_title, &lv_font_montserrat_18, 0); lv_obj_align(label_title, LV_ALIGN_TOP_MID, 0, 10); label_current_humi = lv_label_create(scr); lv_label_set_text(label_current_humi, "68%"); lv_obj_set_style_text_font(label_current_humi, &lv_font_montserrat_36, 0); lv_obj_align(label_current_humi, LV_ALIGN_CENTER, 0, -20); bar_target_humi = lv_bar_create(scr); lv_obj_set_size(bar_target_humi, 200, 12); lv_bar_set_range(bar_target_humi, 30, 95); lv_bar_set_value(bar_target_humi, 55, LV_ANIM_OFF); lv_obj_align(bar_target_humi, LV_ALIGN_BOTTOM_MID, 0, -30); }这里的字体大小、颜色、间距不是死标准,但可以作为导航底色。重点是把“除湿机逻辑”从“界面代码”里抽离。LVGL 只负责接收主控制器推送的数值,不直接读 ADC 和传感器。这样 UI 调试时,你可以直接模拟数据源,不需要每次都在除湿机强电环境里跑。
5.4 图标和字体资源
QVGA 分辨率下,一套图标资源采用 64×64、48×48、32×32 三种规格足够。图标要考虑黑白显示时的区分度,因为有些用户会设置夜间模式或屏幕亮度较低。尽量使用深色底、高亮图标的大对比方案。除湿机界面颜色不要超过 5 种主色,例如深蓝背景、白色文字、青色高亮、橙色警示、红色故障。
字库放 Flash 时建议只包含用到的字符集。比如“当前湿度”“目标湿度”“定时”“水箱已满”这些固定中文字符加起来可能不到 100 个,使用裁剪过的字库可以节省几十 KB 空间。如果用 LVGL,建议直接生成自定义字体,只包含界面需要的 GB2312 字符。
6. 功能测试与效果验证
6.1 基础显示测试
按下表逐项执行:
| 测试项 | 输入/操作 | 预期结果 | 失败判断 |
|---|---|---|---|
| 开机 Logo | 上电不按键 | 显示 Logo,背光亮 | 白屏、花屏、背光不亮 |
| 纯色显示 | 进入工厂测试模式 | 红/绿/蓝/黑/白纯色正常 | 缺色、偏色、对角线错位 |
| 文字显示 | 显示固定字符串 | 无乱码、无缺笔画 | 字库缺失、DMA 中断冲突 |
| 汉字显示 | 显示“当前湿度” | 每个汉字完整 | 字符集裁剪错误 |
| 数字刷新 | 模拟湿度从 40% 到 90% | 数字变化流畅 | 刷新闪烁、残影 |
| 设置页 | 按湿度+键 | 目标湿度递增 | 按键消抖或状态机异常 |
| 背光调节 | 发送 PWM 调整指令 | 亮度平滑 | PWM 频率低导致闪烁 |
最值得注意的是“数字刷新”测试。很多团队在 UI 原型阶段使用全屏刷新,每 500ms 刷新一次当前数据,效果看起来没问题。但到量产联调时,主控还要处理电机 PWM、压缩机启停和传感器读取,如果刷新不及时,会出现屏幕闪烁和偶发花屏。正确做法是把变化区域用 invalidate 标记只重绘局部,LVGL 本身支持这种局部重绘机制。
6.2 整机状态联动测试
除湿机的 UI 不只是“显示”,还要和主控状态严格同步。测试时需要人为构造以下状态并观察 UI:
- 水箱满信号触发:屏幕弹出“水箱满”提示,图标变成红色并持续 3 秒以上;
- 化霜状态:界面从“除湿模式”切换到“化霜模式”,显示雪花或化霜图标,禁止用户在此状态强制启动压缩机;
- 湿度传感器故障:温度值显示“--”,故障代码在屏幕顶部;
- 目标湿度和当前湿度接近时:显示“已达到设定湿度”,整机进入压缩机待机状态;
- 定时关闭:倒计时归零后执行关机,界面进入待机页。
这个测试如果只拿 UI 手点,很难覆盖完整。建议把主控状态机做成一个可导出的文本日志,比如:
[ 123.4s] MODE=DRY HUMI=68.2 TARGET=55 COMPRESSOR=ON [ 123.6s] UI_MODE=MAIN KEY=HUMI_UP [ 124.0s] TARGET=56 COMPRESSOR=ON [ 548.2s] WATER_TANK=FULL COMPRESSOR=OFF这样一旦界面显示和日志状态不一致,能很快抓到问题。
6.3 存储与字库压力测试
在整机长期运行时,主控可能频繁进入低功耗模式。需要注意从睡眠唤醒后 LCD 是否需要重新初始化、DMA 描述符是否完整。建议做一个压力测试:每 30 秒待机、唤醒、刷新,连续跑 1000 次,观察是否出现花屏或背光异常。
7. 资源占用与性能观察
7.1 RAM 和 Flash 估算
320×240 全彩一帧的裸数据量是 320×240×2 = 153,600 字节,约 150KB。很多低端 MCU 不可能把这整帧放进片内 RAM。因此实际工程里要么用“分块缓冲”,要么使用 LCD 控制器内部自带 GRAM,主控只需要按坐标逐点写入。
对 SPI 驱动的裸屏,主控写像素是通过指令流发送到面板内部 GRAM 的,不占主控 RAM;但如果 GUI 库在本地维护了一个帧缓冲并整帧上传,则需要很大 RAM。LVGL 默认不维护整帧缓冲,常用的做法是设置 1/10 屏大小的缓冲区,让 GUI 库反复调用 flush 回调。这个时候你就不要额外再搞一个整帧缓存,否则 RAM 直接爆掉。
Flash 空间方面,LVGL 内核代码量约几十 KB 到 150KB 不等,具体看裁剪配置。加上字库、图标、驱动,整体固件很容易超过 256KB。如果主控 Flash 只有 128KB,建议减少字体数量,或转向轻量级自绘方案。
7.2 帧率与刷新策略
除湿机上不追求高帧率,屏幕是静态显示为主,每 200ms 或 500ms 更新一次温湿度即可。真正需要谨慎的是背光控制和通信时的中断优先级。
有一些常见判断原则:
- 如果屏幕闪烁,先看是不是 SPI 时钟频率过高、信号线过长;
- 如果按键后屏幕反应迟钝,看中断里是否做了过多绘图操作;
- 如果屏幕显示花掉,检查主控 DMA 是否在传输途中被高优先级中断抢占,未做保护;
- 如果湿度变化显示有残影,可能是刷新坐标窗口设置不正确。
除湿机整机工作环境的电磁干扰比普通桌面开发板要多,压缩机启停瞬间可能拉低电源电压。彩屏模块供电建议单独加 LC 滤波,或者在板级电源上预留一个 100uF 电解电容位。
8. 接口 API 与批量生产测试
虽然 LT165A 是显示硬件方案,不是云端 API,但在生产阶段同样会遇到“接口”问题。这里的接口不是 Web API,而是工厂测试接口和生产测试批次批量执行。
8.1 预留工厂测试接口
在产品主板预留 UART 或 I2C 测试口,可以大幅提高产测效率。测试接口至少要实现以下功能:
- 执行 LCD 初始化并回读版本号;
- 显示红、绿、蓝、白、黑,由视觉检测设备或人工判断;
- 回读触摸校准参数(如果带触摸);
- 回读整机关键输入信号,如温湿度值、水箱满开关电平。
下面给出一段简单的命令协议示例:
// 产测命令示例,具体以项目协议为准 // 0xA1: 获取驱动版本 // 0xA2: 显示纯色 // 0xA3: 切换测试页面 void factory_test_handle(uint8_t cmd, uint8_t *data, uint8_t len) { switch (cmd) { case 0xA1: uart_send("LCD_VER:1.0\n"); break; case 0xA2: lcd_fill_color((data[0]<<8) | data[1]); uart_send("OK\n"); break; case 0xA3: ui_show_factory_page(); uart_send("OK\n"); break; default: uart_send("ERR\n"); break; } }8.2 批量生产注意事项
生产线上的第一片和开发板经常出现差异,原因是线材和模组批次不同。建议批量生产时做到:
- 每次上电回读 LCD 驱动 IC 的 ID,不等于预期值就报错;
- 背光驱动做好限流,避免首次上电冲击电流损坏 LED;
- 耐压测试或高压测试在 LCD 模组安装前进行,避免高压串入显示电路;
- 整机功能测试增加最少 2 小时的老化测试,观察高温高湿环境下是否出现显示异常。
生产测试代码建议和用户 UI 代码独立成一个测试固件或工厂模式。产测固件不跑业务逻辑,只测硬件通路,避免 UI 动画掩盖了硬件问题。
9. 常见问题与排查
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 白屏但背光亮 | LCD 初始化序列不正确或 LCD 复位没拉高 | 示波器看 Reset 波形、确认初始化命令 | 按规格书重新初始化,或检查复位 IO 配置 |
| 花屏、颜色错乱 | 数据/命令引脚被其他外设占用、SPI 模式错误 | 查看 GPIO 复用、确认 SPI Mode | 独立 CS 管脚,确认 SPI 模式与屏端一致 |
| 颜色偏蓝或偏红 | RGB 像素排列方向设置错误 | 修改 Address Control 命令 | 调节扫描方向和 RGB 顺序 |
| 显示镜像或旋转 90 度 | Memory Access Control 配置错误 | 使用规格书中扫描方向表测试 | 按安装方向配置显示方向 |
| 闪烁严重 | 刷新整屏或背光 PWM 频率太低 | 示波器观察背光波形、测量刷屏耗时 | 局部刷新,PWM 频率提高到 1kHz 以上 |
| 数字跳动但看不清 | 刷新窗口未限制,整帧重绘 | 检查 Set Window 坐标 | 只重绘数字区域 |
| 按键偶尔失灵 | IO 中断和 SPI DMA 中断冲突 | 查看日志时间点、测量按键波形 | 降低 SPI 优先级或按键使用独立定时器扫描 |
| 上电偶尔花屏 | 电源上升沿慢或复位时序不满足 | 示波器测量上电时序 | 延长复位时间,增加电源去耦电容 |
| 高湿环境运行后显示模糊 | 屏面凝露或 FPC 受潮 | 拆机检查水渍 | 调整结构防凝露,PCB 涂三防漆 |
| 长时间运行后闪动 | Flash/字库读取不稳定或供电波动 | 查看整机电流和电源纹波 | 加强电源滤波,检查 Flash 走线 |
实际调试中,有相当比例的“屏幕问题”最后定位到了电源和干扰上,而不是液晶本身。调试 LT165A 这类彩屏方案时,建议先放弃仿真器,直接在代码里加几个 GPIO 翻转点,用逻辑分析仪看时序。时序对了再调 UI,顺序不要反。
10. 最佳实践与量产建议
10.1 开发阶段
第一块板子点亮后,不要急着写完整 UI。先做一次接口稳定性测试:调用连续刷屏 1 万次,观察是否出现死机或者花屏。大多数早期花屏都是因为 DMA 描述符只配置了一次,而传输不能被中断打断。
全套 UI 设计前先固定好色板和字号,并生成对应的字库。不要一边开发一边频繁改字库文件,那样会导致 Flash 地址漂移和缓存失效问题。
10.2 UI 与业务解耦
把 UI 变更对业务逻辑的影响降到最低。建议定义一个通用状态结构体来承载 UI 需要的数据:
typedef struct { uint16_t current_humi_x10; // 当前湿度,0.1%RH int16_t current_temp_x10; // 当前温度,0.1℃ uint8_t mode; // 除湿/干衣/连续/送风 uint8_t fan_speed; // 自动/低/中/高 uint8_t target_humi; // 目标湿度 30-90% uint16_t timer_remain_sec; // 剩余秒数 uint8_t water_tank_full; // 水箱满标志 uint8_t defrosting; // 化霜状态 uint8_t fault_code; // 故障码,0 表示正常 } device_display_data_t;主程序定时把真实传感器数据填充到该结构体,UI 任务只读取这结构体并更新控件。这样即使换一种屏幕,或者把整机状态机从裸机改成 RTOS,UI 代码也可以复用。
10.3 合规与安全建议
除湿机彩屏方案进入量产前,至少做下面几项合规检查:
- 强电与弱电隔离是否满足整机安规要求;
- 屏幕 UI 中“故障”“警告”图标是否符合说明书描述,不误导用户;
- 主控故障状态升级时不依赖 UI 任务,避免 UI 卡死导致用户看不到安全信息;
- 高湿环境下显示区域不能成为积水点;
- 用户研究阶段如果使用真实人物肖像或第三方素材,必须有授权。
10.4 文档与归档
量产之后还会面临改版。一定要把以下内容归档到项目库:LCD 规格书、初始化代码版本、UI 设计源文件、字库生成配置、产测指令说明、整机 UI 评审截图。至少要保证两个月后换一个工程师接手,也能单独完成一次界面改版。
11. 总结与下一步
LT165A 2.8 寸 320×240 除湿机彩屏显示方案,是一个“够用且务实”的选型思路。320×240 分辨率不像 800×480 那样需要大带宽,也不像 128×64 单色屏那样表达受限。做除湿机这种实时状态反馈强、按键数量不太多、界面层级不深的产品,正好处在低成本 MCU 和完整用户体验的交汇点。
这套方案最值得优先验证的不是界面好不好看,而是三个底层问题:屏幕接口形态确认、驱动 IC 初始化序列、主控与屏幕的 DMA 传输稳定性。这三个问题通了,后续加 UI、加动画、加故障提示都是增量工作。
最容易踩的坑是“一上来就整大 UI”。先把纯色刷屏和 16 位色位图显示跑通,再分页构建界面。界面调试时少谈“感觉流畅”,多测“连续刷新 10000 次后是否花屏”“按键点击 1000 次后是否丢事件”。这些数据才是产品能不能量产的依据。建议收藏备用,后续做家电彩屏选型或 UI 联调时,可以按这篇清单走一遍。
下一步可以继续扩展的方向包括:把 LVGL 动画和触摸手势加入除湿机交互、接入低功耗待机模式、把界面状态同步到手机 App 做远程控制,以及在量产产线上引入相机视觉自动测试屏体坏点。先把屏幕可靠点亮、把核心数据有效显示,后面这些都是自然延伸。