迪文屏幕T5L屏幕设计及代码编辑(两个技术难点突破)

前言

这次做了一个项目,是使用迪文屏幕的一款,主要的芯片就是T5L,这次项目做起来感觉不难,就是有一些技术的难点,现在整理出来,给大家分享也供自己以后参考。大家在写代码时创建工程最好找迪文的负责人要一个空白工程,然后在里面自己编写,不容易出错,我之前自己建的工程,后面出的错莫名其妙的,最终被迫使用他们的工程。顺便挂个迪文论坛的网址吧,大家有问题在里面也可以发出来:http://inforum.dwin.com.cn:20080/forum.php

一、曲线的显示

曲线的表示

曲线表示就使用曲线显示控件,里面的参数设置都是根据自己需要的来,有一些参数需要自己计算,这个在迪文的屏幕手册里面都有,有不清楚的小伙伴可以在论坛里问问,设置完以后就是用代码去画曲线,比如设定的0通道,那地址0x1000就是第一个点的纵坐标,地址这块手册中也是有的,这块就大概展示一下:
在这里插入图片描述

下面给大家看一下我的,我使用的是2通道,由于项目的需要,我是倒着写点的,这里解释一下,在曲线控件里面有一个选项是让选择曲线移动的方向,可以选从左到右,也可选从右到左,我选的是从左到右,这个点最多是可以有2048个点,意思就是你的X轴最大是2048,Y轴最大是自己在曲线控件里面设置的,而我使用的X轴最大值是70,所以就可以使用代码对相应的地址写入70,这样X轴就是70:
Write_Dgus(0x0304,0x46);
Write_Dgus(0x0305,0x46);//2通道显示
而我倒着写点,那就是倒着赋值,所以代码写的就是这样:

for(j = 0;j < 10; j++)
	{
		Write_Dgus(0x2045 - j,val[0]);//2通道屏幕前10个点,棉结
	}
	for(i = 0;i < 60; i++)
	{
		Write_Dgus(0x203B - i,Y10[i]);//2通道写点
	}

这块从0x2045开始就是因为我倒着写的,倒着写最后曲线显示的正是我想要的效果:
在这里插入图片描述
上面的图是大概的草图,上面的线是2通道,下面的线是3通道,这个曲线是随着我右侧设置的值去改变的,是画的双曲线,有兴趣的小伙伴可以找我讨论讨论。

二、曲线与矩形的联动

这部分最主要的就是矩形的画法

