---------下面谈谈uCGUI的移植------------------------------------------------------------------------------------------------------------------
参考uCGUI中文手册
1:首先通过网络上相关资料的介绍,大致清楚UCGUI的整个框架与需要移植的地方。
2:结合uCGUI中文手册与自己的开发板具体进行移植。
///////////////////////////////////////
1:指针光标输入设备(触摸屏)
指针光标输入设备包括鼠标和触摸屏。 它们共用一组通用的指针光标输入设备(PID)函数使得鼠标和触摸屏能同时起作用。 该函数一般由视窗管理器自动地调用,如前所述的那样,起刷新显示屏的作用。 如果视窗管理器未使用,你的应用程序要负责调用PID 函数。
//////////////////////////////下面的内容是整理自网络//////////////////////////////////////////
0:准备工作
在移植之前,首先要了解在网上下的UCGUI 3.90源码包,且需要先写好裸机下成功驱动LCD的驱动代码。
1)“tool文件夹” 基本都是字体和模板查看之类的.
2)“sample文件夹” 是实例代码和模版配置头文件,如跟操作系统有关的GUI_X或者一些模板
3)“Start文件夹” 是uCGUI的源代码包
Config,配置文件;
GUI/AntiAlias,抗锯齿支持;
GUI/ConvertMono,用于B/W(黑白两色)及灰度显示的色彩转换程序;
GUI/ConvertColor,用于彩色显示的色彩转换的程序;
GUI/Core ??C/GUI,内核文件;
GUI/Font,字体文件;
GUI/LCDDriver,LCD 驱动;
GUI/Mendev,存储器件支持;
GUI/Touch,触摸屏支持;
GUI/Widget,视窗控件库;
GUI/WM,视窗管理器;
1: 定义/修改GUIConf.h、LCDConf.h 、GUITouchConf.h
GUIConf.h : μc/GUI功能模块、动态存储空间(用于内存设备和窗口对象)大小、默认字体设置等 基本GUI预定 义控制的定义
在图形接口的配置文件GUIconf.h 的默认设置中,窗口
管理、存储器支持、触摸屏等功能被屏蔽。默认字体设置为
GUI_Font6x8。uC/GUI 同样支持汉字的显示,使用生成汉字
字库的软件,可以将Windows 操作系统内的任何字体字库转
换汉字字库文件,也可以根据实际显示的需要,将所需显示
的汉字建立一个自定义字库,添加到uC/GUI 中。文中选用
的汉字字库文件为hzk16s.c(16×16 点阵的宋体汉字字库),
uC/GUI 便支持16×16 点阵宋体汉字的显示。
#define GUI_OS (1) //多任务
#define GUI_SUPPORT_TOUCH (0) //触摸
#define GUI_SUPPORT_UNICODE (1) //Unicode支持
#define GUI_DEFAULT_FONT &GUI_Font6x8 //GUI默认字体
#define GUI_ALLOC_SIZE 5000 //动态内存的大小
#define GUI_WINSUPPORT 1 //窗口控件支持
#define GUI_SUPPORT_MEMDEV 1 //支持内存设备
#define GUI_SUPPORT_AA 1
LCDConf.h:LCD大小、控制器类别、总线宽度、颜色选取等LCD参数控制文件
#define LCD_XSIZE (160) //配置TFT的水平分辨率
#define LCD_YSIZE (128) //配置TFT的垂直分辨率
#define LCD_CONTROLLER (54124) //TFT控制器的名称
#define LCD_BITSPERPIXEL (16) //每个像素的位数
#define LCD_FIXEDPALETTE (565) //调色板格式
#define LCD_SWAP_RB (0) //红蓝反色交换
#define LCD_INIT_CONTROLLER() TFT_Init() ; //此处需要定义的是你的TFT初始化函数
GUITouchConf.h:配备触摸屏,根据触摸屏及其控制芯片编制以下几个函数
void TOUCH_X_ActivateX (void);// 准备Y轴数据测量
void TOUCH_X_ActivateY (void);// 准备X轴数据测量
int TOUCH_X_MeasureX(void); // 根据AD转换结果返回X的值
int TOUCH_X_MeasureY(void); // 根据AD转换结果返回Y的值
以上几个函数在GUI_TOUCH_Exec()会被调用。
GUI/CORE/LCD_ConfDefaults.h文件内可以找到所有囊括LCD配制默认选项,包括LCD屏个数,控制器个数 ,调色板,屏幕反向设置等众多配制选项。
2:LCD配置内容与驱动接口
对于自带控制器的LCD液晶屏,通过LCDConf.h文件中的总线接口和寄存器接口对硬件接口进行配置与定义;
对于片上已经集成了LCD控制器的控制器,通过对片内LCD控制器的寄存器设置来配置LCD各接口信号;
一般LCD的接口信息配置包括VFRAME帧同步信号,VLINE线同步脉冲信号,VCLK象素时钟信号,VM信号和数据位不等的象素点数据输出信号。
3:LCD驱动底层实现
LCD驱动编程的实质是液晶屏上的点对应的显存编程,最底层调用函数为画点函数,用户可根据LCD屏的驱动控制器的实际情况(通过总线接口、寄存器接口或LCD控制器的寄存器来操作)来实现底层驱动。
_SetPixel(),_GetPixel(),XorPixel()为最底层直接对显存操作函数。
uc/GUI提供部分控制器驱动,文件为GUI/LCDDriver/LCDSLin.c,如sed1335,T6963等简单LCD控制器。核心函数为LCD_Write(). _SetPixel()调用LCD_Write()写显存。
uC/GUI 的图形库应用程序、汉字显示、窗口等功能的实
现,都建立在底层的LCD 驱动和画点功能的基础上,uC/GUI
的移植,必须先完成 LCD 的驱动,以及画点、线等基本功
能。控制器TFT3224 在驱动液晶显示时,只需设置好显示的
行列坐标,向显示寄存器写入显示数据,便实现显示功能,
而无需计算显示存储器和显示区域的地址
画点程序如下:
static void _SetPixel(int x, int y, LCD_PIXELINDEX c)
{
Y_ADDR = y;
X_ADDR = x;
CMD = ((x/256)<<2) | (y/256); //控制寄存器CMD 存放行列坐标的高位数据
DAT = c; //数据寄存器DAT
}
让GUI能够找到你的LCD驱动,修改LCDDriver。
在编写你的TFT底层驱动程序的时候,一定不能忘记编写这两个函数:设置一个像素和获取一个像素的颜 色,因为后面很多UCGUI和你的TFT驱动关联起来需要这两个函数为前提。以我的TFT为例:
void LCD_SetPixel(unsigned short x, unsigned short y, unsigned short color)
{
}
unsigned short LCD_GetPixel(unsigned short x, unsigned short y)
{
}
uC/GUI 的验证程序如下:
…
GUI_SetColor(GUI_WHITE); //设置前景色为白色
LCD_L0_DrawHLine(0,100,100); //绘制水平直线
GUI_InitLUT(); //初始化调色板
GUI_DrawBitmap(&bm2,0,0); //绘制位图,位图文件为2.c
GUI_SetFont(&GUI_FontHZ_Song_16);//设置当前字体16×16 宋体
GUI_DispStringAt("uC/GUI 移植实现",10,40); //显示汉字
…
这两个函数写好,并测试可以正常显示后,接下来需要修改TFT与UCGUI关联的函数(在一个C文件下(我的是ili9320_ucgui.c),建议大家在移植GCGUI之前最好下载个别人移植好的例程,对着修改这样难度降低很多):
int LCD_L0_Init(void)
{
TFT_Init();
return 0;
}
这个函数,是GCGUI初始化TFT需要调用的,里面的函数就是你TFT底层驱动的初始化函数。
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)
{
LCD_SetPixel(x,y,PixelIndex);
}
unsigned int LCD_L0_GetPixelIndex(int x, int y)
{
return LCD_GetPixel(x,y);
}
上面两个函数是其他函数的最基本元素,其他函数比如画线、点、圆都需要调用改函数。里面的LCD_SetPixel(x,y,PixelIndex)、LCD_GetPixel(x,y);就是你TFT底层驱动设置像素和获取像素的两个函数。
紧接着把该ili9320_ucgui.c文件下其他函数修改一下(凡是遇到设置像素和获取像素的地方用以上两个函数代替。)
接着,修改另一个C文件(ili9320_api.c)这里修改很简单,仅仅也是将设置像素和获取像素的函数替换掉自己定义的即可。
4:GUI_X文件夹内包括有与硬件联系紧密的文件
GUI_X文件夹下:
GUI_X.C——无操作系统情况
GUI_X_embOS.c——嵌入式操作系统
GUI_X_ucos.c——UCOS环境下
GUI_X.c包括大部分与硬件的关联函数,如定时器的初始化和触摸屏相关函数。
uc/GUI与操作系统挂接的核心是定时器的设置和挂接。
uc/GUI是通过延时函数GUI_Delay()调用GUI_X_Delay,再调用GUI_Exec()处理窗口部件中的回调函数进行重绘。在任何一款嵌入式操作系统中都需要定时器的心脏跳动作用,支持OS的uc/GUI可以通过定时器的设置达到嵌入式操作系统和图形系统的实时和同步操作。在GUI_X_uCos.c中通过uc/os中的延时程序同μc/GUI挂接实现整合。
4:移植完毕
经过移植之后,GUI应用程序开发通过uc/GUI而变得非常容易,在调用GUI_Init()后,用户可以根据需要正确配制uc/GUI后,可使用其强大的库函数和丰富的GUI资源进行编程。在GUI编程过程中,可以打开抗锯齿功能减小图形失真,得到高质量的图形和字体效果。采用内存设备能有效克服闪烁现象,获得更快的显示速度,但它和抗锯齿功能一样需要额外的内存开销。