请选择 进入手机版 | 继续访问电脑版

迪文科技论坛

 找回密码
 立即注册
搜索
查看: 2237|回复: 0

【开源】项目实战五:51单片机&迪文DGUS屏之DGUS工程模拟调试

[复制链接]

3

主题

2

回帖

52

积分

注册会员

Rank: 2

积分
52
发表于 2020-2-12 14:50:33 | 显示全部楼层 |阅读模式

大家好,我是微信公众号『芯知识学堂』的SingleYork,之前在『电子芯吧客』论坛有发表过51单片机与迪文DGUS屏通信的基本例程,在这里也给大家分享一下,欢迎喜欢我或者喜欢工控的小伙伴们持续关注哟……有问题可以直接站内私信或者向我提问,互相交流一下心得和经验……


接下来,我们就需要用串口助手来验证一下,我们新建的DGUS工程有没有问题了,首先,我们还是从最简单的入手吧,这里,最简单的自然莫过于“按键返回”控件了,那么我们尝试下从Y0一直按到Y5,看下串口助手会返回什么:




我们先来分析一下第一帧数据:5A A5 06 83 00 20 01 00 01,根据迪文DGUS指令说明中提到的,我们可以清楚地知道,在这一帧数据中:

  • 5A A5为数据帧的帧头;
  • 06为数据长度,即:从该为开始后面数据的个数;
  • 83为指令;
  • 00 20 为变量的地址;
  • 01 为从地址0x0020开始,返回的数据个数;
  • 00 01为变量的值

再回想上一讲我们建工程时定义的“按键返回”触控变量的地址以及键值,我们就很容易理解串口返回的这几串数据意义了,也就是说,当我们收到5A A5 06 83 00 20 01 00 01这串数据时,我们就知道是Y0按下了;当我们收到5A A5 06 83 00 20 01 00 02这串数据时,就知道是Y1按下……依次,我们就能识别到某一时刻,触摸屏上的那个按键被按下了。

接下来,我们继续来学习一下,如何往DGUS屏中的“数据变量显示”控件中写数据。这个地方就需要用到了DGUS屏的82指令—写数据存储区指令。我们直接看下《迪文DGUS指令说明》中的介绍吧:



相信看到这里,大家应该很明白了,比如,我要往地址为0x0010的“定时闪烁”数据变量显示控件中写一个数字“1”,那么我们只需要给对触摸屏发送指令:5A A5 05 82 00 10 00 01就可以了,同样,我们打开串口助手,将波特率什么的都设置好,然后再发送区输入指令:5A A5 05 82 00 10 00 01,注意,这里发送的所有数据都是十六进制数。



指令发送完成后,我们可以看下触摸屏上地址为0x0010这个变量值是不是就真的会显示为1呢?



纳尼?说的好“1”呢?怎么会变成65536?什么鬼?顿时心里一阵纳闷有木有?纳闷就对了,是不是大家都忘记了之前我们定义这个变量的数据类型的时候选择的是“无符号长整数(4字节)”了?那么就意味着,他在存储区中实际上是占了两个地址,即:0x0010和0x0011,不信的话,读者可以自己尝试一下,先往0x0010写个0,然后再往0x0011写个1,看下触摸屏上是不是就会显示1了呢?答案是肯定的!




那么,既然这个变量占四个字节,我们又该如何往里面写数据呢?还是一样的方法,因为迪文的DGUS指令是支持连续写数据的。也就是说,我们可以只用一条指令,往多个连续的地址中写数据,这个时候,之前指令中说的“变量地址”,实际上就变成了“变量首地址”了,另外,这时的“发送的数据长度”也要跟着变了。那么,接下来的指令就可以这样改写了:5A A5 07 82 00 10 00 00 00 01,也就是往0x0010和0x0011里分别写0x0000和0x0001两个数据:




这时,我们再来看触摸屏上的数据,是不是就对了呢?没错,那是必须滴!