这块使用的通道是0和1通道,由于项目的需要,这两个曲线需要显示的是点,这个在控件里面可以进行设置,所以我这块不是曲线大家就将就看,毕竟只是连没连起来的区别。
在这里插入图片描述
接下来在就是说明一下,这两个是怎么连通的,大家可以观察到,上面的点就是一个峰值,右下的矩形是需要上方的滑动控件控制的,当向后滑动时,右下角的矩形时跟着变化的,这就是需要使用key去控制,然后读出来值,再去显示,代码如下:

		key = Read_Dgus(0x8500);//拖动条数值
		read_dgus_vp(0x7000 + key * 0x28,&add_y1,4);//读取矩形 1 增量的值
		read_dgus_vp(0x7004 + key * 0x28,&add_y2,4);//读取矩形 2 增量的值
		read_dgus_vp(0x7008 + key * 0x28,&add_y3,4);//读取矩形 3 增量的值
		read_dgus_vp(0x700C + key * 0x28,&add_y4,4);//读取矩形 4 增量的值
		read_dgus_vp(0x7010 + key * 0x28,&add_y5,4);//读取矩形 5 增量的值
		read_dgus_vp(0x7014 + key * 0x28,&add_y6,4);//读取矩形 6 增量的值
		read_dgus_vp(0x7018 + key * 0x28,&add_y7,4);//读取矩形 7 增量的值
		read_dgus_vp(0x701C + key * 0x28,&add_y8,4);//读取矩形 8 增量的值
		read_dgus_vp(0x7020 + key * 0x28,&add_y9,4);//读取矩形 9 增量的值
		read_dgus_vp(0x7024 + key * 0x28,&add_y10,4);//读取矩形 10 增量的值
		
		read_dgus_vp(0x74B0 + key * 0x28,&add_y13,4);//读取矩形 13 增量的值
		read_dgus_vp(0x74B4 + key * 0x28,&add_y14,4);//读取矩形 14 增量的值
		read_dgus_vp(0x74B8 + key * 0x28,&add_y15,4);//读取矩形 15 增量的值
		read_dgus_vp(0x74BC + key * 0x28,&add_y16,4);//读取矩形 16 增量的值
		read_dgus_vp(0x74C0 + key * 0x28,&add_y17,4);//读取矩形 17 增量的值
		read_dgus_vp(0x74C4 + key * 0x28,&add_y18,4);//读取矩形 18 增量的值
		read_dgus_vp(0x74C8 + key * 0x28,&add_y19,4);//读取矩形 19 增量的值
		read_dgus_vp(0x74CC + key * 0x28,&add_y20,4);//读取矩形 20 增量的值
		read_dgus_vp(0x74D0 + key * 0x28,&add_y21,4);//读取矩形 21 增量的值
		read_dgus_vp(0x74D4 + key * 0x28,&add_y22,4);//读取矩形 22 增量的值
		if(key < val-1)
		{
		read_dgus_vp(0x7028 + key * 0x28,&add_y11,4);//读取矩形 11 增量的值
		read_dgus_vp(0x702C + key * 0x28,&add_y12,4);//读取矩形 12 增量的值
		
		read_dgus_vp(0x74D8 + key * 0x28,&add_y23,4);//读取矩形 23 增量的值
		read_dgus_vp(0x74DC + key * 0x28,&add_y24,4);//读取矩形 24 增量的值
		}

读取到矩形的值以后接下来就是画矩形,可以看到,我画的时候是直接画了96个矩形,这个也是项目需要,现在就具体说一下,怎么画矩形:
①首先就是需要先设置基本图形变量,也就是你要在屏幕上框选出来位置,然后设置变量地址:
在这里插入图片描述
②在代码里面首先定义一个矩形元素,比如我这里画24个大矩形,我分成4部分画的,一个就是画6个大矩形,也就是24个小矩形,所以矩形元素定义的就比较多:

//矩形元素定义
typedef struct{
	u16 vp;
	u16 cmd;
	u16 num;
	u16 x10,y10;u16 x11,y11;u16 color11;u16 x12,y12;u16 x13,y13;u16 color12;u16 x14,y14;u16 x15,y15;u16 color13;u16 x16,y16;u16 x17,y17;u16 color14; //矩形1数据
	u16 x20,y20;u16 x21,y21;u16 color21;u16 x22,y22;u16 x23,y23;u16 color22;u16 x24,y24;u16 x25,y25;u16 color23;u16 x26,y26;u16 x27,y27;u16 color24; //矩形2数据
	u16 x30,y30;u16 x31,y31;u16 color31;u16 x32,y32;u16 x33,y33;u16 color32;u16 x34,y34;u16 x35,y35;u16 color33;u16 x36,y36;u16 x37,y37;u16 color34; //矩形3数据
	u16 x40,y40;u16 x41,y41;u16 color41;u16 x42,y42;u16 x43,y43;u16 color42;u16 x44,y44;u16 x45,y45;u16 color43;u16 x46,y46;u16 x47,y47;u16 color44; //矩形4数据
	u16 x50,y50;u16 x51,y51;u16 color51;u16 x52,y52;u16 x53,y53;u16 color52;u16 x54,y54;u16 x55,y55;u16 color53;u16 x56,y56;u16 x57,y57;u16 color54; //矩形5数据
	u16 x60,y60;u16 x61,y61;u16 color61;u16 x62,y62;u16 x63,y63;u16 color62;u16 x64,y64;u16 x65,y65;u16 color63;u16 x66,y66;u16 x67,y67;u16 color64; //矩形6数据
	u16 end_flag;
}Rectangle;
xdata Rectangle Rect_data1;//第一排前6个矩形数据
xdata Rectangle Rect_data2;//第一排后6个矩形数据
xdata Rectangle Rect_data3;//第二排前6个矩形数据
xdata Rectangle Rect_data4;//第二排后6个矩形数据

