|
【开源】基于迪文屏的手持控制盒方案
该方案主要是用了DMG80480C043_01WTC 电容屏幕,采用moubus通信协议。方案已量产。今天主要是给大家分享方案中的屏幕程序(modbus程序),通过T5L UART4来实现。 一、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 拖到调节。 然后我们打开屏幕的程序,看到这里: - void TenMsHandle(void)
- {
- if(!TenmsFlag)
- return;
- read_dgusii_vp(0x14,NowPage,1);
- TenmsFlag=0;
- MainVolLogo();
- AuxVolBar();
- SongBarLogo();
- TouchPressRecord();
- BTVolLogo();
- FMAMLogo();
- ClearEnterData();
- }
- void FMAMLogo(void)
- {
- staticu8 xdata ChanalBuf[2]={0,0xff};
- u8 xdata Readdtata[2];
- u16begEndXY[2][2]={{71,191},{285,199}};
- u16localPageXY[2]={550,139};
- u8cmp=0;
- u16BuffNow=0;
- if(NowPage[1]!=40)
- return;
- read_dgusii_vp(0x2601,Readdtata,1);
- cmp=Mymemcmp(ChanalBuf,Readdtata,2);
- if(cmp==0xff)
- return;
- if(Readdtata[cmp]!=ChanalBuf[cmp])
- {
- if(cmp==1)
- {
- BuffNow=Readdtata[cmp];
- BarLogoVol(&ChanalBuf[cmp],BuffNow,30,begEndXY,
- localPageXY,214,0x2640,0.01,0,0);
- }
- ChanalBuf[cmp]=Readdtata[cmp];
- }
- }
复制代码这个函数很重要,我这里都作了注释。 - //VolC_Buf 缓存音量比较数据地址 VolCNow:当前音量值
- //CutPage 需要剪切页面begEndXY:开始地址,和结束地址
- //localPageXY 剪切到当前页地址
- //LogoLen 剪切图片logo长度
- //dis_addr 基本图形显示地址
- //dataTotalLen 音量数据总长度,比如音量最大100'
- //is_X_V_c: 0 X变,1 变
- //LowUp: 0从下到上 1从上到下
- void BarLogoVol(u8 *VolC_Buf, u8 VolCNow,u8 CutPage,
- u16(*begEndXY)[2],u16 *localPageXY,
- u16LogoLen, u16 dis_addr, float OnedataTotal,
- u8 is_X_V_c,u8 LowUp)
- {
- u8 WriteBuff[10][2];
- u16Endaddr=0;
- // u8 buff[4];
- if(*VolC_Buf==VolCNow)
- return;
- *VolC_Buf=VolCNow;
- memset(WriteBuff,0,sizeof(WriteBuff));
- WriteBuff[0][1]=6;//固定
- WriteBuff[1][1]=1;//固定
- WriteBuff[2][1]=CutPage;//音量条所在页面
- if(!is_X_V_c)
- {
- WriteBuff[3][0]=begEndXY[0][0]>>8;//开始地址 X
- WriteBuff[3][1]=begEndXY[0][0]&0xff;//X
- WriteBuff[4][0]=begEndXY[0][1]>>8;//Y
- WriteBuff[4][1]=begEndXY[0][1]&0xff;//Y
- Endaddr=begEndXY[0][0]+*VolC_Buf*OnedataTotal*LogoLen;//结束地址
- WriteBuff[5][0]=Endaddr>>8;//X
- WriteBuff[5][1]=Endaddr&0xff;//X
- WriteBuff[6][0]=begEndXY[1][1]>>8;//Y
- WriteBuff[6][1]=begEndXY[1][1]&0xff;//Y
- WriteBuff[7][0]=localPageXY[0]>>8;
- WriteBuff[7][1]=localPageXY[0]&0xff;
- WriteBuff[8][0]=localPageXY[1]>>8;
- WriteBuff[8][1]=localPageXY[1]&0xff;
- WriteBuff[9][1]=0XFF;
- }
- else
- {
- floatkk = 1 - VolCNow*OnedataTotal;
- Endaddr=begEndXY[0][1]+kk*LogoLen;//结束地址
- WriteBuff[3][0]=begEndXY[0][0]>>8;//开始地址 X
- WriteBuff[3][1]=begEndXY[0][0]&0xff;//X
- WriteBuff[4][0]=Endaddr>>8;//Y
- WriteBuff[4][1]=Endaddr&0xff;//Y
- WriteBuff[5][0]=begEndXY[1][0]>>8;//X
- WriteBuff[5][1]=begEndXY[1][0]&0xff;//X
- WriteBuff[6][0]=begEndXY[1][1]>>8;//Y
- WriteBuff[6][1]=begEndXY[1][1]&0xff;//Y
- WriteBuff[7][0]=localPageXY[0]>>8;
- WriteBuff[7][1]=localPageXY[0]&0xff;
- if(!LowUp)
- Endaddr=localPageXY[1]+kk*LogoLen;//结束地址
- else
- Endaddr=localPageXY[1]+VolCNow*OnedataTotal;
- WriteBuff[8][0]=Endaddr>>8;
- WriteBuff[8][1]=Endaddr&0xff;
- WriteBuff[9][1]=0XFF;
- }
- write_dgusii_vp(dis_addr,WriteBuff[0],10);
- }
复制代码关于基本图形,我们看到T5L DGUSII 应用开发指南里面的
具体的内容,大家可以去这个文档上面再研究研究。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|