UCGUI+触摸在STM32上的移植

首先要准备好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); //新内容   //一直了操作系统






}



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
















评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值