③定义完成后,就可以去代码里面画了,基本就是去赋值,需要注意的是坐标的问题,这个坐标是相对于屏幕来说的,当你画的框没有包含到你赋的坐标时,是画不出来的,所以你赋的坐标是必须要在框内,现在给大家展示一下第一排的前6个大矩形,这排矩形是从下往上画的,所以坐标是减的关系:

/*************************第一排前6个矩形***********************************/
	
	Rect_data1.vp = 0xF000;			//基本图形变量地址
	Rect_data1.cmd = 0x0004;			//填充矩形
	
	//矩形1
	Rect_data1.x10 = 550;Rect_data1.y10 = Rect_data1.y12 - add_y1[7];//左1,最小380
	Rect_data1.x11 = 570;Rect_data1.y11 = Rect_data1.y12;//右1
	Rect_data1.color11 = 0xF81F;   //紫色 
	Rect_data1.x12 = 550;Rect_data1.y12 = Rect_data1.y14 - add_y1[5];//左2
	Rect_data1.x13 = 570;Rect_data1.y13 = Rect_data1.y14;//右2
	Rect_data1.color12 = 0x0000;  //黑色  
	Rect_data1.x14 = 550;Rect_data1.y14 = Rect_data1.y16 - add_y1[3];//左3
	Rect_data1.x15 = 570;Rect_data1.y15 = Rect_data1.y16;//右3
	Rect_data1.color13 = 0xF800;  //红色  
	Rect_data1.x16 = 550;Rect_data1.y16 = Rect_data1.y17 - add_y1[1];//左4
	Rect_data1.x17 = 570;Rect_data1.y17 = 393;//右4
	Rect_data1.color14 = 0x07E0;  //绿色
	
	
	//矩形2
	Rect_data1.x20 = 590;Rect_data1.y20 = Rect_data1.y22 - add_y2[7];//左1,最小320
	Rect_data1.x21 = 610;Rect_data1.y21 = Rect_data1.y22;//右1
	Rect_data1.color21 = 0xF81F;   //紫色 
	Rect_data1.x22 = 590;Rect_data1.y22 = Rect_data1.y24 - add_y2[5];//左2
	Rect_data1.x23 = 610;Rect_data1.y23 = Rect_data1.y24;//右2
	Rect_data1.color22 = 0x0000;  //黑色  
	Rect_data1.x24 = 590;Rect_data1.y24 = Rect_data1.y26 - add_y2[3];//左3
	Rect_data1.x25 = 610;Rect_data1.y25 = Rect_data1.y26;//右3
	Rect_data1.color23 = 0xF800;  //红色  
	Rect_data1.x26 = 590;Rect_data1.y26 = Rect_data1.y27 - add_y2[1];//左4
	Rect_data1.x27 = 610;Rect_data1.y27 = 393;//右4
	Rect_data1.color24 = 0x07E0;  //绿色
	
	//矩形3
	Rect_data1.x30 = 630;Rect_data1.y30 = Rect_data1.y32 - add_y3[7];//左1,最小320
	Rect_data1.x31 = 650;Rect_data1.y31 = Rect_data1.y32;//右1
	Rect_data1.color31 = 0xF81F;   //紫色 
	Rect_data1.x32 = 630;Rect_data1.y32 = Rect_data1.y34 - add_y3[5];//左2
	Rect_data1.x33 = 650;Rect_data1.y33 = Rect_data1.y34;//右2
	Rect_data1.color32 = 0x0000;  //黑色  
	Rect_data1.x34 = 630;Rect_data1.y34 = Rect_data1.y36 - add_y3[3];//左3
	Rect_data1.x35 = 650;Rect_data1.y35 = Rect_data1.y36;//右3
	Rect_data1.color33 = 0xF800;  //红色  
	Rect_data1.x36 = 630;Rect_data1.y36 = Rect_data1.y37 - add_y3[1];//左4
	Rect_data1.x37 = 650;Rect_data1.y37 = 393;//右4
	Rect_data1.color34 = 0x07E0;  //绿色
	
	//矩形4
	Rect_data1.x40 = 670;Rect_data1.y40 = Rect_data1.y42 - add_y4[7];//左1,最小320
	Rect_data1.x41 = 690;Rect_data1.y41 = Rect_data1.y42;//右1
	Rect_data1.color41 = 0xF81F;   //紫色 
	Rect_data1.x42 = 670;Rect_data1.y42 = Rect_data1.y44 - add_y4[5];//左2
	Rect_data1.x43 = 690;Rect_data1.y43 = Rect_data1.y44;//右2
	Rect_data1.color42 = 0x0000;  //黑色  
	Rect_data1.x44 = 670;Rect_data1.y44 = Rect_data1.y46 - add_y4[3];//左3
	Rect_data1.x45 = 690;Rect_data1.y45 = Rect_data1.y46;//右3
	Rect_data1.color43 = 0xF800;  //红色  
	Rect_data1.x46 = 670;Rect_data1.y46 = Rect_data1.y47 - add_y4[1];//左4
	Rect_data1.x47 = 690;Rect_data1.y47 = 393;//右4
	Rect_data1.color44 = 0x07E0;  //绿色
	
	//矩形5
	Rect_data1.x50 = 710;Rect_data1.y50 = Rect_data1.y52 - add_y5[7];//左1,最小320
	Rect_data1.x51 = 730;Rect_data1.y51 = Rect_data1.y52;//右1
	Rect_data1.color51 = 0xF81F;   //紫色 
	Rect_data1.x52 = 710;Rect_data1.y52 = Rect_data1.y54 - add_y5[5];//左2
	Rect_data1.x53 = 730;Rect_data1.y53 = Rect_data1.y54;//右2
	Rect_data1.color52 = 0x0000;  //黑色  
	Rect_data1.x54 = 710;Rect_data1.y54 = Rect_data1.y56 - add_y5[3];//左3
	Rect_data1.x55 = 730;Rect_data1.y55 = Rect_data1.y56;//右3
	Rect_data1.color53 = 0xF800;  //红色  
	Rect_data1.x56 = 710;Rect_data1.y56 = Rect_data1.y57 - add_y5[1];//左4
	Rect_data1.x57 = 730;Rect_data1.y57 = 393;//右4
	Rect_data1.color54 = 0x07E0;  //绿色
	
	//矩形6
	Rect_data1.x60 = 750;Rect_data1.y60 = Rect_data1.y62 - add_y6[7];//左1,最小320
	Rect_data1.x61 = 770;Rect_data1.y61 = Rect_data1.y62;//右1
	Rect_data1.color61 = 0xF81F;   //紫色 
	Rect_data1.x62 = 750;Rect_data1.y62 = Rect_data1.y64 - add_y6[5];//左2
	Rect_data1.x63 = 770;Rect_data1.y63 = Rect_data1.y64;//右2
	Rect_data1.color62 = 0x0000;  //黑色  
	Rect_data1.x64 = 750;Rect_data1.y64 = Rect_data1.y66 - add_y6[3];//左3
	Rect_data1.x65 = 770;Rect_data1.y65 = Rect_data1.y66;//右3
	Rect_data1.color63 = 0xF800;  //红色  
	Rect_data1.x66 = 750;Rect_data1.y66 = Rect_data1.y67 - add_y6[1];//左4
	Rect_data1.x67 = 770;Rect_data1.y67 = 393;//右4
	Rect_data1.color64 = 0x07E0;  //绿色

