代码:
主函数图片显示循环
while(1)
{
Paint_Bmp(0, 0, 320, 240, gImage_logo1);
Delay(500);
Paint_Bmp(0, 0, 320, 240, gImage_logo2);
Delay(500);
Paint_Bmp(0, 0, 320, 240, gImage_logo3);
Delay(500);
Paint_Bmp(0, 0, 320, 240, gImage_logo4);
Delay(500);
Paint_Bmp(0, 0, 320, 240, gImage_logo5);
Delay(500);
Paint_Bmp(0, 0, 320, 240, gImage_logo6);
Delay(500);
Delay(500);
Delay(500);
Delay(500);
}
BUFFER定义:
volatile U32 LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];
LCD的初始化函数:
void Lcd_Init(void)
{
rGPCUP = 0xffffffff;
rGPCCON = 0xaaaa02a9;
rGPDUP = 0xffffffff;
rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]
rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE<<5)|(BPPMODE<<1)|0;
// TFT LCD panel,24bpp TFT,ENVID=off
rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);
rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);
rLCDCON4=(MVAL<<8)|(HSPW);
rLCDCON5 = (0<<12) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3) |(BSWP<<1) | (HWSWP);
rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);
rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*4))>>1 );
rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT*2);
rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
rTCONSEL &= (~7) ; // Disable LPC3480
rTPAL=0; // Disable Temp Palette
}
图片显示函数:
void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp[])
{
int x,y;
U32 c;
unsigned int p = 0;
for( y = y0 ; y < l ; y++ )
{
for( x = x0 ; x < h ; x++ )
{
c = (bmp[p+3]<<24)|(bmp[p+2]<<16)| (bmp[p+1]<<8)|bmp[p] ;
if ( ( (x0+x) < SCR_XSIZE_TFT) && ( (y0+y) < SCR_YSIZE_TFT) )
LCD_BUFFER[y0+y][x0+x] = c ;
p = p + 4 ;
}
}
}
图片的数组格式:
const unsigned char gImage_logo1[307200] = { /* 0X00,0X20,0X40,0X01,0XF0,0X00,0X00,0XE4, */
0X40,0X49,0X56,0X00,0X2F,0X34,0X43,0X00,0X2B,0X2F,0X3A,0X00,0X26,0X29,0X2D,0X00,
0X25,0X29,0X24,0X00,0X2E,0X30,0X24,0X00,0X35,0X35,0X23,0X00,0X32,0X31,0X1D,0X00,
0X2B,0X27,0X14,0X00,0X34,0X30,0X1E,0X00,0X31,0X2C,0X1D,0X00,0X2B,0X28,0X1A,0X00,
0X27,0X26,0X18,0X00,0X26,0X27,0X17,0X00,0X25,0X2B,0X18,0X00,0X27,0X31,0X1A,0X00,
0X28,0X35,0X1D,0X00,0X19,0X26,0X10,0X00,0X1A,0X26,0X12,0X00,0X1D,0X29,0X15,0X00,
0X1F,0X2B,0X17,0X00,0X20,0X2C,0X18,0X00,0X20,0X2C,0X18,0X00,0X1F,0X2B,0X17,0X00,
0X1E,0X2A,0X16,0X00,0X22,0X2E,0X1A,0X00,0X1D,0X29,0X15,0X00,0X1F,0X2B,0X17,0X00,
0X1B,0X27,0X13,0X00,0X24,0X2F,0X1B,0X00,0X1F,0X2B,0X17,0X00,0X22,0X2D,0X19,0X00,
0X1E,0X29,0X15,0X00,0X26,0X2D,0X18,0X00,0X27,0X2E,0X19,0X00,0X27,0X2F,0X18,0X00,
0X26,0X2E,0X17,0X00,0X26,0X2F,0X15,0X00,0X28,0X31,0X17,0X00,0X2C,0X35,0X1B,0X00,
0X30,0X39,0X1F,0X00,0X2B,0X32,0X1D,0X00,0X36,0X3D,0X28,0X00,0X43,0X49,0X38,0X00,
0X49,0X4F,0X3E,0X00,0X48,0X4C,0X40,0X00,0X48,0X4C,0X40,0X00,0X4B,0X4E,0X45,0X00,
0X50,0X53,0X4A,0X00,0X4C,0X54,0X49,0X00,0X4B,0X55,0X49,0X00,0X4C,0X54,0X49,0X00,
0X4A,0X54,0X48,0X00,0X4C,0X54,0X49,0X00,0X4C,0X56,0X4A,0X00,0X4E,0X56,0X4B,0X00,
0X4D,0X57,0X4B,0X00,0X4C,0X54,0X49,0X00,0X4A,0X54,0X48,0X00,0X4B,0X53,0X48,0X00,
0X4A,0X54,0X48,0X00,0X4B,0X53,0X48,0X00,0X4B,0X55,0X49,0X00,0X4E,0X56,0X4B,0X00,
0X4D,0X57,0X4B,0X00,0X44,0X4E,0X41,0X00,0X48,0X52,0X45,0X00,0X4E,0X59,0X49,0X00,
0X52,0X5D,0X4D,0X00,0X52,0X5D,0X4D,0X00,0X4E,0X59,0X49,0X00,0X4A,0X54,0X43,0X00,
0X46,0X50,0X3F,0X00,0X51,0X59,0X48,0X00,0X5E,0X66,0X55,0X00,0X65,0X6E,0X5A,0X00,
0X68,0X71,0X5D,0X00,0X6A,0X70,0X5D,0X00,0X58,0X5E,0X4B,0X00,0X48,0X4E,0X3B,0X00,
0X4B,0X51,0X40,0X00,0X4A,0X50,0X45,0X00,0X52,0X5A,0X50,0X00,0X45,0X4D,0X42,0X00,
0X47,0X4F,0X44,0X00,0X4B,0X51,0X46,0X00,0X56,0X5C,0X51,0X00,0X51,0X55,0X49,0X00,
0X58,0X5C,0X50,0X00,0X56,0X5B,0X4C,0X00,0X4C,0X51,0X42,0X00,0X4C,0X4F,0X3F,0X00,
0X56,0X59,0X49,0X00,0X5A,0X5D,0X4D,0X00,0X59,0X5C,0X4C,0X00,0X60,0X64,0X51,0X00,
0X6C,0X6F,0X5F,0X00,0X63,0X66,0X57,0X00,0X5F,0X61,0X55,0X00,0X64,0X66,0X5A,0X00,
0X5F,0X61,0X55,0X00,0X60,0X62,0X56,0X00,0X5D,0X5F,0X53,0X00,0X56,0X58,0X4C,0X00,............................
文件的编译顺序:
2440init.s
2440slib.s
main.c
nand.c
2440lib.c
mmu.c
LCD_TFT.c
logo1.c
logo2.c
logo3.c
logo4.c
logo5.c
logo6.c
六个logoX文件对应六张24bit的图片数组,按照这个顺序编译的话logo4、5、6对应的图片出错,总之就是放在后面的三张就出错。 |