至此,数据变量我们知道怎么操作了,那么,接下里,图标变量又要怎么显示呢?很简单,其实图标变量跟数据变量的控制方式是一样的,无非就是图标变量的值跟对应的图标扯上了关系,也就是说,一个变量值对应了一个图标,那么,我们就只需要改变这个变量的值,不同的图标就能显示出来了。




以X0的输入状态为例,他的地址是0x0000,变量下限为0,对应的图标是1(红色图标);变量上限为1 ,对应的图标是2(绿色图标)。这样是不是就很明显了:当我们需要显示红色图标的时候,只需要往地址0x0000写0x0000就可以了;当我们需要显示绿色图标的时候,就只需要往地址0x0000写0x0001就可以了,是不是很简单呢?这里也同样可以用一条指令控制多个地址连续的图标变量,为了对比性更明显一点,我们用一条指令来控制所有的输入输出状态的图标,在之前设定变量地址的时候就是考虑到了这一点,所有将所有的图标变量地址设置成了连续的了,即从0x0000-0x000D,一个14个地址。




接下来,我们就这样来控制,让X0-Y5分别按照这样的规律来显示:



  • X0状态显示红色;
  • X1状态显示绿色;
  • X2状态显示红色;
  • X3状态显示绿色;
  • X4状态显示红色;
  • X5状态显示绿色;
  • X6状态显示红色;
  • X7状态显示绿色;
  • Y0状态显示红色;
  • Y1状态显示绿色;
  • Y2状态显示红色;
  • Y3状态显示绿色;
  • Y4状态显示红色;
  • Y5状态显示绿色;


那么,我们可以将这一天指令来这样拆解:



  • 5A A5 -- 帧头
  • 1F    -- 发送数据长度
  • 82    -- 指令
  • 00 00 -- 首地址
  • 00 00 -- X0状态-红色
  • 00 01 -- X1状态-绿色
  • 00 00 -- X2状态-红色
  • 00 01 -- X3状态-绿色
  • 00 00 -- X4状态-红色
  • 00 01 -- X5状态-绿色
  • 00 00 -- X6状态-红色
  • 00 01 -- X7状态-绿色
  • 00 00 -- Y0状态-红色
  • 00 01 -- Y1状态-绿色
  • 00 00 -- Y2状态-红色
  • 00 01 -- Y3状态-绿色
  • 00 00 -- Y4状态-红色
  • 00 01 -- Y5状态-绿色

也就是说,只需要发送这样一条指令就OK了:5A A5 1F 82 00 00 00 00 00 01 00 00 0001 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01是不是很简单呢?




再来看下触摸屏,是不是按照我们设想的来显示呢?那还用说嘛?必须滴呀!




接下来,就是“数据变量录入”这个功能了,其实这个功能也是比较简单的,就是在键盘输入完成按下OK键后,会将设定好的数据显示在对应的变量控件里面,并且通过DGUS屏的串口发送出来。我们单击之前设置的“数据变量录入”触控变量的位置,这时会弹出一个键盘用来输入数据,我们在此输入一个数据“123”,并按下“OK”键:




当按下“OK”键之后,我们可以看到,串口助手接收到了这么一条数据:5A A5 08 83 00 10 02 00 00 00 7B




有了前面的基础,相信大家不难看懂这条指令了吧?很明显,就是DGUS屏通过串口将变量地址为0x0010里面的值发出来了,该值得长度为两个字,值为:0x0000007B,也就是十进制的:123。




至此,相信大家对迪文DGUS屏的基本操作应该不会再陌生了吧,相信,只要会用单片机串口的小伙伴们,不用我说,就应该知道怎么写接下来的单片机程序了。当然,为了照顾一下跟我曾经一样菜鸟的小伙伴,笔者在下一讲还是会简单介绍一下单片机部分的编程,这一讲就先介绍这里了。



温馨提示:


如果你在看本文有任何疑问,或者对工控、硬件设计、单片机比较感兴趣,欢迎站内私信或提问,本项目讲解完毕成后,将会在社区提供跟本项目相关的所有资料下载。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-3-29 00:42 , Processed in 0.108300 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表