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); 
 
}