|
|
本帖最后由 lihui163 于 2026-6-29 10:37 编辑
一、产品概述
本产品是一款基于 STM32G030 主控 +迪文2.8寸COF屏 的便携式可燃气体检测仪,专用于城镇燃气管网巡检、居民入户安检、有限空间及工业场所的可燃气体泄漏检测。仪器采用催化燃烧式传感器,支持甲烷(CH₄)/液化石油气(LPG)检测,整机通过 Ex ib IIC T4 Gb 本安防爆认证,轻巧便携、响应迅速、界面直观。本安防爆设计(Ex ib IIC T4 Gb):本质安全型电路设计,适用于 Zone 1/Zone 2 危险区域。高精度催化燃烧传感器:测量范围 0~100% LEL,分辨率 1% LEL,带温度补偿与零点漂移校正。三重报警提示:≥90dB 蜂鸣器 + 高亮 LED 确保嘈杂或黑暗环境及时警示。
智能人机交互:DGUS 图形界面,菜单引导操作。大容量锂电:3.7V 可充锂电池,单次充满连续工作 ≥8h,支持 Type-C 充电与欠压提示。数据存储:本地存储报警记录与检测数据,支持串口/USB 导出。人体工学外壳:ABS+PC 双色注塑,防滑、防尘、防水(IP65),配有腰夹与伸缩探杆接口。
二、整体框架介绍
上面是整体的原理,这个屏幕没有触摸,只能用用物理按键来操作屏幕这块,论坛里边没有这个例程,正好借这次开源把整个按键模拟的工程分享出来
有模拟滑动的,触摸的,上下切换的,改变数值的等等
1.页面切换
- /**
- * @brief 页面切换: 5A A5 07 82 00 84 5A 01 00 XX
- * @param page_id 目标页面ID (0~7)
- */
- void dwin_switch_page(uint8_t page_id)
- {
- uint8_t buf[10];
- buf[0] = 0x5A; buf[1] = 0xA5; /* 帧头 */
- buf[2] = 0x07; /* 数据长度: 7字节 */
- buf[3] = 0x82; /* 写寄存器指令 */
- buf[4] = 0x00; buf[5] = 0x84; /* 系统寄存器 0x0084 (页面切换) */
- buf[6] = 0x5A; buf[7] = 0x01; /* 切换模式: 5A01 */
- buf[8] = 0x00; buf[9] = page_id; /* 页面ID (高字节=0, 低字节=ID) */
- HAL_UART_Transmit(&huart2, buf, 10, 100);
- current_page = page_id; /* 追踪当前页面 */
- }
复制代码 2.VP变量写数据
- /**
- * @brief 写VP变量: 5A A5 05 82 VPH VPL DH DL
- * @param vp_addr DGUS变量地址 (16位)
- * @param value 写入的16位数据
- */
- void dwin_write_vp(uint16_t vp_addr, uint16_t value)
- {
- uint8_t buf[8];
- buf[0] = 0x5A; buf[1] = 0xA5;
- buf[2] = 0x05; /* 数据长度: 5字节 */
- buf[3] = 0x82; /* 写数据存储区 */
- buf[4] = (uint8_t)(vp_addr >> 8); /* VP地址高字节 */
- buf[5] = (uint8_t)(vp_addr & 0xFF); /* VP地址低字节 */
- buf[6] = (uint8_t)(value >> 8); /* 数据高字节 */
- buf[7] = (uint8_t)(value & 0xFF); /* 数据低字节 */
- HAL_UART_Transmit(&huart2, buf, 8, 100);
- }
复制代码
3.显示开机进度条
- /**
- * @brief 显示开机进度条 (写进度条VP 0x1200)
- * @param percent 0~100
- */
- void dwin_show_boot_progress(uint8_t percent)
- {
- if (percent > 100) percent = 100;
- dwin_write_vp(DWIN_VP_PROGRESS, (uint16_t)percent);
- }
复制代码
4.模拟触控事件
- /**
- * @brief 模拟触控事件: 5A A5 0B 82 00D4 5AA5 0004 FF01 0001
- * @param vp_addr 触控VP地址 (当前未使用, 保留)
- * @param value 0x0001=按下, 0x0000=释放
- */
- void dwin_send_touch(uint16_t vp_addr, uint16_t value)
- {
- uint8_t buf[14];
- buf[0] = 0x5A; buf[1] = 0xA5;
- buf[2] = 0x0B; buf[3] = 0x82;
- buf[4] = 0x00; buf[5] = 0xD4; /* 触控接口地址 0x00D4 */
- buf[6] = 0x5A; buf[7] = 0xA5; /* 子帧头 */
- buf[8] = 0x00; buf[9] = 0x04; /* 子数据长度: 4字节 */
- buf[10] = 0xFF; buf[11] = 0x01; /* VP地址: 0xFF01 (触控坐标) */
- buf[12] = 0x00; buf[13] = 0x01; /* 触控值: 0x0001=按下 */
- HAL_UART_Transmit(&huart2, buf, 14, 100);
- }
复制代码
5,简单界面展示
这是硬件
视频简单操作
https://www.bilibili.com/video/BV1d7Tu6TE8x/?vd_source=7233f1e1cc9ba168a135d10325298f13
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|