迪文科技论坛

 找回密码
 立即注册
搜索
查看: 190|回复: 2

【2023.8.2获奖项目】基于迪文屏的手持控制盒方案

[复制链接]

567

主题

167

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11978
发表于 2024-1-11 15:04:48 | 显示全部楼层 |阅读模式
【开源】基于迪文屏的手持控制盒方案

该方案主要是用了DMG80480C043_01WTC 电容屏幕,采用moubus通信协议。方案已量产。今天主要是给大家分享方案中的屏幕程序(modbus程序),通过T5L UART4来实现。

视频展示链接:https://v.youku.com/v_show/id_XNTk5NDcwMDc4OA==.html


一、UI人机界面展示








二、具体设计

(一)自由设置背景文件为背景

先打开 T5L _DGUS II 应用开发指南这个文档,翻到 3.3.2.5 CFG 硬件参数配置文件这里,然后大家看到这个变量

就是这里,大家把生成背景图片的

就是这个文件的编码填到这里就是上电开机,迪文的内核就会自动加载这个flash内部地址位置的文件,去做开机启动的背景图片。

打开我上传的工程,找到界面工程目录下面的,不常用的烧录下面的

这个文件,然后用UE的2进制方法,来打开文件,如下

大家看到08的这个位置有一个0x17的数字,实际的10进制的话,就是23,所以上电,就会加载这个23地址的背景图片。

(二)滑动条背景色设置

效果如下,进度条会显示进度的绿色。

要达到这个效果,目前我有两个方案

方案1:很费美工。

方案2.:费CPU。当有很多进度条在一个界面上就会慢,如果是几个进度条就没有什么问题。

2.1 方案1讲解

就是每个进度都用一个logo 进度条去表示。要美工做一个完美的100个进度图片。这个的话,只要用滑动刻度就可以完成工作。所以说,很费美工。

设置的内容如下:用一个slider display显示控件,再加一个触控的拖动调节就可以实现这样的一个效果。

2.2 方案2 讲解:用代码上去实现

先放一个底色图,比如我这个项目的,30这个图片,如下

在适当的位置,放上已经满了的进度条的背景图片。

我们把他用到第40张图片上,就是这里。

这个我们用到了3个控件: Sliderdisplay 滑动块显示、BasicGraphic 基本图形显示、DragAdjustment 拖到调节。

然后我们打开屏幕的程序,看到这里:

  1. void TenMsHandle(void)
  2. {
  3.        if(!TenmsFlag)
  4.               return;
  5.        read_dgusii_vp(0x14,NowPage,1);
  6.        TenmsFlag=0;
  7.        MainVolLogo();
  8.        AuxVolBar();
  9.        SongBarLogo();
  10.        TouchPressRecord();
  11.        BTVolLogo();
  12.        FMAMLogo();

  13.        ClearEnterData();
  14. }

  15. void FMAMLogo(void)
  16. {
  17.        staticu8 xdata ChanalBuf[2]={0,0xff};
  18.        u8  xdata Readdtata[2];
  19.        u16begEndXY[2][2]={{71,191},{285,199}};   
  20.        u16localPageXY[2]={550,139};
  21.        u8cmp=0;
  22.        u16BuffNow=0;

  23.        if(NowPage[1]!=40)
  24.               return;

  25.        read_dgusii_vp(0x2601,Readdtata,1);
  26.        cmp=Mymemcmp(ChanalBuf,Readdtata,2);
  27.        if(cmp==0xff)
  28.               return;

  29.        if(Readdtata[cmp]!=ChanalBuf[cmp])
  30.        {
  31.               if(cmp==1)
  32.               {
  33.                      BuffNow=Readdtata[cmp];
  34.                      BarLogoVol(&ChanalBuf[cmp],BuffNow,30,begEndXY,
  35.                                                         localPageXY,214,0x2640,0.01,0,0);
  36.               }
  37.               ChanalBuf[cmp]=Readdtata[cmp];
  38.        }
  39. }
复制代码

