UI_Editor-III 组态开发
1.文件概述
| 文件 | 烧录位置 | 作用 |
|---|---|---|
Bootloader.bin |
LT7589 片内 | 下载器,刷一次即可 |
MCU_Code.bin |
LT7589 片内 | 控件固件,可二次开发 |
UartTFT-V3_Flash.bin |
外挂 SPI Flash | 素材 + UI 工程,改 UI 必须重烧 |
开发流程:准备素材 → 新建工程 → 设计页面 → 编译/模拟 → 烧录。
2. 新建工程
2.1 工程目录与素材规范
文件夹名必须严格一致(可直接复制 Examples 示例工程再清空内容):
| 文件夹 | 内容 | 格式 | 命名 |
|---|---|---|---|
Picture |
页面底图 / 弹窗 / 键盘底图 | BMP、JPG(PNG 不行) | 4 位数字 0000~9999 |
Icon |
小图标、图片数字、滑条、时钟 | BMP/JPG/PNG | 同上 |
FontBin |
字库 | .bin(BWFont 生成) |
同上 |
Gif |
动图 | .gif 或装 JPG 的文件夹 |
同上 |
WavBin |
音频 | .bin(WavTool 生成) |
00xx_Wav,最多 99 个 |
Needle / Plugin |
指针 / 编译信息 | — | 软件生成,勿动 |
命名规则:
- 4 位数字不可重复(
0000.png与0000.bmp也算重复,会导致调用错乱,可以用Numbering_Vx.x.exe,给图片素材快速编号) - 编号可留空,留空处生成无底图的页
- 禁用字符:
\ / : * ? " < > | . , - 未被引用的素材不打包进 bin(音频除外,都会打包)
2.2 工程设置
| 参数 | 说明 |
|---|---|
芯片型号 | 选 LT7589 |
flash 空间大小 | 与实际 SPI Flash 一致 |
Horizontal / Vertical | 屏幕分辨率(含 HBPD/HFPD/HSPW 等时序) |
波特率 | 默认 115200,须与 MCU 端一致 |
Modbus 通讯帧头 | 默认 0x5A 0xA5 |
设备地址 | 默认 0x01 |
其余常用项:
变量初始化:勾选后上位机设的默认值上电才显示,不勾则烧完 bin 看不到默认值
2.3 新建步骤
选择工程文件夹 → 命名 → 选底图(或取消)。页列表右键 新建页面 可增页。
2.4 无法删除中间页
中间多余的页面无需删除,界面没有调用默认不编译,不会占用多余空间
2.5 UI_projectname.h
编译后在工程文件夹根目录生成,内含每个控件的名字 + 地址宏。
3. 页面与控件
3.1 页面参数
点击页列表或页面空白处调出。常用项:
向左/右/上/下滑动跳转页:滑动跳页目标返回值(reportToHost):勾选后跳页/触摸时向串口回传
3.2 常用控件
| 控件 | 用途 | 控件 | 用途 |
|---|---|---|---|
Button |
跳页 / 发键值 | String_Label |
文本显示 |
Icon |
按值切图 | Text Number Display |
数值显示 |
Slider Bar |
拖动改变量 | Trend Graph |
曲线 |
Gif |
动画 | QRCode |
二维码 |
Timer |
定时写变量 | Popupbox |
弹窗 |
| 数字/英文/中文键盘 | 输入,写入指定变量地址 | — | — |
3.3 LT7589 单页控件数量上限
| 控件 | 上限 | 控件 | 上限 |
|---|---|---|---|
| 按键 / 变量调节 / 多功能按键 / 状态按键 / 赋值按键 | 20 | 字符串显示 / 静态文本 | 300 |
| 滑动菜单 / 弹窗 | 8 | 小图标 / 位元状态 | 64 |
| 滑条 / 环形滑条 / 文字滚动 | 4 | 动图 | 20 |
| 键盘键值 SingleKey | 60 | 二维码 | 16 |
| 数字键盘 | 20 | 曲线 | 8 |
| 英文 / 中文键盘 | 10 | 指针 | 6 |
| 字库数字 / 图片数字 | 30 | 自动变量 / 计时器 | 10 |
| 数字时钟 | 15 | 编码器 / 音频播放 | 1 |
| 模拟时钟 | 2 | — | — |
具体上限见LT7589_UE-III_V1.0_20250925_LIB\User\module_select.h
曲线特别占内存,Curve_Size一栏不要随意放大,按需设置。
4. 变量与寄存器
4.1 地址空间
- LT7589 RAM 64KB:
0x0000 ~ 0x7FFF,每地址 2 字节 0x7000 ~ 0x71FF为特殊寄存器,用户变量不要放这里
| 类型 | 含义 |
|---|---|
writeAddr 变量地址 |
存”显示什么”(文本编码、数值、状态) |
parameterAddr 参数地址 |
存”怎么显示”(坐标、颜色、字体) |
两者共用 RAM,分配时要算好长度避免重叠。
4.2 特殊寄存器
| 地址 | 功能 | 写入值 |
|---|---|---|
0x7000 |
换页 | 页码(从 0 开始) |
0x7001 |
背光亮度 | 0~63 |
0x7002~0x7007 |
年/月/日/时/分/秒 | 见 RTC教程 |
0x7008 |
确认修改时间 | 0全部 / 1年月日 / 2年月 … 6分秒 |
0x700A |
音频 | 0x0000停;0x0001播 0000 号;0x8001循环;0x0005播 0004 号 |
0x700B |
音量 | 0~16(16 最大,0 静音) |
0x700C |
电阻屏校准 | 写 0x005A 触发,完成自动清零 |
0x700D |
键码触发 | 模拟触摸 |
0x700E |
自动背光 | 0关 / 1开 |
0x700F |
休眠亮度 | 0~63 |
0x7010 |
休眠时间 | 秒 |
0x7011 |
串口升级 | 写 0xAA55 进升级模式 |
0x7014 |
变量批处理 | 写编号批量刷新当前页变量 |
0x703F |
多国语言切换 | 语言编号 |
5. 串口协议
5.1 帧格式
写: 5A A5 | LEN | 10 | ADDR(2) | DATA(2n) | CRC(2)
读: 5A A5 | LEN | 03 | ADDR(2) | WORDS(2) | CRC(2)| 字段 | 说明 |
|---|---|
| 帧头 | 0x5A 0xA5(可改) |
| LEN | LEN = 1(指令) + 2(地址) + 2n(数据) + 2(CRC) |
| 指令码 | 0x10 写、0x03 读、0x41 触摸上报 |
| ADDR / DATA | 高字节在前 |
| CRC | 低字节在前(见 5.2) |
- 单次写入 > 250 字节:帧头后插
0x00,LEN 变 2 字节,上限 2043 字节 - 写指令必回反馈:成功
5A A5 04 10 FF 4C 30,失败5A A5 04 10 00 0C 70
5.2 CRC
- 算法:标准 CRC16/MODBUS(poly
0xA001,init0xFFFF) - 参与计算:指令码 + 地址 + 数据(不含帧头与 LEN)
- 发送:低字节在前
查表函数返回值已做字节交换,直接用易与常见 MODBUS 代码混淆。下列代码已用手册 4 个示例逐字节验证:
uint16_t LT_CRC16(const uint8_t *p, uint16_t len)
{
uint16_t crc = 0xFFFF;
while (len--) {
crc ^= *p++;
for (uint8_t i = 0; i < 8; i++)
crc = (crc & 1) ? (uint16_t)((crc >> 1) ^ 0xA001) : (crc >> 1);
}
return crc;
}
/* 写 n 个字到地址 addr */
void LT_Write(uint16_t addr, const uint16_t *w, uint8_t n)
{
uint8_t b[256], i = 0;
b[i++] = 0x5A; b[i++] = 0xA5;
b[i++] = 1 + 2 + 2 * n + 2; /* LEN */
b[i++] = 0x10; /* 写 */
b[i++] = (uint8_t)(addr >> 8); /* 地址高字节在前 */
b[i++] = (uint8_t)(addr & 0xFF);
for (uint8_t k = 0; k < n; k++) {
b[i++] = (uint8_t)(w[k] >> 8); /* 数据高字节在前 */
b[i++] = (uint8_t)(w[k] & 0xFF);
}
uint16_t crc = LT_CRC16(&b[3], 1 + 2 + 2 * n);
b[i++] = (uint8_t)(crc & 0xFF); /* CRC 低字节在前 */
b[i++] = (uint8_t)(crc >> 8);
Uart_Send(b, i);
}
/* 读 addr 起的 words 个字 */
void LT_Read(uint16_t addr, uint16_t words)
{
uint8_t b[16], i = 0;
b[i++] = 0x5A; b[i++] = 0xA5;
b[i++] = 1 + 2 + 2 + 2;
b[i++] = 0x03;
b[i++] = (uint8_t)(addr >> 8); b[i++] = (uint8_t)(addr & 0xFF);
b[i++] = (uint8_t)(words >> 8); b[i++] = (uint8_t)(words & 0xFF);
uint16_t crc = LT_CRC16(&b[3], 1 + 2 + 2);
b[i++] = (uint8_t)(crc & 0xFF); b[i++] = (uint8_t)(crc >> 8);
Uart_Send(b, i);
}5.3 指令速查
左列可直接粘进 UI_Debugger-III(工具自动补帧头/LEN/CRC),右列是 MCU 端要发的完整帧。
| 功能 | 工具简写 | 完整帧(十六进制) |
|---|---|---|
写变量 0x0901=0x0020 |
10 0901 00 20 |
5A A5 07 10 09 01 00 20 B6 47 |
| 切到第 2 页 | 10 7000 00 02 |
5A A5 07 10 70 00 00 02 7E C2 |
| 背光 = 45 | 10 7001 00 2D |
5A A5 07 10 70 01 00 2D 6E DE |
| 改时间(6 个寄存器) | 10 7002 00 0A 00 0A 00 0A 00 0A 00 0A 00 0A |
5A A5 11 10 70 02 00 0A 00 0A 00 0A 00 0A 00 0A 00 0A EB 3D |
| 曲线 1 缓冲 | 10 C001 00 C8 00 64 00 C8 00 64 00 C8 00 64 |
5A A5 11 10 C0 01 00 C8 00 64 00 C8 00 64 00 C8 00 64 66 42 |
| 曲线 2 缓冲 | 10 C002 00 14 00 32 00 0A 00 64 00 00 |
5A A5 0F 10 C0 02 00 14 00 32 00 0A 00 64 00 00 00 9F |
| 清除曲线 1/2 | 10 E003 |
5A A5 05 10 E0 03 79 C4 |
| 切换音频(循环 0000 号) | 10 700A 80 01 |
5A A5 07 10 70 0A 80 01 7F 01 |
| 停止音频 | 10 700A 00 00 |
5A A5 07 10 70 0A 00 00 DF 01 |
| 音量 = 1 | 10 700B 00 01 |
5A A5 07 10 70 0B 00 01 4F 01 |
| 电阻屏校准 | 10 700C 00 5A |
5A A5 07 10 70 0C 00 5A BF 3B |
| 键码触发 | 10 700D 00 00 |
5A A5 07 10 70 0D 00 00 6E C0 |
| 自动背光关 | 10 700E 00 00 |
5A A5 07 10 70 0E 00 00 9E C0 |
| 休眠亮度 = 10 | 10 700F 00 0A |
5A A5 07 10 70 0F 00 0A 4F 07 |
| 休眠时间 = 10s | 10 7010 00 0A |
5A A5 07 10 70 10 00 0A 7E C1 |
| 进入串口升级 | 10 7011 AA 55 |
5A A5 07 10 70 11 AA 55 11 99 |
| 多国语言 = 1 | 10 703F 00 01 |
5A A5 07 10 70 3F 00 01 0E CF |
工具里
++ 1000是指令间延时 1000 ms,不是串口指令。
连续下发多条指令时(尤其曲线缓冲 → 清除),中间要留间隔。
5.4 屏 → MCU:触摸上报
控件勾选 reportToHost 后,触摸时屏主动发:
5A A5 | 07 | 41 | ADDR(2) | returnValue(2) | CRC(2)ADDR常为0xFFFF(按键类),或控件变量地址(滑条 / 键盘类)returnValue为控件里设的值,用于区分按的是哪个键
6. 编译与烧录
6.1 编译
File → Build Project 生成 UartTFT-V3_Flash.bin 与 UI_projectname.h。
改完 UI 必须重新编译 + 重新烧录 + 重新复制 .h。
6.2 预览并烧录
用 UI_Emulator-III 直接打开编译好的 bin,在 PC 上模拟运行,确认无误后烧录到单片机中。
7. 排障
| 现象 | 原因 / 处理 |
|---|---|
| 屏亮但控件不显示默认值 | 工程设置没勾 变量初始化 |
| MCU 发指令屏无反应 | 波特率/校验位不一致;CRC 字节序搞反(应为低字节在前) |
一直收到 …10 00 0C 70 |
CRC 校验失败,屏拒收 |
| 多个控件内容互串 | 变量地址重叠,每地址占 2 字节,要算长度 |
| 改了素材屏上没变 | 需重新 Build 并重新烧 UartTFT-V3_Flash.bin |
| PNG 做底图失败 | 底图只支持 BMP/JPG,PNG 只能放 Icon |
| 加控件编译报错 | 超单页数量上限,需改 Mcu_Code |
| 烧录软件认不出 Flash 容量 | 在 Flash.ini 与 Bootloader 补 Flash 信息 |
更多细节:控件参数见手册第 6 章,ModBus 见第 11 章,
作者:罗珍雪 创建时间:2026-10-29 11:30
最后编辑:罗珍雪 更新时间:2026-11-02 20:02
最后编辑:罗珍雪 更新时间:2026-11-02 20:02