因整体记录篇幅较长,故进行了切割,此文为前文 迪文屏DMT12800K070_A2WTC踩坑实录(一)的接续部分。

目录

  • 一、渐入阶段
    • 1. 串口通信:接收来自Hi3531D的指令
    • 2. 亮度调节子页面
    • 3. 内窥镜页面
      • 3.1 使用按键返回控件
      • 3.2 串口通信:Hi3531D接收返回值数据包
      • 3.3 变量数据录入
  • 二、PS(2018)素材升级(后记)

一、渐入阶段

  之前设计的主页面中分设了 “内窥镜”、“设置” 以及 “日志” 三个大模块,目前分别对应主页面 001.bmp 后的背景图片。因为人机界面设计实际上是个协同性质的任务,有些设计不是自己想做就能马上实装的,所以接下来的设计实现过程看起来或许会比较混乱。

1. 串口通信:接收来自Hi3531D的指令

  完成主页面的初步设计后,先解决一下两块板子的通信问题。不然每次更新完迪文屏的工程都要用串口助手发送一次初始化完成的页面跳转指令,有点麻烦。
  Hi3531D 端的串口硬件配置可以参考博客:Hi3531D 串口配置流程,亲测可行。串口通信程序也不难写,总体流程还是:打开串口、配置参数、读写串口、关闭串口。这里就不贴出全部的代码了,仅贴出测试相关的部分。在前一篇博客中利用串口助手发送过页面跳转指令,将其映射到程序中就是:

void sender(int fd)
{int len, ret;// 迪文屏固定帧头,包的其余内容在各自的特定函数中补全port_sbuff[0] = 0x5A;port_sbuff[1] = 0xA5;len = (int)port_sbuff[2] + 3;ret = write(fd, &port_sbuff, len);
}// 页面指令转换:5A A5 07 82 0084 5A01 screen_id
void SetScreen(int fd, int screen_id)
{port_sbuff[2] = 0x07;port_sbuff[3] = 0x82;port_sbuff[4] = 0x00;port_sbuff[5] = 0x84;   // 系统变量 PIC_Set 地址port_sbuff[6] = 0x5A;port_sbuff[7] = 0x01;port_sbuff[8] = 0x00;port_sbuff[9] = (unsigned char)screen_id;sender(fd);
}void HMI_Init(int fd)
{SetScreen(fd,0x01);    // 初始化完成,跳转到主页面
}

  写完串口通信程序,接好线以后在板载 linux 上运行测试,在上位机查看结果:

  串口助手正确地接收到了板载 linux 发出的指令,由此也可确定迪文屏必然也能接收到该指令。

PS:或者简单一些,直接在命令行下测试串口。以 uart1 为例,其在 /dev 下对应的设备文件名为 ttyAMA1:
(1)先设置波特率
stty -F /dev/ttyAMA1 115200
(2)发送数据测试
echo Test > /dev/ttyAMA1
(3)接收数据测试
cat /dev/ttyAMA1

2. 亮度调节子页面

  这是设置页面的子页面(可以根据背景色来判断)。先用 Win10 自带的画图软件简单加工一下 005.bmp(不会 PS 是硬伤 QAQ),然后添加到 DGUS 工程中:

  然后依次添加拖动调节、拖动刻度显示、数据变量显示控件,并配置参数(数据自动上传暂时先不管):


  • 因为调整的是迪文屏整体的显示亮度,所以实际调节的是背光 LED 亮度,手册中给出了其作为系统变量的地址 0x0082,三者的变量地址均需保持一致;
  • 根据上一则说明,0x0082 的高字节数据具有调节亮度的功能,因此拖动调节控件的数据返回格式、滑动刻度显示的变量类型、数据变量显示的变量类型均为VP高字节相关;
  • 拖动调节的起始/终止位置对应的返回值代表调节数据的最小和最大值,都为 0 则无法拖动,且因为这里要调节的是背光 LED 亮度,最小值不宜设置为 0 ,因此设置为 10;
  • 滑动变量的起始/终止变量刻度值与拖动调节类似,都为 0 则无法拖动;
  • 因为最大值设置为 100,所以数据变量显示控件下的整数位数应设置为 3。

PS:如果上电测试后发现调低亮度一段时间后屏幕自动变亮或者变暗,就说明开启了触摸屏背光待机设置。可以选择关闭背光待机,也可以修改待机亮度。具体配置可以参考应用开发手册来修改 CFG 文件:

3. 内窥镜页面

