1. 迪文COF智能屏开发环境搭建在开始页面切换和数值显示功能开发前我们需要先完成开发环境的准备工作。迪文COF结构智能屏采用独特的开发模式与传统嵌入式GUI开发有显著区别。1.1 硬件连接与驱动安装迪文COF智能屏通常通过UART或USB接口与主控设备通信。我使用的DGUS II系列7寸屏型号DMT80600T080_18WT采用COF(Chip On Film)结构这种设计使得屏幕整体厚度仅1.8mm。连接时需要注意电源配置使用5V/2A直流电源实测电压低于4.8V会导致屏幕闪烁通信接口推荐使用Type-C接口的USB转串口工具波特率默认115200电平匹配如果使用UART直连注意主控MCU的TX/RX需要接屏的RX/TX交叉连接重要提示首次连接时Windows系统可能需要手动安装CH340/CH341串口驱动这个驱动在迪文官网的资料下载专区可以找到。1.2 软件开发工具准备迪文屏配套的DGUS Tool V7.624是核心开发工具这个工具链包含几个关键组件界面设计器可视化设计UI页面.hmi文件字库生成器创建自定义字体.zk文件图标转换工具将图片转换为屏可识别的格式.icl文件工程管理器整合所有资源文件生成最终烧录包我建议在工具安装完成后先打开安装目录下的示例工程文件夹里面有一个完整的DEMO项目包含了各种控件的使用范例这对新手快速上手非常有帮助。1.3 工程目录结构规范一个标准的迪文屏项目应该包含以下目录结构ProjectName/ ├── DWIN_SET/ # 核心资源文件夹 │ ├── 13_Touch.icl # 触控配置文件 │ ├── 14_Show.icl # 显示配置文件 │ ├── 22_Config.icl # 系统配置文件 │ └── ... # 其他资源文件 ├── Font/ # 字库文件 ├── Picture/ # 图片资源 ├── TFT/ # 生成的TFT文件 └── Project.hmi # 工程主文件在实际项目中我习惯将不同功能的页面分开存放比如将主界面、设置页、数据展示页分别放在不同的子文件夹中这样后期维护会更加清晰。2. 页面切换机制深度解析迪文智能屏的页面切换是其核心功能之一理解其底层机制对开发复杂应用至关重要。2.1 页面管理基本原理迪文屏采用页面ID的管理方式每个页面都有一个唯一的ID编号0-255。屏幕内部维护着一个页面栈支持以下几种切换方式直接跳转立即切换到目标页面无返回压栈跳转将当前页面压入栈中再跳转到新页面退栈返回从栈顶弹出页面ID并返回复位跳转清空页面栈后跳转在DGUS Tool中我们通过页面管理面板来设置这些属性。右击页面选择属性可以看到Page ID和Page Type两个关键参数。2.2 触控按钮实现页面跳转最常用的页面切换方式是通过触控按钮实现。具体配置步骤如下在源页面放置一个触控按钮控件在属性面板设置操作模式选择页面切换目标页面输入要跳转的Page ID切换方式选择直接跳转或压栈跳转高级设置中可以配置按下/抬起时的显示效果我通常会为每个跳转按钮添加一个按下效果比如改变按钮颜色或显示一个临时图标这样能显著提升用户体验。2.3 通过串口指令控制页面切换除了触控操作我们也可以通过串口发送指令实现页面切换。迪文屏的页面切换指令格式为5A A5 07 82 00 84 5A 01 00 01指令解析5A A5帧头07数据长度82写寄存器指令00 84页面控制寄存器地址5A 01固定标识00 01目标页面ID此处为1在实际项目中我封装了一个简单的函数来处理页面切换void DGUS_SwitchPage(uint8_t pageID) { uint8_t cmd[] {0x5A, 0xA5, 0x07, 0x82, 0x00, 0x84, 0x5A, 0x01, 0x00, pageID}; HAL_UART_Transmit(huart1, cmd, sizeof(cmd), 100); }2.4 页面切换动画优化技巧默认情况下迪文屏的页面切换是瞬间完成的这可能会显得生硬。通过以下方法可以优化切换效果预加载技巧在跳转前先通过串口发送数据到目标页面的变量控件过渡动画在当前页和目标页设计相同的背景元素制造视觉连续性加载提示在数据量大的页面切换时显示一个加载动画我在一个医疗设备项目中通过预加载技巧将页面切换延迟从300ms降低到了50ms关键是在跳转前就完成了90%的数据传输。3. 数值显示功能实现数值显示是工业HMI的核心功能迪文屏提供了多种数值显示方案各有适用场景。3.1 变量显示控件基础使用DGUS Tool中最常用的数值显示控件是变量显示配置要点控件属性显示模式十进制/十六进制/浮点数数据长度8/16/32位字体大小和颜色变量地址每个变量对应一个VP地址0x0000-0xFFFF建议在工程文档中维护VP地址分配表例如显示一个温度值的配置VP地址0x1000数据类型16位有符号显示格式十进制1位小数字体24点阵宋体3.2 高级数值显示技巧在实际项目中我们经常需要一些特殊的显示效果数值范围颜色变化配置多个变量显示控件叠加根据值域范围显示/隐藏对应控件动态单位切换在变量旁边放置单位文本通过串口指令修改单位文本内容趋势指示添加▲/▼图标根据数值变化方向控制图标显示我在一个环境监测项目中实现了这样的效果当PM2.5超过75时数值变红并显示警告图标。这需要通过条件显示功能配合多个控件实现。3.3 通过串口更新显示数值迪文屏的变量显示内容可以通过串口指令更新。基本指令格式5A A5 0B 82 10 00 00 00 01 00 00 03 E8指令解析5A A5帧头0B数据长度82写寄存器指令10 00VP地址0x100000 00 01 00对于16位变量中间4字节固定03 E8要写入的值1000的十六进制在实际开发中我建议封装一个通用的数值更新函数void DGUS_UpdateValue(uint16_t vpAddr, int32_t value) { uint8_t cmd[12] {0x5A, 0xA5, 0x0B, 0x82}; cmd[4] vpAddr 8; cmd[5] vpAddr 0xFF; cmd[10] value 8; cmd[11] value 0xFF; HAL_UART_Transmit(huart1, cmd, sizeof(cmd), 100); }3.4 浮点数显示的特殊处理迪文屏原生支持浮点数显示但需要注意内存布局浮点数占用4字节采用IEEE 754标准传输方式需要将float转换为4个字节依次传输注意大小端问题迪文屏为小端模式示例代码void DGUS_UpdateFloat(uint16_t vpAddr, float value) { uint8_t *p (uint8_t *)value; uint8_t cmd[9] {0x5A, 0xA5, 0x08, 0x82}; cmd[4] vpAddr 8; cmd[5] vpAddr 0xFF; cmd[6] p[0]; cmd[7] p[1]; cmd[8] p[2]; cmd[9] p[3]; HAL_UART_Transmit(huart1, cmd, sizeof(cmd), 100); }4. 实战案例温湿度监控界面让我们通过一个完整的温湿度监控案例综合运用页面切换和数值显示技术。4.1 界面设计规划我们设计两个页面主页面ID0显示实时数据和状态设置页ID1配置报警阈值主页面元素当前温湿度数值显示历史曲线图状态指示灯进入设置按钮设置页元素高温/低温阈值输入框高湿/低湿阈值输入框保存按钮返回按钮4.2 关键实现步骤创建变量VP地址分配表变量说明VP地址数据类型当前温度0x100016位有符号当前湿度0x100116位无符号高温报警阈值0x110016位有符号低温报警阈值0x110116位有符号高湿报警阈值0x110216位无符号低湿报警阈值0x110316位无符号配置主页面到设置页的跳转按钮触控区域矩形(700, 450, 800, 500)操作模式压栈跳转目标页面1按下效果图标变化配置设置页的返回按钮触控区域矩形(50, 50, 150, 100)操作模式退栈返回按下效果图标变化4.3 数据更新逻辑实现在主控MCU端我们需要定期更新显示数据void UpdateDisplayData(float temp, float humi) { // 更新当前温湿度 DGUS_UpdateFloat(0x1000, temp * 10); // 放大10倍传输 DGUS_UpdateValue(0x1001, (uint16_t)(humi * 10)); // 更新状态指示灯 uint16_t status 0; if(temp g_highTemp) status | 0x01; if(temp g_lowTemp) status | 0x02; if(humi g_highHumi) status | 0x04; if(humi g_lowHumi) status | 0x08; DGUS_UpdateValue(0x1200, status); }4.4 设置页的数据保存当用户在设置页修改阈值后我们需要将这些值保存到主控MCU在设置页配置数据录入控件VP地址对应各阈值变量设置合适的数据范围和步进值配置保存按钮的触控事件按下时读取各阈值VP地址的值通过串口发送到主控MCUMCU确认接收后返回成功提示我在实际项目中发现迪文屏的触控响应有时会有延迟特别是在连续快速操作时。为了解决这个问题我在按钮按下事件中添加了100ms的防抖处理效果显著改善。