迪文COF智能屏开发:环境搭建与页面切换数值显示实战
2026/7/16 13:04:42 网站建设 项目流程

1. 迪文COF智能屏开发环境搭建

在开始页面切换和数值显示功能开发前,我们需要先完成开发环境的准备工作。迪文COF结构智能屏采用独特的开发模式,与传统嵌入式GUI开发有显著区别。

1.1 硬件连接与驱动安装

迪文COF智能屏通常通过UART或USB接口与主控设备通信。我使用的DGUS II系列7寸屏(型号DMT80600T080_18WT)采用COF(Chip On Film)结构,这种设计使得屏幕整体厚度仅1.8mm。连接时需要注意:

  1. 电源配置:使用5V/2A直流电源,实测电压低于4.8V会导致屏幕闪烁
  2. 通信接口:推荐使用Type-C接口的USB转串口工具,波特率默认115200
  3. 电平匹配:如果使用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)。屏幕内部维护着一个页面栈,支持以下几种切换方式:

  1. 直接跳转:立即切换到目标页面(无返回)
  2. 压栈跳转:将当前页面压入栈中,再跳转到新页面
  3. 退栈返回:从栈顶弹出页面ID并返回
  4. 复位跳转:清空页面栈后跳转

在DGUS Tool中,我们通过"页面管理"面板来设置这些属性。右击页面选择"属性",可以看到"Page ID"和"Page Type"两个关键参数。

2.2 触控按钮实现页面跳转

最常用的页面切换方式是通过触控按钮实现。具体配置步骤如下:

  1. 在源页面放置一个"触控按钮"控件
  2. 在属性面板设置:
    • 操作模式:选择"页面切换"
    • 目标页面:输入要跳转的Page ID
    • 切换方式:选择"直接跳转"或"压栈跳转"
  3. 高级设置中可以配置按下/抬起时的显示效果

我通常会为每个跳转按钮添加一个"按下效果",比如改变按钮颜色或显示一个临时图标,这样能显著提升用户体验。

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 页面切换动画优化技巧

默认情况下,迪文屏的页面切换是瞬间完成的,这可能会显得生硬。通过以下方法可以优化切换效果:

  1. 预加载技巧:在跳转前先通过串口发送数据到目标页面的变量控件
  2. 过渡动画:在当前页和目标页设计相同的背景元素,制造视觉连续性
  3. 加载提示:在数据量大的页面切换时,显示一个加载动画

我在一个医疗设备项目中,通过预加载技巧将页面切换延迟从300ms降低到了50ms,关键是在跳转前就完成了90%的数据传输。

3. 数值显示功能实现

数值显示是工业HMI的核心功能,迪文屏提供了多种数值显示方案,各有适用场景。

3.1 变量显示控件基础使用

DGUS Tool中最常用的数值显示控件是"变量显示",配置要点:

  1. 控件属性:
    • 显示模式:十进制/十六进制/浮点数
    • 数据长度:8/16/32位
    • 字体大小和颜色
  2. 变量地址:
    • 每个变量对应一个VP地址(0x0000-0xFFFF)
    • 建议在工程文档中维护VP地址分配表

例如显示一个温度值的配置:

  • VP地址:0x1000
  • 数据类型:16位有符号
  • 显示格式:十进制,1位小数
  • 字体:24点阵宋体

3.2 高级数值显示技巧

在实际项目中,我们经常需要一些特殊的显示效果:

  1. 数值范围颜色变化:
    • 配置多个"变量显示"控件叠加
    • 根据值域范围显示/隐藏对应控件
  2. 动态单位切换:
    • 在变量旁边放置单位文本
    • 通过串口指令修改单位文本内容
  3. 趋势指示:
    • 添加▲/▼图标
    • 根据数值变化方向控制图标显示

我在一个环境监测项目中实现了这样的效果:当PM2.5超过75时数值变红,并显示警告图标。这需要通过"条件显示"功能配合多个控件实现。

3.3 通过串口更新显示数值

迪文屏的变量显示内容可以通过串口指令更新。基本指令格式:

5A A5 0B 82 10 00 00 00 01 00 00 03 E8

指令解析:

  • 5A A5:帧头
  • 0B:数据长度
  • 82:写寄存器指令
  • 10 00:VP地址(0x1000)
  • 00 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 浮点数显示的特殊处理

迪文屏原生支持浮点数显示,但需要注意:

  1. 内存布局:
    • 浮点数占用4字节
    • 采用IEEE 754标准
  2. 传输方式:
    • 需要将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 界面设计规划

我们设计两个页面:

  • 主页面(ID:0):显示实时数据和状态
  • 设置页(ID:1):配置报警阈值

主页面元素:

  1. 当前温湿度数值显示
  2. 历史曲线图
  3. 状态指示灯
  4. 进入设置按钮

设置页元素:

  1. 高温/低温阈值输入框
  2. 高湿/低湿阈值输入框
  3. 保存按钮
  4. 返回按钮

4.2 关键实现步骤

  1. 创建变量VP地址分配表:
变量说明VP地址数据类型
当前温度0x100016位有符号
当前湿度0x100116位无符号
高温报警阈值0x110016位有符号
低温报警阈值0x110116位有符号
高湿报警阈值0x110216位无符号
低湿报警阈值0x110316位无符号
  1. 配置主页面到设置页的跳转按钮:

    • 触控区域:矩形(700, 450, 800, 500)
    • 操作模式:压栈跳转
    • 目标页面:1
    • 按下效果:图标变化
  2. 配置设置页的返回按钮:

    • 触控区域:矩形(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:

  1. 在设置页配置"数据录入"控件:

    • VP地址对应各阈值变量
    • 设置合适的数据范围和步进值
  2. 配置保存按钮的触控事件:

    • 按下时读取各阈值VP地址的值
    • 通过串口发送到主控MCU
    • MCU确认接收后返回成功提示

我在实际项目中发现,迪文屏的触控响应有时会有延迟,特别是在连续快速操作时。为了解决这个问题,我在按钮按下事件中添加了100ms的防抖处理,效果显著改善。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询