3.1 使用按键返回控件

  这里第一个需要实现的就是按键控制 Hi3531D 进行录屏操作(当然录的不是迪文屏而是外部输入视频),因此需要添加按键返回型触控控件而不再是基础触控。不过按键返回型触控控件实际上也没有多复杂:

  • 数据自动上传勾上就行,表示开启数据录入完成时自动上传数据;
  • 键值里可以设置返回的键值数据,变量地址也是 0x1000 ~ 0xFFFF 里选一个,且同一个地址可以对应多个键值;
  • 一般来说用按字长度写,写到整个变量地址里去就可以了;
  • 虽然按键返回控件只占用一个空间地址,但保险起见还是设定成二个以上为好。

  根据上图的配置,最终在迪文屏上点击该按键返回型触控控件时,迪文屏将从串口返回数据包:5A A5 06 83 10 94 01 00 01,其中 1094 就是设定的变量地址,01 表示返回数据的字长度,00 01 就是返回的键值。

3.2 串口通信:Hi3531D接收返回值数据包

  接着则是要在 Hi3531D 端准备好迪文屏的串口包解包函数。只要对串口接收函数稍加修改即可,流程可以简单概括为:开子线程阻塞接收单个字节的数据,收到了就立即将其压入指令缓冲区队列中;在主线程中不断尝试从指令缓冲队列中提取出一条完整的指令,然后根据指令具体内容做出相应的动作。同样贴出测试相关的代码:

