本文用UCGUI398,下载完整的UCGUI的源代码,start文件夹下需要用到GUI和Config两个文件夹,Sample文件夹下需要用到GUI_X文件夹。
目录内容:
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,视窗管理器;
移植uC/GUI主要集中在修改三个头文件和两个C文件:
三个头文件都在\Config下,分别是GUICon.h ,GUITouchConf.h,LCDConf.h ;
两个C文件一个是GUI_X.C(Sample\GUI_X.C),另外一个在GUI\LCDDriver目录下(LCDWin.c)。
主要修改的地方:
#define LCD_XSIZE (240)
#define LCD_YSIZE (320)
//#define LCD_BITSPERPIXEL (8)
#define LCD_BITSPERPIXEL (16) //16Bpp
#define LCD_CONTROLLER 1375 //有控制器写控制器 没控制器写-1
LCD_XSIZE ,LCD_YSIZE 是对应你的LCD的尺寸大小
LCD_BISPERPIXEL 指定每象素的位的数量
2、修改头文件GUI_Conf.h
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (0)
#define GUI_SUPPORT_TOUCH (0)
#define GUI_SUPPORT_UNICODE (1)
#define GUI_DEFAULT_FONT &GUI_Font6x8
//#define GUI_ALLOC_SIZE 12500
#define GUI_ALLOC_SIZE 1024*4
#define GUI_WINSUPPORT 0
#define GUI_SUPPORT_MEMDEV 0
#define GUI_SUPPORT_AA 0
#endif
GUI_0S:位1时支持OS,否则就是裸跑吧
GUI_SUPPORT_TOUCH:是否支持触摸屏
GUI_SUPPORT_UNICODE:是否支持ASCII/UNICODE
GUI_DEFAULT_FONT:选择一个默认的字体
GUI_ALLOC_SIZE:动态内存的大小 //这里很重要,较大时,导致代码太大编译通不过,可以修改小些
GUI_WINSUPPORT:是否支持 WM(视窗管理器)
GUI_SUPPORT_MEMDEV:是否支持存储设备
GUI_SUPPORT_AA:是否支持反锯齿
3、修改 GUITouchConf.h
如果需要支持触摸屏的话,这个头文件也要作相应的修改。
4、修改 LCDWin.c(GUI\LCDDriver\LCDWin.c)
在LCD的最基本操作就是在某一个坐标上画点,其他的操作都是画点操作延伸出来的。必须要把画点这个函数连接到uC/GUI的代码里面。连接的函数就在LCDDriver下,我选用LCDWin.c(还有两个文件是LCDNULL.c和LCDDUMMY.c,这三个文件选一个作为驱动程序就可以,都是些模板)
修改这个文件的时候要注意,首先要屏蔽掉第一行的条件编译语句 #if defined(WIN32) && !defined(LCD_SIMCONTROLLER) 和文件的最后一行的#endif 顺便把#endif头上的#else 也干掉。这个文件是针对PC仿真的,不注释掉这几个地方,整个文件都不会被编译的。
分别根据自己的硬件板重写如下函数:
void LCD_L0_DrawPixel(int x, int y)
void LCD_L0_DrawHLine(int x0, int y, int x1)
void LCD_L0_DrawVLine(int x, int y0, int y1)
void LCD_L0_FillRect(int x0, int y0, int x1, int y1)
void LCD_L0_DrawBitmap(int x0, int y0,
int xsize, int ysize,
int BitsPerPixel,
int BytesPerLine,
const U8* pData, int Diff,
const LCD_PIXELINDEX* pTrans)
void LCD_L0_SetOrg(int x, int y)
int LCD_GetErrStat(void)
void LCD_ClrErrStat(void)
int LCD_GetErrCnt (void)
void LCD_Off(void) {}
void LCD_On(void) {}
int LCD_L0_Init(void)
int LCD_L0_CheckInit(void)
void LCD_L0_ReInit(void)
unsigned LCD_L0_GetPixelIndex(int x, int y)
void LCD_L0_XorPixel(int x, int y)
void LCD_L0_SetPixelIndex(int x, int y, int ColorIndex)
void * LCD_L0_GetDevFunc(int Index)
说明:有的函数可以不用修改,可以用它软件的实现,有的则要重写,有的则可以直接返回0,完全有你个人的硬件板所决定。
5、修改GUI_X.C(Sample\GUI_X.C)文件,这主要是系统级的函数。
在GUI_X这个文件夹下有3个GUI_X*文件。分别为:GUI_X.c、GUI_X_embOS.c、GUI_X_ucOS.c这3个文件分别对应无操作系统、embOS和ucOS。
分别根据自己的硬件板重写如下函数:
void GUI_X_Init(void)
void GUI_X_InitOS()
void GUI_X_Unlock()
void GUI_X_Lock()
int GUI_X_GetTime(void)
void GUI_X_Delay(int ms)
int GUI_X_GetTaskID()
void GUI_X_ExecIdle(void)
void GUI_X_UpdateScreen()
void GUI_X_Log (const char *s) { GUI_USE_PARA(s); }
void GUI_X_Warn (const char *s) { GUI_USE_PARA(s); }
void GUI_X_ErrorOut(const char *s) { GUI_USE_PARA(s); }
说明:有的函数可以不用修改,可以用它软件的实现,有的则要重写,有的则可以直接返回0,完全有你个人的系统所决定。
做完以上的工作基本上算是完成了移植的工作了。
目录内容:
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,视窗管理器;
移植uC/GUI主要集中在修改三个头文件和两个C文件:
三个头文件都在\Config下,分别是GUICon.h ,GUITouchConf.h,LCDConf.h ;
两个C文件一个是GUI_X.C(Sample\GUI_X.C),另外一个在GUI\LCDDriver目录下(LCDWin.c)。
主要修改的地方:
#define LCD_XSIZE (240)
#define LCD_YSIZE (320)
//#define LCD_BITSPERPIXEL (8)
#define LCD_BITSPERPIXEL (16) //16Bpp
#define LCD_CONTROLLER 1375 //有控制器写控制器 没控制器写-1
LCD_XSIZE ,LCD_YSIZE 是对应你的LCD的尺寸大小
LCD_BISPERPIXEL 指定每象素的位的数量
2、修改头文件GUI_Conf.h
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (0)
#define GUI_SUPPORT_TOUCH (0)
#define GUI_SUPPORT_UNICODE (1)
#define GUI_DEFAULT_FONT &GUI_Font6x8
//#define GUI_ALLOC_SIZE 12500
#define GUI_ALLOC_SIZE 1024*4
#define GUI_WINSUPPORT 0
#define GUI_SUPPORT_MEMDEV 0
#define GUI_SUPPORT_AA 0
#endif
GUI_0S:位1时支持OS,否则就是裸跑吧
GUI_SUPPORT_TOUCH:是否支持触摸屏
GUI_SUPPORT_UNICODE:是否支持ASCII/UNICODE
GUI_DEFAULT_FONT:选择一个默认的字体
GUI_ALLOC_SIZE:动态内存的大小 //这里很重要,较大时,导致代码太大编译通不过,可以修改小些
GUI_WINSUPPORT:是否支持 WM(视窗管理器)
GUI_SUPPORT_MEMDEV:是否支持存储设备
GUI_SUPPORT_AA:是否支持反锯齿
3、修改 GUITouchConf.h
如果需要支持触摸屏的话,这个头文件也要作相应的修改。
4、修改 LCDWin.c(GUI\LCDDriver\LCDWin.c)
在LCD的最基本操作就是在某一个坐标上画点,其他的操作都是画点操作延伸出来的。必须要把画点这个函数连接到uC/GUI的代码里面。连接的函数就在LCDDriver下,我选用LCDWin.c(还有两个文件是LCDNULL.c和LCDDUMMY.c,这三个文件选一个作为驱动程序就可以,都是些模板)
修改这个文件的时候要注意,首先要屏蔽掉第一行的条件编译语句 #if defined(WIN32) && !defined(LCD_SIMCONTROLLER) 和文件的最后一行的#endif 顺便把#endif头上的#else 也干掉。这个文件是针对PC仿真的,不注释掉这几个地方,整个文件都不会被编译的。
分别根据自己的硬件板重写如下函数:
void LCD_L0_DrawPixel(int x, int y)
void LCD_L0_DrawHLine(int x0, int y, int x1)
void LCD_L0_DrawVLine(int x, int y0, int y1)
void LCD_L0_FillRect(int x0, int y0, int x1, int y1)
void LCD_L0_DrawBitmap(int x0, int y0,
int xsize, int ysize,
int BitsPerPixel,
int BytesPerLine,
const U8* pData, int Diff,
const LCD_PIXELINDEX* pTrans)
void LCD_L0_SetOrg(int x, int y)
int LCD_GetErrStat(void)
void LCD_ClrErrStat(void)
int LCD_GetErrCnt (void)
void LCD_Off(void) {}
void LCD_On(void) {}
int LCD_L0_Init(void)
int LCD_L0_CheckInit(void)
void LCD_L0_ReInit(void)
unsigned LCD_L0_GetPixelIndex(int x, int y)
void LCD_L0_XorPixel(int x, int y)
void LCD_L0_SetPixelIndex(int x, int y, int ColorIndex)
void * LCD_L0_GetDevFunc(int Index)
说明:有的函数可以不用修改,可以用它软件的实现,有的则要重写,有的则可以直接返回0,完全有你个人的硬件板所决定。
5、修改GUI_X.C(Sample\GUI_X.C)文件,这主要是系统级的函数。
在GUI_X这个文件夹下有3个GUI_X*文件。分别为:GUI_X.c、GUI_X_embOS.c、GUI_X_ucOS.c这3个文件分别对应无操作系统、embOS和ucOS。
分别根据自己的硬件板重写如下函数:
void GUI_X_Init(void)
void GUI_X_InitOS()
void GUI_X_Unlock()
void GUI_X_Lock()
int GUI_X_GetTime(void)
void GUI_X_Delay(int ms)
int GUI_X_GetTaskID()
void GUI_X_ExecIdle(void)
void GUI_X_UpdateScreen()
void GUI_X_Log (const char *s) { GUI_USE_PARA(s); }
void GUI_X_Warn (const char *s) { GUI_USE_PARA(s); }
void GUI_X_ErrorOut(const char *s) { GUI_USE_PARA(s); }
说明:有的函数可以不用修改,可以用它软件的实现,有的则要重写,有的则可以直接返回0,完全有你个人的系统所决定。
做完以上的工作基本上算是完成了移植的工作了。
最后在主函数上编写测试程序:
int Main()
{
GUI_Init();
GUI_DispString("jhluroom,Hello world!");
for(;;);
return 0;
}