比如说 320*240 的屏 它就有 320*240 个点,因为颜色是 16 位的,所有如果要填满 LCD ,要开辟 320*240*2 字节空间就足够了
#define LCD_XSIZE_TFT (320)
#define LCD_YSIZE_TFT (240)
#define SCR_XSIZE_TFT (LCD_XSIZE_TFT*2)
#define SCR_YSIZE_TFT (LCD_YSIZE_TFT*2)
#define LCDFRAMEBUFFER 0x33800000
// 画点函数
static void PutPixel(U32 x,U32 y,U16 c)
{
if(x<SCR_XSIZE_TFT && y<SCR_YSIZE_TFT)
frameBuffer16BitTft[(y)][(x)] = c;
}
U16 (*frameBuffer16BitTft)[SCR_XSIZE_TFT];
frameBuffer16BitTft=(U16 (*)[SCR_XSIZE_TFT])LCDFRAMEBUFFER;
frameBuffer16BitTft[(y)][(x)] = c; 就相当于 y* 640+x 其地址为 0x33800000+ y* 640+x*2
U16 是说的 RGB 颜色的值 是 16 位的数据
所以点( 0 , 0 ) 显存地址为 frameBuffer16BitTft ( 0 , 0 )
(0,0) frameBuffer16BitTft[0][0] 0x33800000
(1,0) frameBuffer16BitTft[0][1] 0x33800000+1*2
(2,0) frameBuffer16BitTft[0][2] 0x33800000+2*2
.........................
(319,0) frameBuffer16BitTft[0][320] 0x33800000+319*2
………………………………………..
(0,1) frameBuffer16BitTft[1][0] 0x33800000+(1*640)+319*2
..........................
(0,239) frameBuffer16BitTft[239][0] 0x33800000+(239*640)+319*2
............................
(319,239) frameBuffer16BitTft[239][319]
320*2 是显示一行要的颜色字节个数 一行 320 个点,一个点 2 个字节数据
开辟数组时 U16 类型的,所以一个 RGB 数值 就占一个存储单元,
总共有 240 行
///
作者:宇帆 cfanlwn
时间:2010-01-12 17:05:42