关于ucgui的LCD驱动

来源:互联网 发布:朱婷北师大 知乎 编辑:程序博客网 时间:2024/05/22 13:58

关于 ucgui 的 lcd 驱动
  ucgui 是一个分层结构的gui系统,大概可以分为以下几个层次
        1、设备驱动层(LCD,键盘触摸屏等设备驱动)
        2、基本显示层
  3、在基本显示层上搭建的api层,字体等的显示
  4、窗口管理和控件层
  5、ap层
  这里主要记录显示驱动层的相关事项.

    ucgui的显示驱动层是显示的最下层,用户基本不用直接调用该层的接口,只有在移植和优化时要考虑修改和配置该层。ucgui的lcd 驱动层是支持多lcd显示的,GUI_NUM_LAYERS 宏来配置,GUI_NUM_LAYERS 最大为 5.

一、lcd驱动层的主要配置参数

#define LCD_XSIZE      (640)   /* lcd 的 X 方向的像素点数 */
#define LCD_YSIZE      (480)   /* lcd 的 Y 方向的像素点数 */
#define LCD_BITSPERPIXEL (8)   /* lcd 上每个像素点占的位数 */
#define LCD_CONTROLLER 1375   /* lcd 控制器id号 */
#define GUI_NUM_LAYERS       /* lcd 的分层数目 */

  GUI_NUM_LAYERS  这个参数是分层显示的层数,ucgui中层可以是虚拟的显示层,也可以是实际的lcd屏。这取决于各个层的接口函数。

