51单片机与迪文DGUS屏通信合作,下载及模拟调试

嵌入式技术

1372人已加入

描述

迪文DGUS屏的所有硬件参数和资料下载,都是通过屏上的SD/SDHC接口来完成的,文件必须使用FAT32文件格式。第一次使用SD卡前,推荐先格式化一次,流程如下:

1、 右键单击SD卡,在弹出来的菜单中选择“格式化”:

单片机

2、 在弹出的“格式化SD卡”属性框中,我们需要将SD卡的文件系统设置成FAT32格式,分配单元大小设置成4096字节,这两点尤其重要,否则,可能识别不到SD卡。

单片机

SD卡成功格式化后,我们就可以将DGUS工程中的DWIN_SET文件夹复制到SD卡中了开始下载程序了,这里需要注意的是,SD卡中不要有其他的文件或文件夹,只能放一个DWIN_SET文件夹。

单片机

接下来,我们就可以把SD卡插到DGUS屏的SD卡接口上,DGUS屏检测到SD卡后,会显示蓝屏提示用户检测到SD卡,然后开始下载SD卡中的文件到屏中。

在下载SD卡文件的时候,需要注意的是:两次SD卡热插拔之间必须间隔至少6秒,不然DGUS屏会认为是同一张卡,而不会启动SD卡操作。如果用户已经禁止SD卡接口,要启用SD卡接口,除非事先解锁或在SD卡的CONFIG.TXT文件中有解锁指令。

SD卡下载完成,DGUS屏会自动复位一次,拔出SD卡,下载结束。

因为现在没有跟单片机程序通信上,所以,屏上也都只是显示一些变量的初始值,或许还有小伙伴们在下载工程文件后,发现显示位置不对,或者说有点偏位,那么该怎么快速调整呢?这个时候,DGUS软件的在线下载功能就可以为我们提供便利了,毕竟,只是修改一下变量的属性的话,在线下载功能还是很方便的,既能马上看到效果,又可以避免每次插拔SD卡的麻烦,下面接跟着笔者来体验以下该功能吧。

首先,我们需要准备一条USB转232的线,然后,将USB转232线的RXD、TXD、GND跟触摸屏的RXD、TXD、GND连接起来,这里需要注意的是,两者之间一定要共地,还有就是RXD、TXD两者需要交叉,连好之后,我们就可以开始在线调试了。

在我们每次重新修改了工程文件后,别忘记了重新生成一下配置文件,方法前面已经讲过了,在此就不赘述。接下来,我们就可以打开DGUS串口工具了,如下图所示:

单片机

首先,我们需要选择正确的COM口,如果不知道是哪个,可以去电脑的设备管理器里面查看一下,笔者这里用的是COM5,所以这里选择COM5:

单片机

然后就是波特率的选择了,因为之前我们在建DGUS工程的时候,配置的通信波特率就是115200,所以这里我们需要选择115200的波特率,同时,这里的R3跟RA的配置也是跟之前一样,分别设置成5A和A5就好了。接下来我们将选项卡切换到“Fonts AND BIN File Download”界面,此时,如果我们懒得去找13、14号配置文件的话,我只需要快速勾选这两个文件就好了,然后点击“Download”按钮,即可开始下载。当然,我们也可以用旁边的手动选择按键,手动加载这两个文件:

单片机

点击“Choose File”按键,再弹出来的对话框中直接点击“否”即可,因为我们这里没有用到字库文件,所以也就不需要下载

单片机

接下来,找到13、14号两个配置文件的路径,并同时选中这两个文件(也可以一个个选),然后点击“打开”即可将这两个文件加载进来:

单片机

配置文件成功加载后,这里尤其要注意一个问题,那就是这个“Position”下的数字要跟对应的文件名前面的数字一致,不知道是不是因为这个软件BUG的缘故,很多时候加载文件成功后,这里都显示的不是对应的文件前缀的数字,比如,经常出现的就是前面这个地方显示0和1,如果这样的话,是不能正确下载的,需要我们手动改一下,才能在成功下载后正常运行,在用这个工具下载其他文件的时候也是一样需要注意这个问题,另外,下载之前,记得给DGUS屏上电哦,而且确保通信线是通的,否则会下载失败。

单片机

当出现如下界面时,恭喜你下载成功!

单片机

DGUS串口下载工具不仅可以下载一些配置文件,还可以下载字库文件、图片文件等,只是这些文件有点大,下载的速度会相对比较慢,一般不建议用串口工具来下载,只是在需要稍微修改显示变量和触控变量的时候,才使用这个串口下载工具。也就是说,DGUS串口下载工具可以作为SD卡的一个辅助工具来使用,利用好这个DGUS串口下载工具,可以很方便的修改一些变量属性,而不需要每次都用SD卡去下载,省了不少事。

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

单片机

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

l  5A A5为数据帧的帧头;

l  06为数据长度,即:从该为开始后面数据的个数;

l  83为指令;

l  00 20 为变量的地址;

l  01 为从地址0x0020开始,返回的数据个数;

l  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屏的基本操作应该不会再陌生了吧,相信,只要会用单片机串口的小伙伴们,不用我说,就应该知道怎么写接下来的单片机程序了。当然,为了照顾一下跟我曾经一样菜鸟的小伙伴,笔者在下一讲还是会简单介绍一下单片机部分的编程,这一讲就先介绍这里了。如果小伙伴们喜欢这篇文章,认为他对你们有帮助,请不要吝啬你们的点赞和打赏哟……

温馨提示:

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
陆铣森 2023-02-03
0 回复 举报
讲的通透,赞 收起回复
Alige 2022-06-20
0 回复 举报
谢谢 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分