十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

迪文串口屏(T5L2 DGUS II)开发 -- 入门项目实战经验总结

迪文串口屏(T5L2  DGUS II)开发 -- 入门项目实战经验总结 【本文发布于https://blog.csdn.net/Stack_/article/details/129652261未经许可禁止转载转载须注明出处】迪文屏资料零散缺少说明对新手极不友好开发也不够灵活。有的文件需要去官网找有的需要去论坛找。百度搜索“迪文开发者论坛”。如果后续开发有疑问论坛中搜不到答案则可以发帖提问回复还是挺快的。或者找销售方加客服微信。以型号DMG13768C156_03WTC的串口屏为例主芯片为T5L2运行DGUS II系统。支持通过TTL / 232接口进行开发PCB上短接预留焊盘切换为TTL。本文章是利用UART通讯方式进行开发的屏为上位机单片机为下位机。一、资料下载1、进入论坛点击上方“资料下载 》开发文档 》T5L_DGUSII”下载所需的资料一定要下载的是《T5L DGUSII 应用开发指南》。先尽量详细看看这个文档心中有个大概了解再动手。本文章是对这个文档的归纳、补充说明。2、如果使用渐变色图片可能会导致压缩后的图片出现色彩断层需要论坛内搜索“渐变色显示出现条纹、水波纹、牛顿环”寻求解决方法。建议UI设计师在设计的时候就不要让颜色出现断层并且将整张图放到屏上显示如果出现水波纹或者色彩断层则继续优化这样后期切图之后可以避免这个极度繁琐的处理步骤3、“资料下载 》工具软件 》T5L相关”下载V7或者V8版本的DGUS TOOL。V8可以直接编辑生成CFG配置文件了免去了自己修改CFG文件的麻烦但是该版本只能用于T5L系列芯片的屏的开发。二、素材方面1、背景图和图标都需要用DGUS TOOL内嵌的压缩工具将背景图和图标压缩为icl图标文件下载到屏里才能显示。2、背景图和图标分别都需要有0号图片中间可以留出数字不编号以方便后续补充图片。注意图标动画的编号超过255将不能显示需要将编号提前或者再分配到另一个icl图标文件该图标文件的图片同样也从0号开始。3、压缩选项方面内核选T5L2图片质量 100% 4:4:4 理论上是压缩后比较清晰的但人眼不一定能分辨出来需要根据占用空间的情况去选择合适的压缩率一般采用默认配置即可。如果图片素材使用了渐变色出现色彩断层现象或者杂乱的纹路并且按照迪文论坛提供的方法无法解决那是因为图片本身存在较为明显的色彩断层这在电脑显示屏上仔细是能看出来一点的再经过迪文上位机的压缩就放大了断层。需要UI设计师再处理处理图片使其平滑过渡并且有必要的话将图片质量设置为 100% 4:4:4 而这个型号的屏自带闪存达32M下载文件的编号可达127。我现在这个项目所有图标都按最高质量去压缩48号开始放图标文件190号开始放图标文件2.4、显示数值方面不建议使用0号字库或者灰度字库0号字库锯齿严重而灰度字库虽好看了些但外观要求较高的项目依然不可接受且占用空间过大。可以改用艺术字变量控件去显示数值在PS里面修改数值然后将数字切出来以图片方式显示数值。5、不支持直接显示透明png图片所有图片都会转为jpg格式所以UI设计的时候要注意尽量避免会在运行中根据需求变色的、圆角的、边缘羽化的图标重叠否则会带来麻烦。6、如果背景图有渐变的切图标时因为图标圆角或者边缘有阴影难免会连同背景一起切下来这时候不光背景图需要作水波纹去除的处理图标也要处理。三、空间分配1、16M字节外部Flash分成空间0-63每个空间256KB32M字节外部Flash分成空间0-127每个空间256KB2、RAM大小为128K字节(0x0-0x1ffff)但用户访问时不是访问物理地址迪文划分规则为每2个字节为1个用户地址。所以地址为0x0-0xffff。其中 0x0000-0x0FFF 是系统变量接口地址空间用户不能自定义 0x1000-0xFFFF 变量存储空间用户可以任意使用。如果 8 通道曲线同时使用 0x1000-0x4FFF 将作为曲线缓冲区地址此时该部分变量地址不能被其他控件使用其他控件地址使用范围为 0x5000-0xFFFF3、【变量地址】存储了控件变量值如同Qt编程中的SetText()例如数据变量图标要显示的数值。例如屏幕上正在显示80向此地址写100则屏幕该控件位置变更显示为100.4、【描述指针】记录了控件的属性值如同Qt编程中的stylesheet样式表例如颜色、位置、指向的图片等信息修改对应的地址中的值则可以修改颜色、位置等。5、官方推荐从 23 号起始位置开始放字库或者图标库等文件例如 32 号起始位置开始放背景图片.ICL 文件 背景图片存放位置可以配置 CFG 文件自定义 用DGUS TOOL V8去修改。0-47可放置bin、hzk、dzk文件字库、配置文件 16-63 / 16-127可放置icl文件图片图标 注意不要重叠。0号【0-11】 ASCII字库 。 出厂预装可烧入或者不烧除非需要更改字体12号【固定位置】 输入法词库。 出厂预装可烧入或者不烧除非需要更改13号【固定位置不超过256KB】 触控配置文件。 DGUS生成无需关心14号【固定位置不超过256KB】 变量文件文件(字符数据、动画等的属性)。 DGUS生成无需关心16号 音频22号【固定位置】 初始化配置文件。 DGUS生成无需关心23号【23-31】 用户自定义字库如中文字库 。 DGUS内的工具生成【字库如果较大超出区间则后面的图片图标都需要往后移】32号【32-47】 背景图压缩文件。 DGUS内的工具【背景图片如果较大超出区间则后面的图标都需要往后移】48号-末尾 图标缩文件。 DGUS内的工具生成可以有多个图标文件注意所占用空间不要重叠四、CFG文件修改论坛搜对应屏型号或者找客服获取demo以及cfg文件。也可以直接生成。获取cfg文件后打开DGUS TOOL V8点选 工具 --》CFG生成 --》打开CFG 选择官方的提供的配置文件将更新显示如下图。按需修改配置后保存放到SD卡中刷写到屏内。五、新建工程以及控件1、点击新建工程选择型号以及设置好分辨率2、在左边栏images view加载背景图3、建立一个控件表记录控件的地址、大小、位置等信息。新手阶段如果理解不了文本显示控件这种显示很多文字的控件除外控件变量地址从0x5000开始分配递增0x10或者更大的值描述指针从0x8000开始分配递增0x30即可或者更大的值。不用去记每个控件占多少空间也能避免变量地址和描述地址重叠。这样分配虽然有空间浪费但是128K字节RAM空间对于一般项目也绰绰有余了。以后慢慢了解。4、点击需要的控件后按住鼠标左键在背景图上拖出一个矩形然后在右侧属性栏修改X(左上角X坐标)Y(左上角Y坐标)W(宽多少像素)H(高多少像素)一般是根据切图时该图标的位置和切出来的大小而定。按照控件表分配的地址修改属性中的描述指针值和变量地址值。5、图标变量可以选择“透明”或者“显示背景”的显示方式。迪文屏不支持PNG所以通过一些手段达到类似效果。透明模式会以即将渲染的图标左上第一点的颜色为样本图标内的相似颜色的像素不进行渲染这些像素位置将显示下一层的像素颜色即原本的颜色其它像素点叠加到下一层像素点上显示覆盖掉下一层的颜色理论上可以实现类似png的效果。但实际上对于图标颜色有渐变或者其它点和左上像素点颜色差别不是很大的处理结果很糟糕完全不可用。显示背景则是直接覆盖背景显示。所以我现在做项目切图标时是连同背景图片一起切出来的即如果图标不是矩形切出来的图片会有一部分是背景图片的图标直接覆盖背景图片去显示。所以要求在设计时如果该图标四边是直的而四角是弧形的要求四个角下一层不能存在变化的内容如跳动的数字。例如如果是在支持PNG的设备上显示是能够正常显示的而在迪文屏上以覆盖显示的方法显示图标的角位置会遮盖住下一层的数字6、一般项目开发为了上位机和下位机数值或者页面同步屏只管把按键按触状态发送到下位机下位机再发指令更改屏幕内容显示而不能点击后屏主动作出切换显示等反应。而且因为基础触控是不支持屏蔽的当运行中要屏蔽某个按键时无能为力。这时需要用到控件“同步数据返回”。如果CFG文件开启了触控变量自动上传则用户按触屏幕下位机会收到数据帧。而下位机可以按需忽略下发的“同步数据返回”以达到按键失能的效果第一次按压即单击将0x5000自己定义的空间读取到0x5380分配给该同步数据返回控件的变量地址并下发持续按压即长按将0x5010自己定义的空间读取到0x5380并下发。0x5000和0x5010的值需要不一样下位机才能识别。迪文工具没有提供给某个地址数值初始化的方法官方手册和教程说下载到屏前修改生成的触控bin文件修改地址0x5000和0x5010的值令两者的值不一致也就是每次烧录前都要修改bin文件工作量爆炸这是非常扯淡的。建议参考第3点的图片放置3个数据变量控件为它们设置不同的初始值并更改它们的XY坐标令其超出屏幕显示以达到隐藏的目的。这样就修改了0x5000和0x5010的地址的值而且无需每次烧录前都修改触控bin文件。7、上面有说到数据变量控件显示数值锯齿非常明显做项目完全不可接受而且项目UI设计通常会有各种大小和各种字体的数字字库无法覆盖所有大小的字体烧入对应字体的ASCII字库实际显示效果也会和PS里显示的出入较大。所以就要采用控件“艺术字变量”用图片显示数值。需要切出 ‘0’~‘9’ ‘-’ ‘.’ 共12张图片。属性中勾选“是否显示无效0”则显示位数设定为2位或以上时上传的值位数不足则自动在前面补0显示。例如设定2位上传值为9则显示效果为09。【较低版本的内核如V42SD卡烧录时左上角能看到版本是不支持无效0显示以及居中显示的哪怕在上位机编辑时选择了对应选项。必须将内核卡刷到V45等更高版本内核】如果运行过程中需要变换字体颜色则需要另切一组不同颜色的图片通过指令重新指定图片0在图标文件中的位置。控件基本都有这么一个表运行中可以通过修改这些值而做出不同的效果8、如果下位机要控制屏切页、亮度、播放音频CFG中选择了音乐模式具体指令查看手册的系统变量接口章节。9、官方demo中拖动调节控件和滑块刻度指示控件搭配使用但滑块刻度显示只有一个滑块在移动底图刻度条不会像进度条那样滑块两端颜色不一样。故可以搭配图标变量使用缺点是滑动不连续有卡顿感除非可供切换图片足够多。拖动调节控件滑块刻度指示图标变量拖动调节2023/8/7补充六、关于内核的烧写与电阻屏校准有些型号的屏如DMG80480Y070_02NR出厂默认是TA平台而我是基于DGUS II平台开发的需要刷写一次内核。如何判断是TA还是DGUS II 随便在SD卡放入一个bin文件进入烧写界面看顶部显示TA还是DGUS II .如果要更换平台需刷写OS核和UI核。到官网下载刷入T5L_OS_V22_NO RTC_20230618和T5L_UI_DGUS2_V41_50mSDGUS周期_20210713。如果是电阻屏刷入内核后需要重新校准才能正常触摸。但是上面刷入的UI核无法校准。于是在论坛内找到更新版本的UI核 T5L_UI_DGUS2_V45_AVDD_20220107 才实现了触屏校准。这次迪文又给我深刻诠释了什么叫资料零散刷入UI核和OS核后CFG文件修改如下然后保存放到SD卡里进入刷写界面后将出现十字光标。依次点击5个光标后断电拔出SD卡。2024补充七、从创建工程开始演示一遍DGUS TOOL V8已经停止更新以下使用V7目前最新版DGUS_V7.647演示屏幕为DMG80480Y070_02NR↓工程文件↓【以下演示内容的工程文件下载】1、新建工程单击新建选择800x480分辨率选择一个工程路径在该路径下自动生成如下文件2、背景图在DWIN_SET路径放入3张800x480分辨率的图片点击 “” 将图片添加进来。这样就有了3个页面。这里添加的图片仅作编辑用并不表示屏内显示的图像。编辑用的图和实际显示的可以不相同。实际显示的为烧录进屏内的ICL压缩文件。压缩底图点击 “欢迎使用”点击“DWIN ICL生成工具”随后操作如下3、0号字库0号字库包含了多种大小的ASCII字符。一般出厂或者刷写内核时已经包含了0号字库不需要刷写如果喜好别的字体需要自行生成。但是建议替换掉字体如替换成阿里巴巴普惠体避免版权问题后面如果需要显示汉字也需要注意。点击 “欢迎使用”点击“0号字库生成工具”选择字体点击Create生成。生成的文件位于DGUS TOOL软件目录下 将其剪切到工程下的DWIN_SET目录4、压缩图标将准备好的图标文件从0开始编号放置于任意一个文件夹如《48_ICON原始图片》该文件夹用于存放原始图标文件因生成icl图标文件后点击下图中选择图片该文件夹会生产中间文件预览图。所以该文件夹内会存在原始图片和转换后的图片导致后续增删图片很麻烦。26年补充最新版V7已经解决这个问题不会在当前文件夹内生成预览图了。而不点击则不会生成预览图这就需要直接在“对应的图标”输入图片ID但是这样将不能实时显示该位置的图片删除预览图下次用上位机打开该工程也不会显示图片。例如压缩之前的文件夹压缩后的文件夹点击生成预览图左为有预览图右为无预览图新建一个任意的文件夹如《48_ICON》每次需要压缩图标时将该文件夹清空从原始图片文件夹复制全部图片到此目录。点击 “欢迎使用”点击“DWIN ICL生成工具”随后操作和底图压缩的步骤一致图片选择48_ICON路径下的。5、新建地址分配表如图6、放置按键值为什么有这一步请回头看第五的第6小节。点击顶部文本显示 -- 数据变量在任意页面上按住左键拉出一个框框右侧属性设置区域X坐标大于横向分辨率800隐藏此控件其它数值按照地址分配表配置。隐藏状态下若要编辑可点击左下角的“控件视图”找到它。重复以上步骤放置其它键值。7、放置数据变量和放置按键值一致按需配置。8、切换页面图标变量与同步数据返回先如图放置显示控件后放置触摸控件根据开发手册的描述用户按下上述上一页或者下一页按键下位机判断要切换的页面调用如下函数发送切换页面指令。本项目有3个页面故传入参数为0、1、2/** * brief 切换页面 * note * param * retval * author PWH * date 2023/2 */voidupload_switch_page(e_page_now num){uint8_tsend[10]{0x5A,0xA5,0x07,0x82,0x00,0x84,0x5A,0x01,0x00};send[9]num;uart_send_bytes(UART2,send,sizeof(send));}9、艺术字计数显示时间显示【较低版本的内核如V42SD卡烧录时左上角能看到版本是不支持无效0显示以及居中显示的哪怕在上位机编辑时选择了对应选项。必须将内核卡刷到V45等更高版本内核】10、动画图标11、亮度调节图标变量与拖动调节/** * brief 修改背光亮度 * note * param * retval * author PWH * date 2023/2 */voidupload_change_brightness(uint8_tduty){uint8_tsend[8]{0x5A,0xA5,0x05,0x82,0x00,0x82};send[6]duty;//正常亮度 0-0x64send[7]duty;//待机亮度 0-0x64 如果cfg文件开启自动息屏才生效uart_send_bytes(UART2,send,sizeof(send));}12、CFG文件这个版本的V7已经像V8那样支持CFG可视化编辑即不需要去修改bin文件了。这功能应该早就应该做的让人去修改bin文件多无语啊。参考第六生成CFG文件13、编译与烧录点击顶部保存与生成将以下选中的文件拷贝到SD卡的DWIN_SET目录下该SD卡已按照手册中的方法格式化断电后插入屏的卡座上电进行烧录。下次烧录SD卡只保留有变动的烧录项14、编写单片机端代码完整的代码在上方提供的附件里/** * brief 解析串口屏下发的触摸数据 * note 传入的数据仅为数据部分即已剔除帧头字节、长度字节、校验字节该例程不开启校验 手册4.1章节 byte0 -- 0x83 [83触摸上传指令] byte1-2 -- 0xbyte1byte2 [同步数据返回控件的变量地址] byte3 -- 0x01 [表示后面有一个数据] byte4-5 -- 0xbyte4byte5 [同步数据返回控件的键值] * param * retval * author PWH * date 2021 */staticvoidReadFromLCD_1FrameParse(uint8_t*array,uint16_tlen){if(len!6)//3 82指令的应答 有应答帧的串口屏固件包会应答 5A A5 03 82 4F 4B return;uint8_tdatarray[1];array[1]array[2];array[2]dat;uint16_tvarAddr*((uint16_t*)(array1));//按键编号datarray[4];array[4]array[5];array[5]dat;uint16_tkeyVal*((uint16_t*)(array4));//键值switch(varAddr){case0x5170://上一页if(UART_LCD_icon.LastPageTOUCH_ENABLE){if(page_next){page_next--;}}break;case0x5180://下一页if(UART_LCD_icon.NextPageTOUCH_ENABLE){if(page_next1){page_next;}}break;case0x5190://计数运行/停止UART_LCD_icon.CountRun!UART_LCD_icon.CountRun;//开始/停止图标UART_LCD_icon.Sand_gifUART_LCD_icon.CountRun;//沙漏break;case0x51A0://亮度调节bl_nextkeyVal8;break;}}externuint32_ttick;//1ms递增/** * brief 循环扫描更改并发送图标等更新指令 * note * param * retval * author PWH * date 2021 */voidex_uart_lcd_loop(void){#defineCHANGE_ICON_MAX10uint8_tSwitch_Page_Array[10]{0x5A,0xA5,0x07,0x82,0x00,0x84,0x5A,0x01,0x00};uint8_tACK_LCD_Array[8]{0x5A,0xA5,0x05,0x82};uint16_ticonAddr[CHANGE_ICON_MAX];uint16_tval[CHANGE_ICON_MAX];uint8_ti;staticuint32_ttimer_icon0;memset(iconAddr,0,sizeof(iconAddr));memset(val,0,sizeof(val));ReadFromLCD_DataFIFO_Parse();Send_LCD_FIFO_Data_loop();if(page_now!page_next)//切换页面{page_nowpage_next;Switch_Page_Array[9]page_next;SendToLCD(Switch_Page_Array,10);}if(UART_LCD_icon.CountRun!UART_LCD_icon_static.CountRun)//计数运行/停止{UART_LCD_icon_static.CountRunUART_LCD_icon.CountRun;iconAddr[0]0x5060;val[0]UART_LCD_icon.CountRun;}elseif(UART_LCD_icon.Sand_gif!UART_LCD_icon_static.Sand_gif)//沙漏{UART_LCD_icon_static.Sand_gifUART_LCD_icon.Sand_gif;iconAddr[0]0x5090;val[0]UART_LCD_icon.Sand_gif;}elseif(bl_next!bl_now)//亮度{bl_nowbl_next;iconAddr[0]0x0082;//系统亮度接口val[0](((uint16_t)bl_next)8)bl_next;//高8位正常亮度 低8位待机亮度iconAddr[1]0x50A0;//亮度条switch(bl_next/10){case0:val[1]0;break;case1:val[1]1;break;case2:case3:val[1]2;break;case4:case5:val[1]3;break;case6:case7:val[1]4;break;case8:case9:val[1]5;break;case10:val[1]6;break;}}elseif(UART_LCD_icon.LastPage!UART_LCD_icon_static.LastPage)//上一页{UART_LCD_icon_static.LastPageUART_LCD_icon.LastPage;iconAddr[0]0x5040;val[0]UART_LCD_icon.LastPage;}elseif(UART_LCD_icon.NextPage!UART_LCD_icon_static.NextPage)//下一页{UART_LCD_icon_static.NextPageUART_LCD_icon.NextPage;iconAddr[0]0x5050;val[0]UART_LCD_icon.NextPage;}elseif(timer_icon!tick/1000){timer_icontick/1000;iconAddr[0]0x80903;//描述指针偏移3位秒数颜色更改val[0]0x801Ftimer_icon;//颜色代码iconAddr[1]0x5030;//秒数显示val[1]timer_icon;iconAddr[2]0x5070;//时分显示val[2]timer_icon/60*100timer_icon%60;if(UART_LCD_icon.CountRun){iconAddr[3]0x5080;//计数显示val[3]count_num;}}for(i0;iCHANGE_ICON_MAX;i){if(iconAddr[i]){ACK_LCD_Array[4]iconAddr[i]8;ACK_LCD_Array[5]iconAddr[i];ACK_LCD_Array[6]val[i]8;ACK_LCD_Array[7]val[i];SendToLCD(ACK_LCD_Array,8);}}}2024/3八、指令屏蔽启用个别触控按键同步数据返回有如下布局原本此处已有一个控件“同步数据返回”当用户点击设置按键此处上方将叠加显示亮度音量设置相关图标变量并且需要激活对应的触控按键“同步数据返回”。这些按键叠加的时候点按叠加位置可能响应的是底下的按键或者上层的按键。需要根据功能激活或者失能相应的“同步数据返回”。屏蔽或者启用某页面的某个“同步数据返回”的指令为5A, A5, 0B, 82, 00, B0, 5A, A5, 页面ID高字节, 页面ID低字节, 按键ID, 触控键码, 00, 01开启/00关闭注意发送启用/屏蔽按键的指令之后屏需要一定时间去处理单片机这边需要等待一会再发指令操作下一个按键否则导致的结果是只有一个操作生效。也可以发送一个按键操作指令之后先查询是否已完成操作完成操作后再操作下一个按键。九、UI设计注意事项总结 / UI设计必看1、由于屏普遍存在偏色 色差在开始设计细节前先确定主色调底图色导出图片烧录到屏上看一下效果确认颜色偏差是否可接受再决定是否更换主题色或者更换串口屏型号。2、尽可能不使用渐变多使用纯色若不得不使用则需要调整PSD素材至肉眼不可见色彩断层否则后期切图处理要处理数百张图片工作量巨大而且效果不好处理水波纹后普遍存在肉眼可见颗粒感甚至无法消除水波纹。3、所有文字尽可能以图片形式提供避免使用屏内自带字体显示带来的锯齿感档位/时间的数字切图时需要修改数值后切出0-9数张图片所以需要在提供PSD时附带提供字体安装文件。且数字下方的底图尽可能使用纯色否则将有多少个数字就需要且多少组0-9为的是和底图完美融合。如下图因为底图不是纯色虽然肉眼不明显但是屏上能看出来如果只是切5个数字中的一个存储0-9其它4个数字的位置也使用这组0-9进行显示则由于是直接覆盖底图进行显示的其它4个将无法和底图融合数字图标和底图存在明显的边界4、因为不支持透明图层切出来的每张图片都是正四方形所以素材内图标尽可能不使用外阴影若要使用则外阴影范围内不要有其它图形否则会干涉相邻图标导致切图存在麻烦、显示图标边界明显。 简单说就是迪文屏UI不要按照支持显示透明图层png的设备进行设计必须考虑图标的层叠关系。如下图的按键存在外阴影但是按键上方的肉色图标靠得过近互相干涉又或者下图中上方图标白圈外部还有外阴影的虽然在PSD中肉眼观察不明显但是上方的图标隐藏或显示时下方的数字颜色是不一样的这表示存在干涉导致迪文屏显示时上方图标和下方数字存在明显边界。5、同样因为不支持透明图层如果图标边角是弧形的但是切图只能是矩形而图标边角下一层存在会变化的内容数字/动画/可显示或隐藏则会导致切图麻烦如果隐藏下层图标再切图则该图标显示时边角显示的是底图画面但是下一层图标是非隐藏的则上层跟下一层无法重合如果显示下层图标时切图则该图标显示时边角显示的是下一层图标部分画面但是下一层图标会变化导致无法和该层边角画面重合。参看上文 五-5如下图上层图标时弧形边角在特定时候才显示而下层图标是动画内容会变化的导致上层图标切图麻烦6、参看上文迪文屏不是根据图标配置触控的而是在屏上框出一个矩形区域黄色这个就是有效触控区域不与任何一个控件图标绑定。所以图标尽可能不要重叠且不要紧贴否则导致触摸区域靠得过近导致误触若图标需要重叠则尽可能保持一样的大小和位置方便使用同一个触摸区域7、若一个按键需要触摸效果则需要提供三张按键图片可按但未按下、可按但按下、不可按不可按图片一般是档位、时间这些有调节极限的才需要待续
返回列表