二、lcd驱动需要提供的函数接口
 lcd驱动层要实现以下类型的接口函数

 typedef LCD_COLOR      tLCDDEV_Index2Color  (int Index);
 typedef unsigned int   tLCDDEV_Color2Index  (LCD_COLOR Color);
 typedef unsigned int   tLCDDEV_GetIndexMask (void);

 typedef void tLCDDEV_DrawBitmap   (int x0, int y0, int xsize, int ysize,
  int BitsPerPixel, int BytesPerLine,
  const U8 GUI_UNI_PTR * pData, int Diff,
  const void* pTrans);   /* Really LCD_PIXELINDEX, but is void to avoid compiler warnings*/


 typedef void         tLCDDEV_DrawHLine    (int x0, int y0,  int x1);
 typedef void         tLCDDEV_DrawVLine    (int x , int y0,  int y1);
 typedef void         tLCDDEV_FillRect     (int x0, int y0, int x1, int y1);
 typedef unsigned int tLCDDEV_GetPixelIndex(int x, int y);
 typedef void         tLCDDEV_SetPixelIndex(int x, int y, int ColorIndex);
 typedef void         tLCDDEV_XorPixel     (int x, int y);
 typedef void         tLCDDEV_FillPolygon  (const GUI_POINT* pPoints, int NumPoints, int x0, int y0);
 typedef void         tLCDDEV_FillPolygonAA(const GUI_POINT* pPoints, int NumPoints, int x0, int y0);
 typedef void         tLCDDEV_GetRect      (LCD_RECT*pRect);
 typedef int          tLCDDEV_Init         (void);
 typedef int          tLCDDEV_ReInit       (void);
 typedef void         tLCDDEV_On           (void);
 typedef void         tLCDDEV_Off          (void);
 typedef void         tLCDDEV_SetLUTEntry  (U8 Pos, LCD_COLOR color);

 lcd驱动各个类型的接口函数的功能

 tLCDDEV_On 打开 lcd
 tLCDDEV_Off 关闭 lcd
 tLCDDEV_ReInit 重新初始化 lcd,不清除lcd显示内容
 tLCDDEV_Init 初始化lcd,该是在初始化时被调用的,调用路径为GUI_Init->LCD_Init->LCD_L0_Init

 typedef void tLCDDEV_DrawBitmap(int x0, int y0, int xsize, int ysize,
  int BitsPerPixel, int BytesPerLine, const U8 GUI_UNI_PTR * pData, int Diff, const void* pTrans);  
 功能:绘制位图
 参数:
  x0, y0       位图的左上角坐标
  xsize, ysize 位图宽度和高度
  BitsPerPixel 位图每个像素点占的位数
  BytesPerLine 位图每行的字节数
  pData        位图数据指针
  Diff         从左侧开始跳过的像素数
  pTrans       颜色转换表


 typedef LCD_COLOR      tLCDDEV_Index2Color  (int Index);
 将颜色索引转换成颜色值
 typedef unsigned int   tLCDDEV_Color2Index  (LCD_COLOR Color);
 将颜色值转换成颜色索引
 typedef unsigned int   tLCDDEV_GetIndexMask (void);
 得到颜色索引的屏蔽字

 typedef void tLCDDEV_DrawHLine    (int x0, int y0,  int x1);
 功能:画一条水平线
 参数:
  x0 起点x坐标
     x1 终点x坐标
  y0 横线的y坐标

 typedef void tLCDDEV_DrawVLine    (int x , int y0,  int y1);
 功能:画一条垂直线
 参数:
   x 垂直线的x坐标
      y0 起点y坐标
      y1 终点y坐标
 
 typedef void         tLCDDEV_FillRect     (int x0, int y0, int x1, int y1);
 功能:填充一个矩形
 参数:
  x0 , y0 矩形的左上角坐标
  x1 , y1 矩形的右上角坐标

 typedef unsigned int tLCDDEV_GetPixelIndex(int x, int y);
  读取给定点的颜色的索引

 typedef void         tLCDDEV_SetPixelIndex(int x, int y, int ColorIndex);
  以给定的颜色在指定的点画一个像素点

 typedef void         tLCDDEV_XorPixel     (int x, int y);
  反现指定点的像素

 typedef void         tLCDDEV_FillPolygon  (const GUI_POINT* pPoints, int NumPoints, int x0, int y0);
  填充一个多边形

 typedef void         tLCDDEV_FillPolygonAA(const GUI_POINT* pPoints, int NumPoints, int x0, int y0);
  带抗锯齿功能的填充多边形

 typedef void         tLCDDEV_GetRect      (LCD_RECT*pRect);
  得到lcd的显示区域

 typedef void         tLCDDEV_SetLUTEntry  (U8 Pos, LCD_COLOR color);
  修改lcd控制器的LUT条目

  lcd 信息函数接口,每个显示层都应该提供lcd信息函数

  lcd 0层信息接口函数名如下:
  int LCD_GetXSize(void)  
 读取lcd的物理宽度(像素值)
  int LCD_GetYSize(void)  
 读取lcd的物理高度(像素值)
  int LCD_GetVXSize(void)  
 读取lcd的虚拟宽度
  int LCD_GetVYSize(void)  
 读取lcd的虚拟高度
  int LCD_GetBitsPerPixel(void)
 读取lcd每个像素的位数
  U32 LCD_GetNumColors(void)
 读取lcd颜色的数目
  int LCD_GetYMag(void) 
 读取lcd虚拟高度的放大因子
  int LCD_GetXMag(void) 
 读取lcd虚拟宽度的放大因子
  int LCD_GetFixedPalette(void)
 读取固定调试板的模式

  lcd 1-4层信息函数接口名如下:?=1,2,3,4
  int LCD_GetXSize_?(void)     
  int LCD_GetYSize_?(void) 
  int LCD_GetVXSize_?(void)
  int LCD_GetVYSize_?(void)
  int LCD_GetBitsPerPixel_?(void)
  U32 LCD_GetNumColors_?(void) 
  int LCD_GetYMag_?(void)
  int LCD_GetXMag_?(void)  
  int LCD_GetFixedPalette_?(void)


三、lcd驱动的多屏显示支持
 ucgui有支持多屏显示的能力,最多可以支持5个显示屏,当GUI_NUM_LAYERS=1时,只有一个显示层,这时接口函数
直接调用第0层的函数,当GUI_NUM_LAYERS>1时,相应层要提供一个接口结构体,每个结构体包含一层的显示函数指针,
所有层的结构组成一个数组,通过显示层的索引了确定调用那个层的接口显示

原创粉丝点击