首先要明白NEC3.5屏的硬件参数,你可以查看DATASHEET,它最大支持的颜色数是262144色,二进制是19位,十六进制是0x40000,没有达到24位色.在写屏的COLOR时你不可能写入24位数据. 裸机跑,没有问题!但是最多你可以写入262144颜色值,因为硬件通信中他就只接收20位,0xfffff,多一位都不行.下面代码是QQ2440V3(MINI2440通用)光盘中UCOSII的代码,写入颜色值是16位的(16BPP),你可以自已改成20位的。其实我觉得没多大意思,16位和19位在视觉上能差多少呢?
此程序来自QQ2440的UCOSII示例LCD.c中一部分
#define M5D(n) ((n) & 0x1fffff) // To get lower 21bits
unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];
/**************************************************************
320×240 16Bpp TFT LCD功能模块初始化
**************************************************************/
static void Lcd_PowerEnable(int invpwren,int pwren);
static void Lcd_Init(void)
{
rGPCUP = 0x00000000;
rGPCCON = 0xaaaa02a9;
// rGPDUP=0xffffffff; // Disable Pull-up register
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=(MVAL<<8)
|(HSPW);
rLCDCON5=(1<<11)
| (1<<10)
| (1<<9)
| (1<<8)
| (0<<7)
| (0<<6)
| (1<<3)
|(BSWP<<1)
| (HWSWP);
//5:6:5 VCLK posedge BSWP=0,HWSWP=1;
rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)
|M5D((U32)LCD_BUFFER>>1);
rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_TFT_YSIZE*2))>>1 );//最后还要写入0xfffff以内的数据(2.5字节)
rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_TFT_XSIZE)/1)<<11)
|(LCD_TFT_XSIZE/1);
rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
rTCONSEL &= (~7) ; // Disable LPC3480
rTPAL=0; // Disable Temp Palette
}
应用:
#define RGB(r,g,b) (unsigned int)( (r << 16) + (g << 8) + b )
Lcd_printf(0,15,RGB( 0xFF,0xFF,0xFF),RGB( 0x00,0x00,0x00),0,"%4d-%02d-%02d 星期%d 中国移动\n",