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,init 0xFFFF)
  • 参与计算:指令码 + 地址 + 数据(不含帧头与 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