这个函数很重要,我这里都作了注释。

  1. //VolC_Buf 缓存音量比较数据地址  VolCNow:当前音量值
  2. //CutPage 需要剪切页面begEndXY:开始地址,和结束地址
  3. //localPageXY 剪切到当前页地址
  4. //LogoLen 剪切图片logo长度
  5. //dis_addr 基本图形显示地址
  6. //dataTotalLen 音量数据总长度,比如音量最大100'
  7. //is_X_V_c: 0 X变,1 变
  8. //LowUp: 0从下到上 1从上到下
  9. void BarLogoVol(u8 *VolC_Buf, u8 VolCNow,u8 CutPage,
  10.        u16(*begEndXY)[2],u16 *localPageXY,
  11.        u16LogoLen, u16 dis_addr, float OnedataTotal,
  12.        u8  is_X_V_c,u8 LowUp)
  13. {
  14.        u8  WriteBuff[10][2];
  15.        u16Endaddr=0;
  16. //     u8  buff[4];

  17.        if(*VolC_Buf==VolCNow)
  18.               return;
  19.        *VolC_Buf=VolCNow;
  20.        memset(WriteBuff,0,sizeof(WriteBuff));
  21.        WriteBuff[0][1]=6;//固定
  22.        WriteBuff[1][1]=1;//固定
  23.        WriteBuff[2][1]=CutPage;//音量条所在页面

  24.        if(!is_X_V_c)
  25.        {
  26.               WriteBuff[3][0]=begEndXY[0][0]>>8;//开始地址 X
  27.               WriteBuff[3][1]=begEndXY[0][0]&0xff;//X
  28.               WriteBuff[4][0]=begEndXY[0][1]>>8;//Y
  29.               WriteBuff[4][1]=begEndXY[0][1]&0xff;//Y

  30.               Endaddr=begEndXY[0][0]+*VolC_Buf*OnedataTotal*LogoLen;//结束地址         
  31.               WriteBuff[5][0]=Endaddr>>8;//X
  32.               WriteBuff[5][1]=Endaddr&0xff;//X
  33.               WriteBuff[6][0]=begEndXY[1][1]>>8;//Y
  34.               WriteBuff[6][1]=begEndXY[1][1]&0xff;//Y

  35.               WriteBuff[7][0]=localPageXY[0]>>8;
  36.               WriteBuff[7][1]=localPageXY[0]&0xff;
  37.               WriteBuff[8][0]=localPageXY[1]>>8;
  38.               WriteBuff[8][1]=localPageXY[1]&0xff;
  39.               WriteBuff[9][1]=0XFF;
  40.        }
  41.        else
  42.        {
  43.               floatkk = 1 - VolCNow*OnedataTotal;
  44.               Endaddr=begEndXY[0][1]+kk*LogoLen;//结束地址        

  45.               WriteBuff[3][0]=begEndXY[0][0]>>8;//开始地址 X
  46.               WriteBuff[3][1]=begEndXY[0][0]&0xff;//X
  47.               WriteBuff[4][0]=Endaddr>>8;//Y
  48.               WriteBuff[4][1]=Endaddr&0xff;//Y

  49.               WriteBuff[5][0]=begEndXY[1][0]>>8;//X
  50.               WriteBuff[5][1]=begEndXY[1][0]&0xff;//X
  51.               WriteBuff[6][0]=begEndXY[1][1]>>8;//Y
  52.               WriteBuff[6][1]=begEndXY[1][1]&0xff;//Y         

  53.               WriteBuff[7][0]=localPageXY[0]>>8;
  54.               WriteBuff[7][1]=localPageXY[0]&0xff;

  55.               if(!LowUp)
  56.                      Endaddr=localPageXY[1]+kk*LogoLen;//结束地址         
  57.               else
  58.                      Endaddr=localPageXY[1]+VolCNow*OnedataTotal;
  59.               WriteBuff[8][0]=Endaddr>>8;
  60.               WriteBuff[8][1]=Endaddr&0xff;
  61.               WriteBuff[9][1]=0XFF;
  62.        }
  63. write_dgusii_vp(dis_addr,WriteBuff[0],10);
  64. }
复制代码

关于基本图形,我们看到T5L DGUSII 应用开发指南里面的



具体的内容,大家可以去这个文档上面再研究研究。


(三)设置立即熄屏

这个比较简单,主要是修改系统变量0x82的背光设置,即修改亮度为0可以达到熄屏的效果,看这里:

以上内容,可以在T5L DGUSII 应用开发指南上找到。



备注说明:如需源码,请参考此链接:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=8647&_dsign=7b4e76af



本帖子中包含更多资源

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

x
回复

使用道具 举报

0

主题

9

回帖

61

积分

注册会员

Rank: 2

积分
61
发表于 2024-5-15 08:30:40 | 显示全部楼层
需要源码3181338441@qq.com
回复

使用道具 举报

0

主题

452

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11071
发表于 2024-5-15 08:37:35 | 显示全部楼层

可以参考如下链接:
【开源】手持控制盒-进度条背景色 基本图形 自由设置背...
http://inforum.dwin.com.cn:20080 ... =8647&fromuid=14580
(出处: 迪文科技论坛)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 08:59 , Processed in 0.124040 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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