再给大家看一下后一排前6个,这排是从上往下画的,所以坐标是加的关系,

/*************************第二排前6个矩形***********************************/
	
	Rect_data3.vp = 0xF200;			//基本图形变量地址
	Rect_data3.cmd = 0x0004;			//填充矩形
	
	
	//矩形13
	Rect_data3.x10 = 550;Rect_data3.y10 = 433;//左1
	Rect_data3.x11 = 570;Rect_data3.y11 = Rect_data3.y10 + add_y13[1];//右1
	Rect_data3.color11 = 0x07E0;  //绿色 
	Rect_data3.x12 = 550;Rect_data3.y12 = Rect_data3.y11;//左2
	Rect_data3.x13 = 570;Rect_data3.y13 = Rect_data3.y11 + add_y13[3];//右2
	Rect_data3.color12 = 0xF800;  //红色  
	Rect_data3.x14 = 550;Rect_data3.y14 = Rect_data3.y13;//左3
	Rect_data3.x15 = 570;Rect_data3.y15 = Rect_data3.y13 + add_y13[5];//右3
	Rect_data3.color13 = 0x0000;  //黑色  
	Rect_data3.x16 = 550;Rect_data3.y16 = Rect_data3.y15;//左4
	Rect_data3.x17 = 570;Rect_data3.y17 = Rect_data3.y15 + add_y13[7];//右4,最大530
	Rect_data3.color14 = 0xF81F;   //紫色
	
	
	//矩形14
	Rect_data3.x20 = 590;Rect_data3.y20 = 433;//左1
	Rect_data3.x21 = 610;Rect_data3.y21 = Rect_data3.y20+add_y14[1];//右1
	Rect_data3.color21 = 0x07E0; //绿色
	Rect_data3.x22 = 590;Rect_data3.y22 = Rect_data3.y21;//左2
	Rect_data3.x23 = 610;Rect_data3.y23 = Rect_data3.y21+add_y14[3];//右2
	Rect_data3.color22 = 0xF800; //红色 
	Rect_data3.x24 = 590;Rect_data3.y24 = Rect_data3.y23;//左3
	Rect_data3.x25 = 610;Rect_data3.y25 = Rect_data3.y23+add_y14[5];//右3
	Rect_data3.color23 = 0x0000; //黑色
	Rect_data3.x26 = 590;Rect_data3.y26 = Rect_data3.y25;//左4
	Rect_data3.x27 = 610;Rect_data3.y27 = Rect_data3.y25+add_y14[7];//右4,最大530
	Rect_data3.color24 = 0xF81F;  //紫色
	
	//矩形15
	Rect_data3.x30 = 630;Rect_data3.y30 = 433;//左1
	Rect_data3.x31 = 650;Rect_data3.y31 = Rect_data3.y30+add_y15[1];//右1
	Rect_data3.color31 = 0x07E0; //绿色
	Rect_data3.x32 = 630;Rect_data3.y32 = Rect_data3.y31;//左2
	Rect_data3.x33 = 650;Rect_data3.y33 = Rect_data3.y31+add_y15[3];//右2
	Rect_data3.color32 = 0xF800; //红色 
	Rect_data3.x34 = 630;Rect_data3.y34 = Rect_data3.y33;//左3
	Rect_data3.x35 = 650;Rect_data3.y35 = Rect_data3.y33+add_y15[5];//右3
	Rect_data3.color33 = 0x0000; //黑色
	Rect_data3.x36 = 630;Rect_data3.y36 = Rect_data3.y35;//左4
	Rect_data3.x37 = 650;Rect_data3.y37 = Rect_data3.y35+add_y15[7];//右4,最大530
	Rect_data3.color34 = 0xF81F;  //紫色
	
	//矩形16
	Rect_data3.x40 = 670;Rect_data3.y40 = 433;//左1
	Rect_data3.x41 = 690;Rect_data3.y41 = Rect_data3.y40+add_y16[1];//右1
	Rect_data3.color41 = 0x07E0; //绿色
	Rect_data3.x42 = 670;Rect_data3.y42 = Rect_data3.y41;//左2
	Rect_data3.x43 = 690;Rect_data3.y43 = Rect_data3.y41+add_y16[3];//右2
	Rect_data3.color42 = 0xF800; //红色 
	Rect_data3.x44 = 670;Rect_data3.y44 = Rect_data3.y43;//左3
	Rect_data3.x45 = 690;Rect_data3.y45 = Rect_data3.y43+add_y16[5];//右3
	Rect_data3.color43 = 0x0000; //黑色
	Rect_data3.x46 = 670;Rect_data3.y46 = Rect_data3.y45;//左4
	Rect_data3.x47 = 690;Rect_data3.y47 = Rect_data3.y45+add_y16[7];//右4,最大530
	Rect_data3.color44 = 0xF81F;  //紫色
	
	//矩形17
	Rect_data3.x50 = 710;Rect_data3.y50 = 433;//左1
	Rect_data3.x51 = 730;Rect_data3.y51 = Rect_data3.y50+add_y17[1];//右1
	Rect_data3.color51 = 0x07E0; //绿色
	Rect_data3.x52 = 710;Rect_data3.y52 = Rect_data3.y51;//左2
	Rect_data3.x53 = 730;Rect_data3.y53 = Rect_data3.y51+add_y17[3];//右2
	Rect_data3.color52 = 0xF800; //红色 
	Rect_data3.x54 = 710;Rect_data3.y54 = Rect_data3.y53;//左3
	Rect_data3.x55 = 730;Rect_data3.y55 = Rect_data3.y53+add_y17[5];//右3
	Rect_data3.color53 = 0x0000; //黑色
	Rect_data3.x56 = 710;Rect_data3.y56 = Rect_data3.y55;//左4
	Rect_data3.x57 = 730;Rect_data3.y57 = Rect_data3.y55+add_y17[7];//右4,最大530
	Rect_data3.color54 = 0xF81F;  //紫色
	
	//矩形18
	Rect_data3.x60 = 750;Rect_data3.y60 = 433;//左1
	Rect_data3.x61 = 770;Rect_data3.y61 = Rect_data3.y60+add_y18[1];//右1
	Rect_data3.color61 = 0x07E0; //绿色 
	Rect_data3.x62 = 750;Rect_data3.y62 = Rect_data3.y61;//左2
	Rect_data3.x63 = 770;Rect_data3.y63 = Rect_data3.y61+add_y18[3];//右2
	Rect_data3.color62 = 0xF800; //红色   
	Rect_data3.x64 = 750;Rect_data3.y64 = Rect_data3.y63;//左3
	Rect_data3.x65 = 770;Rect_data3.y65 = Rect_data3.y63+add_y18[5];//右3
	Rect_data3.color63 = 0x0000; //黑色  
	Rect_data3.x66 = 750;Rect_data3.y66 = Rect_data3.y65;//左4
	Rect_data3.x67 = 770;Rect_data3.y67 = Rect_data3.y65+add_y18[7];//右4,最大530
	Rect_data3.color64 = 0xF81F;  //紫色

总结

开机密码功能、掉电保存功能、参数设置库功能、生成激活码的一些功能未展示,等有空了继续更新

这次的难点就是在这些的联动,后面还有难点,比如开关机密码的修改以及保存,代码里面怎么去设置了一个
万能密码,还有掉电保存是存储的位置,曲线设置参数怎么保存起来,用的时候一键使用,最重要也是难的部
分就是激活码的功能,这块是自己生成激活码,在设备不连网的情况下,去激活对应的天数,这在对于我使用
51单片机来说是一个重大的突破,自己收获确实会变多。在这款屏幕上的所有功能我又在繁易: FE6156H的屏
幕上进行了突破,具体什么原因就不说了,当是自己的学习吧,后面也可以更新繁易屏幕使用的难点,欢迎各
位小伙伴一起学习,一起突破!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值