void *reciever(void *par)
{while(1){__uint8_t data;int ret;ret = read(fd, &data, 1);if(ret != 0)queue_push(data);           // 将接收到的数据压入队列缓冲区中}
}int main(int argc, char *argv[])
{HI_S32 s32Ret;...// 创建串口接收子线程s32Ret = pthread_create(&reciever_thread, NULL, reciever, NULL);if(s32Ret == HI_FAILURE) { printf("Read COM thread Create Failed!\n"); return HI_FAILURE; }while(1){qsize  size = 0;__uint16_t address = 0;size = queue_find_cmd(port_rbuff, CMD_MAX_SIZE);   // 从缓冲区中获取一条指令if(size > 0){...s32Ret = VENC_START();...}}...return s32Ret;
}

3.3 变量数据录入

  对内窥镜页面的背景图片稍加修改,同时增加键盘图片:

  之后在背景图片上挖好的白框位置放上变量数据录入的触控控件、数据变量显示控件以及左侧的一般文本显示控件即可:

  • 数据自动上传想必无需多言,勾上就完事了;
  • 变量数据录入控件的空间占用数量由变量类型决定,有 2 字节、4 字节和 8 字节三种,分别对应 1、2、4 个地址位;
  • 设置其他东西之前,先设置键盘:选择键盘所在的页面(上图中是其他页面),框选页面下键盘的范围,以及设置键盘显示在当前页面下的位置(点一下就可以了,定位用的是左上角);
  • 之后可以在键盘以外的显示位置设置进行数据录入时,录入数据的具体情况的显示地点(也是点一下)
  • 不要忘记给显示的键盘上的所有按键设置好基础触控;
  • 输入显示方式可以设置在进行数据录入时,录入的数据是直接显示还是用 * 号代替(密码模式);
  • 数据变量显示的地址和数据变量录入的地址要相同,类似于亮度调节页面中的拖动调节。

  之后要在 Hi3531D 这边的解包处理中写好对应的地址 —— 键值处理方法,博主这里对应的处理函数还有待开发,临时用 printf 代替了一下(实板调试已经通过了,这里贴预览只是为了方便截图演示):

二、PS(2018)素材升级(后记)

  用练手的 UI 练习好基本功能的实现后,学习一下 PS(没错咱就是现学现用的 ,之前 gui 能想到得用这玩意儿,第一次使用,轻喷 QAQ),和另一边的负责人沟通好要预留的参数调节接口,就可以升级 UI 了:


  和之前的相比,主要增加了弹出菜单的部分以及增量调节的部分。这俩实装起来都不算难,照着手册里的说明使用就可以(按理来说渐入阶段也走完就可以依赖手册继续深入学习和自主开发了。好吧摊牌了,就是懒):

  其余无甚,都是嵌入式 linux 应用开发的内容了,与 HMI 设计关系不大,因此这里只补录遇到的一个坑:在调试参数设置页面中的各项参数时发现迪文屏出现了不稳定的误触情况:明明按的是这个位置,迪文屏给出的响应却是按下另一个位置的响应。博主花了一个晚上查验多方无果,最后从客服处得知可能是静电问题(wdnmd),用手摸着迪文屏边上的铁框发现果然没有误触了。

迪文屏DMT12800K070_A2WTC踩坑实录(二)相关推荐

  1. 网站移动版本开发踩坑实录二

    印象笔记分享连接:https://app.yinxiang.com/shard/s12/sh/ec7eb8f4-d0b4-4ebf-aedb-b6ecdaee943f/be2a26cffb831c00 ...

  2. iOS 入门开发踩坑实录

    其实人生也没有什么道理可讲,但是我们不必丧气,还是要期待,人生有奇遇. 前言 苹果开发者:iOS Developer 最近因为工作需要要开始搞iOS了,简单记录下我收集和学习的过程. 学习资料准备 组 ...

  3. RIME(小狼毫)踩坑实录(常见问题)

    目录 RIME(小狼毫)踩坑实录 适合谁使用 配置文件规则 文件目录 命名格式 yaml语法 踩坑 配置微软双拼 增加词典 GUI方式(不推荐) 编写yaml文件方式 符号上屏 总结 RIME(小狼毫 ...

  4. ODrive踩坑(二)3508电机和TLE5012B磁编码器参数配置、校准、位置闭环模式转动电机(TLE5012B-E1000)

    ODrive对无刷电机进行闭环控制,需要提前获取电机和编码器的参数. 电机极对数 电机需要配置的参数为 极对数.最大电流.校准电流.电机类型.其他参数如相电阻.电感等可由驱动器自动测量. 极对数 = ...

  5. 22、T5L 迪文屏 C51开发之Hello World例程

    T5L 迪文屏 C51开发之Hello World例程 1.写在前面 2.例程功能简介 3.GUI界面设计 4.C51代码设计 1.写在前面   前面已经介绍了如何使用DGUS Tool软件来进行迪文 ...

  6. PAT乙级题库踩坑实录

    PAT乙级题库踩坑实录 [截止2021.7.28乙级题库已经全部AC] 题目名称: 1030 完美数列 (25 分) 测试点3踩坑 每次取m后,不用从m后第一个元素开始判断是否大于mp,直接从m后第m ...

  7. 分享:STM32与迪文屏交互,轻松实现一些简单的功能!

    最近,托朋友用STM32F103评估板和迪文屏做了交互(@田),没写多少代码,就实现了一些简单常用的功能,还是很简单的!今天跟大家分享一下: 一.评估板使用说明 1.功能 图1:整体效果图 图2:MC ...

  8. MMDetectionV2 + Colab 超详细教程及踩坑实录

    文章目录 前言 一.环境配置 二.准备自己的数据集 Aug.14更新 三:修改config文件 3.1 文件结构 3.2 (本地)修改config文件 3.2.1 (本地)构造自己模型的权重文件 3. ...

  9. Chromium内核浏览器编译记(一)踩坑实录

    转载请注明出处:https://blog.csdn.net/kong_gu_you_lan/article/details/123862868 本文出自 容华谢后的博客 往期回顾: Chromium内 ...

  10. JAVA发布栅格图层_基于 WebGL实现自定义栅格图层踩坑实录

    以下内容转载自totoro的文章<WebGL-Y轴翻转踩坑实录> 作者:totoro 链接:blog.totoroxiao.com/webgl-flipY- 来源:blog.totorox ...

最新文章

  1. vivox50pro鸿蒙系统,vivo X50 Pro最适合用来拍风景,看看网友的作品就知道了
  2. UIDatePicker | 时间选择器
  3. 编程之美2.12 快速寻找满足条件的两个数
  4. BZOJ.4160.[NEERC2009]Exclusive Access 2(状压DP Dilworth定理)
  5. bzoj1086[SCOI2005]王室联邦
  6. linux centos 编译luabind-0.9.1 动态库 静态库
  7. 【转】Jenkins怎么启动和停止服务
  8. jq 实现头像(气泡式浮动)
  9. Delegate如何进行类型转换?
  10. cortex系列处理器排行_vivoX60系列即将首发5nm Exynos 1080芯片
  11. 开启windows远程共享
  12. vue导出excel表格(详细教程)
  13. 汉字字符集编码查询 unicode编码查询
  14. springCloud 之 Eureka高可用配置
  15. 常用电阻E24,E96阻值速查
  16. 【模板】吉司机线段树(势能线段树)
  17. java提现功能开发_利用java实现提现金额到支付宝账户的功能
  18. 百度内容质量部测试开发面试题
  19. 青云诀2显示登录服务器超时,青云诀2游戏突然显示数据包损坏怎么办 解决方案分享...
  20. 深入浅出Apache DolphinScheduler

热门文章

  1. S-CMS医院建站系统XXE通用漏洞的利用与防御
  2. 弧度制和角度制的换算
  3. C++17新属性详解
  4. adprw指令教程_三菱FX5U模拟量,通信,运动控制详解
  5. Woolies因滥发垃圾邮件被罚款100万澳元
  6. 安装Python教程(Mac)保姆级教程
  7. android sit0 ip6tnl0,android netcfg iwlist 的使用
  8. Python读取Excel数据并进行函数拟合
  9. 彼得·林奇迄今最珍贵的一次演讲
  10. CCTV十集大型纪录片《华尔街》高速下载地址