在上一个文档中我给大家介绍了TI图形驱动库的结构,分为三层:显示驱动层,图形基元层,小工具层。其中显示驱动层是需要我们程序员自己补充的。现在我们来具体谈谈如果来补充和书写底层驱动函数。
从ti的文档中我们可以看出,我们需要补充的就是tDisplay这样一个结构体。这个结构体的具体定义如下:
typedef struct
{
//
//! A pointer to display driver-specific data.
//
//
//! The width of this display.
//
unsigned short usWidth;
//
//! The height of this display.
//
//
//! A pointer to the function to draw a pixel on this display.
//
void (*pfnPixelDraw)(void *pvDisplayData, long lX, long lY,
unsigned long
ulValue);
//
long lX0, long
lCount, long lBPP,
const unsigned
char *pucData,
const unsigned
char *pucPalette);
//
上把像素点打出来的过程。还是很容易理解的。
同时我还要向大家说明一下unsigned long (*pfnColorTranslate)(void *pvDisplayData,
unsigned long ulValue);
这个函数。在我这个LCD上是完成RGB888到RGB66的转换,函数体如下:
unsigned long
LCDColorTranslate(void *pvDisplayData,
unsigned long ulValue)
{
//
// Translate from a 24-bit RGB color to a 5-6-5 RGB color.
//
return(DPYCOLORTRANSLATE(ulValue));
}
而DPYCOLORTRANSLATE是一个宏。原型如下:
//****************************************************************************
// 传输颜色数据到BUFFER 24bit to 18 bit
//****************************************************************************
#define DPYCOLORTRANSLATE(c) ((((c) & 0x00fc0000) >> 6) | \
(((c) & 0x0000fc00) >> 4) | \
(((c) & 0x000000fc) >> 2))
可以看到通过这个宏,就可以实现RGB888到RGB66的转换。
其他的部分直接依此编写就好。
当大家完成了这些驱动函数的编写,那么你离使用驱动库还有一步之遥。就是把这些函数的指针添加到tDisplay这样的结构体来。那么我自己命名了一个MyDisplay这个结构体,并以函数指针和其他的一些参数做为填充。如下:
const tDisplay MyDisplay=
{
sizeof(tDisplay),
0,
320, // LCD width
240, // LCD height
LCDPixelDraw,//画点函数
LCDPixelDrawMultiple, //像素点子像素调色函数
LCDlineDrawH,
LCDlineDrawV,
LCDRectFill,
LCDColorTranslate,
LCDFlush,
};
只要补充好这个结构体,恭喜你,你已经可以使用TI的图形驱动库了。在下个文档里。我会向大家讲述如何用ti的库在lcd上显示基本的图形和字符。同时教会大家用ti提供的图形工具来生成自己的字库和图像。