www.pudn.com > Source_program.rar > Lcd.c
#include#include "..\inc\def.h" #include "..\inc\44b.h" #include "..\inc\44blib.h" #include "..\inc\lcdlib.h" #include "..\inc\glib.h" #include "..\inc\lcd.h" void Test_LcdMono(void); void Test_LcdG4(void); void Test_LcdG16(void); void Test_LcdColor(void); void Test_LcdMono(void) { int i,j; Lcd_Init(MODE_MONO); Glib_Init(MODE_MONO); Uart_Printf("[Mono(1bit/1pixel) LCD Test]: Press Any Key!\n"); Glib_ClearScr(0); for(j=0;j VD[7:4] Uart_Printf("[(240x3)x320 COLOR STN LCD TEST]\n"); Uart_Printf(" R:0 ... 7 \n"); Uart_Printf("G:0 B0:1 B0:1 B0:1 \n"); Uart_Printf("G:. 2:3 2:3 2:3 \n"); Uart_Printf("G:. B0:1 B0:1 B0:1 \n"); Uart_Printf("G:. 2:3 2:3 2:3 \n"); Uart_Printf("G:. B0:1 B0:1 B0:1 \n"); Uart_Printf("G:7 2:3 2:3 2:3 \n"); Lcd_Init(MODE_COLOR); Glib_Init(MODE_COLOR); Glib_ClearScr(0); for(j=0;j<320;j++) for(i=0;i<240;i++) { //RRRGGGBB PutPixel( i,j,((i/30)<<5)+((j/40)<<2)+((i/15)&0x1)+(((j/20)&0x1)<<1) ); } Uart_Printf("256 color mode test 1. Press any key!\n"); Uart_Getch(); Glib_ClearScr(0); k=0; for(i=160;i<480;i+=20) { for(j=120;j<360;j+=15) { Glib_FilledRectangle(i,j,i+19,j+14,k); k++; } } // #0 // 00 Glib_Rectangle(0,0,319,239,255); Glib_Line(0,0,319,239,255); Glib_Line(0,239,319,0,255); // 0# // 00 Glib_Rectangle(0+320,0,319+320,239,255); Glib_Line(0+320,0,319+320,239,255); Glib_Line(0+320,239,319+320,0,255); // 00 // #0 Glib_Rectangle(0,0+240,319,239+240,255); Glib_Line(0,0+240,319,239+240,255); Glib_Line(0,239+240,319,0+240,255); // 00 // 0# Glib_Rectangle(0+320,0+240,319+320,239+240,255); Glib_Line(0+320,0+240,319+320,239+240,255); Glib_Line(0+320,239+240,319+320,0+240,255); Glib_Rectangle(50+320,50+240,269+320,189+240,255); Uart_Printf("Virtual Screen Test(256 color). Press any key[ijkm\\r]!\n"); MoveViewPort(MODE_COLOR); Lcd_MoveViewPort(0,0,MODE_COLOR); } void MoveViewPort(int depth) { int vx=0,vy=0,vd; vd=(depth==1)*16+(depth==4)*8+(depth==16)*4+(depth==256)*2; while(1) { switch(Uart_Getch()) { case 'i': if(vy>=vd)vy-=vd; break; case 'j': if(vx>=vd)vx-=vd; break; case 'k': if(vx<=SCR_XSIZE-LCD_XSIZE-vd)vx+=vd; break; case 'm': if(vy<=(SCR_YSIZE-LCD_YSIZE-vd))vy+=vd; break; case '\r': return; default: break; } Uart_Printf("vx=%3d,vy=%3d\n",vx,vy); Lcd_MoveViewPort(vx,vy,depth); } } /************************ for only test **********************/ #define BUFFER0_PREPARED (0) #define BUFFER1_PREPARED (1) #define BUFFER0_USED (2) #define BUFFER1_USED (3) #define M5D(n) ((n) & 0x1fffff) #define MVAL (13) unsigned int (*frameBuffer256_2)[SCR_XSIZE/4]; void MoveViewPort2(int depth) { int vx=0,vy=0,vd; U32 addr; char key; int state=BUFFER0_USED; vd=(depth==1)*16+(depth==4)*8+(depth==16)*4+(depth==256)*2; while(1) { while(1) { key=Uart_GetKey(); if(key!=0)break; if(state==BUFFER1_USED) {//set the frame buffer as BUFFER1 state=BUFFER0_PREPARED; while((rLCDCON1>>22)==0); // if x>64 addr=(U32)frameBuffer256+(vx/1)+vy*(SCR_XSIZE/1); rLCDSADDR1= (0x3<<27) | ( (addr>>22)<<21 ) | M5D(addr>>1); // 256-color, LCDBANK, LCDBASEU rLCDSADDR2= M5D(((addr+(SCR_XSIZE*LCD_YSIZE))>>1)) | (MVAL<<21); } if(state==BUFFER0_USED) {//set the frame buffer as BUFFER0 state=BUFFER1_PREPARED; while((rLCDCON1>>22)==0); // if x>64 addr=(U32)frameBuffer256_2+(vx/1)+vy*(SCR_XSIZE/1); rLCDSADDR1= (0x3<<27) | ( (addr>>22)<<21 ) | M5D(addr>>1); // 256-color, LCDBANK, LCDBASEU rLCDSADDR2= M5D(((addr+(SCR_XSIZE*LCD_YSIZE))>>1)) | (MVAL<<21); } if((rLCDCON1>>22)==0) { if(state==BUFFER0_PREPARED)state=BUFFER0_USED; if(state==BUFFER1_PREPARED)state=BUFFER1_USED; } } switch(key) { case 'i': if(vy>=vd)vy-=vd; break; case 'j': if(vx>=vd)vx-=vd; break; case 'k': if(vx<=SCR_XSIZE-LCD_XSIZE-vd)vx+=vd; break; case 'm': if(vy<=(SCR_YSIZE-LCD_YSIZE-vd))vy+=vd; break; case '\r': return; default: break; } Uart_Printf("vx=%3d,vy=%3d\n",vx,vy); Lcd_MoveViewPort(vx,vy,depth); } } void Test_LcdColor2(void) { int i,j,k; rPDATE=rPDATE&~(1<<5)|(1<<5); //GPE5=H rPCONE=rPCONE&~(3<<10)|(1<<10); //GPE5=output rPCONC=rPCONC&~(0xff<<8)|(0xff<<8); //GPC[4:7] => VD[7:4] Uart_Printf("[(240x3)x320 Color STN Virtual Screen & 2 Frame Buffers Test]\n"); Lcd_Init(MODE_COLOR); frameBuffer256_2=(unsigned int (*)[SCR_XSIZE/4])malloc(SCR_XSIZE/1*SCR_YSIZE); if((U32)frameBuffer256==0x0)return; if((U32)frameBuffer256_2==0x0)return; Glib_Init(MODE_COLOR); Glib_ClearScr(0); Glib_ClearScr(0); k=0; for(i=160;i<480;i+=20) { for(j=120;j<360;j+=15) { Glib_FilledRectangle(i,j,i+19,j+14,k); k++; } } // #0 // 00 Glib_Rectangle(0,0,319,239,255); Glib_Line(0,0,319,239,255); Glib_Line(0,239,319,0,255); // 0# // 00 Glib_Rectangle(0+320,0,319+320,239,255); Glib_Line(0+320,0,319+320,239,255); Glib_Line(0+320,239,319+320,0,255); // 00 // #0 Glib_Rectangle(0,0+240,319,239+240,255); Glib_Line(0,0+240,319,239+240,255); Glib_Line(0,239+240,319,0+240,255); // 00 // 0# Glib_Rectangle(0+320,0+240,319+320,239+240,255); Glib_Line(0+320,0+240,319+320,239+240,255); Glib_Line(0+320,239+240,319+320,0+240,255); Glib_Rectangle(50+320,50+240,269+320,189+240,255); for(i=0;i<720/4;i++) for(j=0;j<960;j++) { frameBuffer256_2[j][i]=frameBuffer256[j][i]; } Uart_Printf("Virtual Screen Test(256 color). Press any key[ijkm\\r]!\n"); MoveViewPort2(MODE_COLOR); Lcd_MoveViewPort(0,0,MODE_COLOR); }