首先要准备好TFT屏幕的驱动(包括TFT显示以及触摸的驱动),要求在裸机的情况下实现TFT屏幕的正常显示以及触摸。
其中UCGUI的移植需要两个函数:一个是设置某个点颜色的函数 LCD_SetPointColor()。另一个是读取某个点的函数 LCD_GetPointColor()。
当然,这两个函数的名字可以随便设置。
触摸的移植也需要两个函数:一个是读取X方向AD值的函数(),一个是读取Y方向AD值的函数()
驱动写好了之后,接下来就可以开始移植了。
首先是UCGUI的移植。
第一步:
需要配置几个文件:
GUIConf.h的配置如下,如果有些东西不需要的话,可以把相应的定义改为0。例如,只移植UCGUI,不移植操作系统,可以把GUI_OS改为0.
#define GUI_OS (1) /* Compile with multitasking support */
#define GUI_SUPPORT_TOUCH (1) /* Support a touch screen (req. win-manager) */
#define GUI_SUPPORT_UNICODE (1) /* Support mixed ASCII/UNICODE strings */
#define GUI_DEFAULT_FONT &GUI_Font6x8
#define GUI_ALLOC_SIZE 5000 /* Size of dynamic memory ... For WM and memory devices*/
/*********************************************************************
*
* Configuration of available packages
*/
#define GUI_WINSUPPORT 1 /* Window manager package available */
#define GUI_SUPPORT_MEMDEV 1 /* Memory devices available */
#define GUI_SUPPORT_AA 1 /* Anti aliasing available */
LCDConf.h的配置如下
#define LCD_XSIZE (320)
#define LCD_YSIZE (240)
#define LCD_CONTROLLER (1289)
#define LCD_BITSPERPIXEL (16)
#define LCD_FIXEDPALETTE (565)
#define LCD_SWAP_RB (1)
//#define LCD_SWAP_XY (1)
#define LCD_INIT_CONTROLLER() {Touch_Init();SSD1289_Init();}
其中LCD_XSIZE,LCD_YSIZE这两个根据自己的屏幕的大小来修改。
LCD_CONTROLLER 控制器型号的定义
LCD_INIT_CONTROLLER() 这是系统UCGUI在初始化的时候要调用的宏定义,所以这里需要包含你TFT屏的初始化和触摸屏的初始化(如果需要触摸的话)。
LCDDummy.c文件
LCDDummy.c文件需要修改3个函数以及一个宏定义
(1)宏修改
#if (LCD_CONTROLLER == -1) \
&& (!defined(WIN32) | defined(LCD_SIMCONTROLLER))
将-1改为跟LCDConf.h文件中定义的一样。在这里即为1289
(2)LCD_L0_Init LCD初始化函数
int LCD_L0_Init(void)
{
LCD_INIT_CONTROLLER() ; //对应LCDConf.h文件中的宏定义
return 0;
}
(3)LCD_L0_GetPixelIndex
unsigned int LCD_L0_GetPixelIndex(int x , int y)
{
LCD_PIXELINDEX PixelIndex;
/* Convert logical into physical coordinates (Dep. on LCDConf.h) */
#if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
int xPhys = LOG2PHYS_X(x, y);
int yPhys = LOG2PHYS_Y(x, y);
#else
#define xPhys x
#define yPhys y
#endif
/* Read from hardware ... Adapt to your system 需要自己添加的部分*/
{
//这里添加自己的代码,就是读取坐标为(x,y)处的颜色的代码或者函数。我的是LCD_GetPointColor(x,y);
//所以我在这添加的代码是
PixelIndex=LCD_GetPointColor(x,y);
}
return PixelIndex;
}
(4)LCD_L0_SetPixelIndex
void LCD_L0_SetPixelIndex (int x , int y , int PixelIndex)
{
/* Convert logical into physical coordinates (Dep. on LCDConf.h) */
#if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
int xPhys = LOG2PHYS_X(x, y);
int yPhys = LOG2PHYS_Y(x, y);
#else
#define xPhys x
#define yPhys y
#endif
/* Write into hardware ... Adapt to your system 以下部分需要自己去写的,对应自己的lcd驱动文件*/
{
//这里添加自己的代码,就是设置坐标为(x,y)处的颜色的代码或者函数。我的是LCD_SetPointColor(x,y);
//所以我在这添加的代码是
LCD_SetPointColor(x,y);
}
}
这些都修改完毕之后,在程序的开头只要调用GUI_Init()函数,就可以用UCGUI库中的函数来进行显示了。
一直好显示之后,接下来移植触摸
GUI_X_Touch.c文件
需要自己修改以及修改之后的函数如下.
int GUI_TOUCH_X_MeasureX(void)
{
return Touch_MeasurementX(); //对应触摸驱动中的读取x值函数 ,需要一些简单的滤波,中值滤波就够了
}
int GUI_TOUCH_X_MeasureY(void)
{
return Touch_MeasurementY(); //对应触摸驱动中的读取y值函数,需要一些简单的滤波,中值滤波就够了
}
GUI_X.c文件
需要自己修改以及修改之后的函数如下.
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); }
GUI_X_uCOS.c文件
static void CheckInit (void)
{
if (KeyIsInited == 0)
{
KeyIsInited = 1;
GUI_X_Init();
}
}
/*WM空闲时调用*/
void GUI_X_ExecIdle (void)
{
//OS_X_Delay(1); 原内容 //没一直操作系统
OSTimeDly(50); //新内容 //一直了操作系统
其中UCGUI的移植需要两个函数:一个是设置某个点颜色的函数 LCD_SetPointColor()。另一个是读取某个点的函数 LCD_GetPointColor()。
当然,这两个函数的名字可以随便设置。
触摸的移植也需要两个函数:一个是读取X方向AD值的函数(),一个是读取Y方向AD值的函数()
驱动写好了之后,接下来就可以开始移植了。
首先是UCGUI的移植。
第一步:
需要配置几个文件:
GUIConf.h的配置如下,如果有些东西不需要的话,可以把相应的定义改为0。例如,只移植UCGUI,不移植操作系统,可以把GUI_OS改为0.
#define GUI_OS (1) /* Compile with multitasking support */
#define GUI_SUPPORT_TOUCH (1) /* Support a touch screen (req. win-manager) */
#define GUI_SUPPORT_UNICODE (1) /* Support mixed ASCII/UNICODE strings */
#define GUI_DEFAULT_FONT &GUI_Font6x8
#define GUI_ALLOC_SIZE 5000 /* Size of dynamic memory ... For WM and memory devices*/
/*********************************************************************
*
* Configuration of available packages
*/
#define GUI_WINSUPPORT 1 /* Window manager package available */
#define GUI_SUPPORT_MEMDEV 1 /* Memory devices available */
#define GUI_SUPPORT_AA 1 /* Anti aliasing available */
LCDConf.h的配置如下
#define LCD_XSIZE (320)
#define LCD_YSIZE (240)
#define LCD_CONTROLLER (1289)
#define LCD_BITSPERPIXEL (16)
#define LCD_FIXEDPALETTE (565)
#define LCD_SWAP_RB (1)
//#define LCD_SWAP_XY (1)
#define LCD_INIT_CONTROLLER() {Touch_Init();SSD1289_Init();}
其中LCD_XSIZE,LCD_YSIZE这两个根据自己的屏幕的大小来修改。
LCD_CONTROLLER 控制器型号的定义
LCD_INIT_CONTROLLER() 这是系统UCGUI在初始化的时候要调用的宏定义,所以这里需要包含你TFT屏的初始化和触摸屏的初始化(如果需要触摸的话)。
LCDDummy.c文件
LCDDummy.c文件需要修改3个函数以及一个宏定义
(1)宏修改
#if (LCD_CONTROLLER == -1) \
&& (!defined(WIN32) | defined(LCD_SIMCONTROLLER))
将-1改为跟LCDConf.h文件中定义的一样。在这里即为1289
(2)LCD_L0_Init LCD初始化函数
int LCD_L0_Init(void)
{
LCD_INIT_CONTROLLER() ; //对应LCDConf.h文件中的宏定义
return 0;
}
(3)LCD_L0_GetPixelIndex
unsigned int LCD_L0_GetPixelIndex(int x , int y)
{
LCD_PIXELINDEX PixelIndex;
/* Convert logical into physical coordinates (Dep. on LCDConf.h) */
#if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
int xPhys = LOG2PHYS_X(x, y);
int yPhys = LOG2PHYS_Y(x, y);
#else
#define xPhys x
#define yPhys y
#endif
/* Read from hardware ... Adapt to your system 需要自己添加的部分*/
{
//这里添加自己的代码,就是读取坐标为(x,y)处的颜色的代码或者函数。我的是LCD_GetPointColor(x,y);
//所以我在这添加的代码是
PixelIndex=LCD_GetPointColor(x,y);
}
return PixelIndex;
}
(4)LCD_L0_SetPixelIndex
void LCD_L0_SetPixelIndex (int x , int y , int PixelIndex)
{
/* Convert logical into physical coordinates (Dep. on LCDConf.h) */
#if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
int xPhys = LOG2PHYS_X(x, y);
int yPhys = LOG2PHYS_Y(x, y);
#else
#define xPhys x
#define yPhys y
#endif
/* Write into hardware ... Adapt to your system 以下部分需要自己去写的,对应自己的lcd驱动文件*/
{
//这里添加自己的代码,就是设置坐标为(x,y)处的颜色的代码或者函数。我的是LCD_SetPointColor(x,y);
//所以我在这添加的代码是
LCD_SetPointColor(x,y);
}
}
这些都修改完毕之后,在程序的开头只要调用GUI_Init()函数,就可以用UCGUI库中的函数来进行显示了。
一直好显示之后,接下来移植触摸
GUI_X_Touch.c文件
需要自己修改以及修改之后的函数如下.
int GUI_TOUCH_X_MeasureX(void)
{
return Touch_MeasurementX(); //对应触摸驱动中的读取x值函数 ,需要一些简单的滤波,中值滤波就够了
}
int GUI_TOUCH_X_MeasureY(void)
{
return Touch_MeasurementY(); //对应触摸驱动中的读取y值函数,需要一些简单的滤波,中值滤波就够了
}
GUI_X.c文件
需要自己修改以及修改之后的函数如下.
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); }
GUI_X_uCOS.c文件
static void CheckInit (void)
{
if (KeyIsInited == 0)
{
KeyIsInited = 1;
GUI_X_Init();
}
}
/*WM空闲时调用*/
void GUI_X_ExecIdle (void)
{
//OS_X_Delay(1); 原内容 //没一直操作系统
OSTimeDly(50); //新内容 //一直了操作系统
}
GUITouchConf.h文件
#define GUI_TOUCH_SWAP_XY 0
#define GUI_TOUCH_MIRROR_X 0
#define GUI_TOUCH_MIRROR_Y 0
#define GUI_TOUCH_AD_LEFT 350 //上,下,左,右的AD值,根据实际修改,不要一般都差不多。
#define GUI_TOUCH_AD_RIGHT 3860
#define GUI_TOUCH_AD_TOP 300
#define GUI_TOUCH_AD_BOTTOM 3900