简单的配色原理
/**************************************************************
The initial and control for 16Bpp TFT LCD
**************************************************************/
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#define MVAL_USED (0) //0=each frame 1=rate by MVAL
#define INVVDEN (1) //0=normal 1=inverted
#define BSWP (0) //Byte swap control
#define HWSWP (1) //Half word swap control
#define PNRMODE (3) // 设置为TFT屏
#define BPPMODE (12) // 设置为16bpp模式
//TFT_SIZE
#define LCD_XSIZE_TFT (480)
#define LCD_YSIZE_TFT (272)
#define SCR_XSIZE_TFT (480)
#define SCR_YSIZE_TFT (272)
#define HOZVAL_TFT (LCD_XSIZE_TFT-1)
#define LINEVAL_TFT (LCD_YSIZE_TFT-1)
//Timing parameter for 4.3' LCD
#define VBPD (2) //垂直同步信号的后肩
#define VFPD (4) //垂直同步信号的前肩
#define VSPW (8) //垂直同步信号的脉宽
#define HBPD (10) //水平同步信号的后肩
#define HFPD (19) //水平同步信号的前肩
#define HSPW (30) //水平同步信号的脉宽
#define CLKVAL_TFT (4) //时钟分频因子,VCLK = HCLK/((CLKVAL_TFT+1)*2)
#define M5D(n) ((n) & 0x1fffff) //用于设置显示缓存区时,取低21位地址
volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT]; //定义显示缓存区
/**************************************************************
TFT LCD功能模块初始化
**************************************************************/
void Lcd_Init(void)
{
rGPCUP = 0x00000000;
rGPCCON = 0xaaaa02a9;
rGPDUP = 0x00000000;
rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]
rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;// TFT LCD panel,16bpp TFT,ENVID=off
rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);
rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);
rLCDCON4= HSPW;
rLCDCON5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3) |(BSWP<<1) | (HWSWP);
//16位输出格式565,VCLK下降沿取数据等 (看数据手册)
rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1); //单扫描
rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );
//LCD_WIDTH×16/16;由于是选择的16位模式,
//如果是24位模式,每个像素4字节则为L