⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.c

📁 三星2443芯片
💻 C
📖 第 1 页 / 共 5 页
字号:
    	    Glib_FilledRectangle(i,j,i+39,j+29,k%16);
    	    k++;
    	}
    		    
    // #0		    
    // 00		    
    Glib_Rectangle(0,0,319,239,15);   
    Glib_Line(0,0,319,239,15);        
    Glib_Line(0,239,319,0,15);

    // 0#
    // 00
    Glib_Rectangle(0+320,0,319+320,239,15);
    Glib_Line(0+320,0,319+320,239,15);        
    Glib_Line(0+320,239,319+320,0,15);

    // 00
    // #0
    Glib_Rectangle(0,0+240,319,239+240,15);
    Glib_Line(0,0+240,319,239+240,15);        
    Glib_Line(0,239+240,319,0+240,15);

    // 00
    // 0#
    Glib_Rectangle(0+320,0+240,319+320,239+240,15);
    Glib_Line(0+320,0+240,319+320,239+240,15);     
    Glib_Line(0+320,239+240,319+320,0+240,15);
    Glib_Rectangle(50+320,50+240,269+320,189+240,15);

    printf("Virtual Screen Test(STN 16 gray). Press any key[ijkm\\r]!\n");
    MoveViewPort(MODE_STN_4BIT);
    Lcd_MoveViewPort(0,0,MODE_STN_4BIT);
    Lcd_EnvidOnOff(0);
}

void Test_Lcd_Cstn_8Bit(void)
{
    int i,j,k;

    Lcd_Init(MODE_CSTN_8BIT);
    Glib_Init(MODE_CSTN_8BIT);
    Lcd_CstnOnOff(1); // Enable ENVID Bit and GPB5 output
    printf("[CSTN 256 COLOR(8bit/1pixel) LCD TEST]\n");
    printf("     R:0   ...    7 \n");
    printf("G:0  B0:1 B0:1 B0:1 \n");
    printf("G:.   2:3  2:3  2:3 \n");
    printf("G:.  B0:1 B0:1 B0:1 \n");
    printf("G:.   2:3  2:3  2:3 \n");
    printf("G:.  B0:1 B0:1 B0:1 \n");
    printf("G:7   2:3  2:3  2:3 \n");
    
    Glib_ClearScr(0, MODE_CSTN_8BIT);
    for(j=0;j<240;j++)
		for(i=0;i<320;i++) //RRRGGGBB
		    PutPixel(i,j,((i/40)<<5)+((j/30)<<2)+(((j/15)%2)<<1)+((i/20)%2));
    printf("CSTN 256 color mode test 1. Press any key!\n");
    Uart_getc();  	
  
    Glib_ClearScr(0, MODE_CSTN_8BIT);
    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);

    printf("Virtual Screen Test(CSTN 256 color). Press any key[ijkm\\r]!\n");
    MoveViewPort(MODE_CSTN_8BIT);
    Lcd_MoveViewPort(0,0,MODE_CSTN_8BIT);
    Lcd_CstnOnOff(0); // Disable ENVID Bit and GPB5 output
}

void Test_Lcd_Cstn_8Bit_On(void)
{
    int i,j;

    Lcd_Init(MODE_CSTN_8BIT);
    Glib_Init(MODE_CSTN_8BIT);
    Lcd_CstnOnOff(1); // Enable ENVID Bit and GPB5 output
    printf("[CSTN LCD(8bit/1pixel) WILL BE TURNED ON EVEN DURING OTHER TEST]\n");
    printf("If you'd like to off the CSTN LCD, then excute other LCD test program,\n");     
    for(j=0;j<240;j++)
	for(i=0;i<320;i++)	//RRRGGGBB
	    PutPixel(i,j,((i/40)<<5)+((j/30)<<2)+(((j/15)%2)<<1)+((i/20)%2));
}

void Test_Lcd_Cstn_12Bit(void)
{
    int i,j,k;
	U32 cMode;
	
    printf("[CSTN 4K COLOR(12bit/1pixel) LCD TEST]\n");
	printf(" Select 12 bpp data format  1. Packed[D]   2. Unpacked\n");
	if (Uart_getc() == '2')
		cMode = MODE_CSTN_12BIT_UP;
	else cMode = MODE_CSTN_12BIT;

    Lcd_Init(cMode);
    Glib_Init(cMode);
    Lcd_CstnOnOff(1); // Enable ENVID Bit and GPB5 output
 
    Glib_ClearScr(0, cMode);
    k=0;
    for(j=0;j<240;j+=80)
        for(i=0;i<320;i+=20)
		{   
	 	   if((k<16)|(k>31))
		    {
		        Glib_FilledRectangle(i,j,i+19,j+79,((k%16)<<(4*(k/16))));
		        k++;
		    }
		    else
		    {
		        Glib_FilledRectangle(i,j,i+19,j+79,((k-(1+2*(k%16)))<<(4*(k/16))));
		        k++;
		    }
		}
    printf("CSTN 4K color mode test 1. Press any key!\n");
    Uart_getc();  	

#if 1 // just test
	i = 0;
	while(1)		
	{
		if (Uart_getc() == '\r') break;
		Lcd_CstnOnOff(0); // Enable ENVID Bit and GPB5 output
		Delay(1);
		Lcd_CstnOnOff(1); // Enable ENVID Bit and GPB5 output
	}
#else
    Glib_ClearScr(0, cMode);
    for(j=0;j<240;j++)
		for(i=0;i<320;i++)
		    PutPixel(i,j,((i/40)<<9)+((j/30)<<5)+(((j/15)%2)<<1)+((i/20)%2));
    printf("CSTN 4K color mode test 2. Press any key!\n");
    Uart_getc();  	

    Glib_ClearScr(0, cMode);
    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&0xf)<<8)|((k%4)<<4)|(k&0xf0)) );
    	    k++;
    	}

    // #0		    
    // 00		    
    Glib_Rectangle(0,0,319,239,0xf00);   
    Glib_Line(0,0,319,239,0x0f0);        
    Glib_Line(0,239,319,0,0x00f);
    // 0#
    // 00
    Glib_Rectangle(0+320,0,319+320,239,0xfff);
    Glib_Line(0+320,0,319+320,239,0xfff);        
    Glib_Line(0+320,239,319+320,0,0xfff);
    // 00
    // #0
    Glib_Rectangle(0,0+240,319,239+240,0xfff);
    Glib_Line(0,0+240,319,239+240,0xfff);        
    Glib_Line(0,239+240,319,0+240,0xfff);
    // 00
    // 0#
    Glib_Rectangle(0+320,0+240,319+320,239+240,0xfff);
    Glib_Line(0+320,0+240,319+320,239+240,0xfff);     
    Glib_Line(0+320,239+240,319+320,0+240,0xfff);
    Glib_Rectangle(50+320,50+240,269+320,189+240,0xfff);

    printf("Virtual Screen Test(CSTN 4K color). Press any key[ijkm\\r]!\n");
    MoveViewPort(cMode);
    Lcd_MoveViewPort(0,0,cMode);
    Lcd_CstnOnOff(0); // Disable ENVID Bit and GPB5 output 

#endif
}

void Test_Lcd_Cstn_16Bit(void)
{
    int i,j,k,c;

    Lcd_Init(MODE_CSTN_16BIT);
    Glib_Init(MODE_CSTN_16BIT);
    Lcd_CstnOnOff(1); // Enable ENVID Bit and GPB5 output
    printf("[CSTN 4K COLOR 16BPP mode LCD TEST]\n");
 
    Glib_ClearScr(0, MODE_CSTN_16BIT);
    k=0;
    for(j=0;j<240;j+=80)
        for(i=0;i<320;i+=20)
		{   
	 	   if(j==0)
		    {
		    	c = (k%16)<<1; //blue
		    }
			 else if (j==80)
			 {
				 c = (15-k%16)<<7; //green 
			 }
	 	    else
		    {
		    	c = (k%16)<<12; //red
		    }
			Glib_FilledRectangle(i,j,i+19,j+79,c);
			k++;
		}
    printf("CSTN 4K color mode test 1. Press any key!\n");
    Uart_getc();  	

    Glib_ClearScr(0, MODE_CSTN_16BIT);
    for(j=0;j<240;j++)
		for(i=0;i<320;i++)
		    PutPixel(i,j,((i/40)<<13)+((j/30)<<8)+(((j/15)%2)<<2)+((i/20)%2));
    printf("CSTN 4K color mode test 2. Press any key!\n");
    Uart_getc();  	

    Glib_ClearScr(0, MODE_CSTN_16BIT);
    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&0xf)<<12)|((k%4)<<7)|(k&0x8)) );
    	    k++;
    	}

    // #0		    
    // 00		    
    Glib_Rectangle(0,0,319,239,0xf00);   
    Glib_Line(0,0,319,239,0x0f0);        
    Glib_Line(0,239,319,0,0x00f);
    // 0#
    // 00
    Glib_Rectangle(0+320,0,319+320,239,0xfff);
    Glib_Line(0+320,0,319+320,239,0xfff);        
    Glib_Line(0+320,239,319+320,0,0xfff);
    // 00
    // #0
    Glib_Rectangle(0,0+240,319,239+240,0xfff);
    Glib_Line(0,0+240,319,239+240,0xfff);        
    Glib_Line(0,239+240,319,0+240,0xfff);
    // 00
    // 0#
    Glib_Rectangle(0+320,0+240,319+320,239+240,0xfff);
    Glib_Line(0+320,0+240,319+320,239+240,0xfff);     
    Glib_Line(0+320,239+240,319+320,0+240,0xfff);
    Glib_Rectangle(50+320,50+240,269+320,189+240,0xfff);

    printf("Virtual Screen Test(CSTN 4K color). Press any key[ijkm\\r]!\n");
    MoveViewPort(MODE_CSTN_16BIT);
    Lcd_MoveViewPort(0,0,MODE_CSTN_16BIT);
    Lcd_CstnOnOff(0); // Disable ENVID Bit and GPB5 output
}


void Lcd_CstnOnOff(int onoff)
{
    // 1:CSTN Panel on  0:CSTN Panel off //	
	if(onoff==1)
		rLCDCON1|=1; // ENVID=ON
	else
		rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off
		/*
		rGPBUP=rGPBUP|(1<<5); // Pull-up disable
		rGPBDAT=rGPBDAT&(~(1<<5))|(onoff<<5); // GPB5=On or Off
		rGPBCON=rGPBCON&(~(3<<10))|(1<<10);    //GPD9=output
		*/
	rGPBCON = rGPBCON & ~(0x3<<0)|(1<<0); // GPB5=On or Off
	rGPBDAT = rGPBDAT & ~(0x1<<0)|(onoff<<0); // GPB5=On or Off
}    

void Lcd_EnvidOnOff(int onoff)
{
	if(onoff==1)
		rLCDCON1|=1; // ENVID=ON
	else
		rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off

	rGPBCON = rGPBCON & ~(0x3<<0)|(1<<0); // GPB5=On or Off
	rGPBDAT = rGPBDAT & ~(0x1<<0)|(onoff<<0); // GPB5=On or Off
}    

void Glib_ClearScr(U32 c, int type)
{	
    //Very inefficient function.
    int i,j;
    if(type&0x2000)
        for(j=0;j<SCR_YSIZE_CSTN;j++)
    	    for(i=0;i<SCR_XSIZE_CSTN;i++)
		        PutPixel(i,j,c);
    else
        for(j=0;j<SCR_YSIZE_STN;j++)
    	    for(i=0;i<SCR_XSIZE_STN;i++)
		        PutPixel(i,j,c);
}

void Glib_FilledRectangle(int x1,int y1,int x2,int y2,int color)
{
    int i;

    for(i=y1;i<=y2;i++)
	Glib_Line(x1,i,x2,i,color);
}

void Glib_Rectangle(int x1,int y1,int x2,int y2,int color)
{
    Glib_Line(x1,y1,x2,y1,color);
    Glib_Line(x2,y1,x2,y2,color);
    Glib_Line(x1,y2,x2,y2,color);
    Glib_Line(x1,y1,x1,y2,color);
}


// LCD display is flipped vertically
// But, think the algorithm by mathematics point.
//   3I2
//   4 I 1
//  --+--   <-8 octants  mathematical cordinate
//   5 I 8
//   6I7
void Glib_Line(int x1,int y1,int x2,int y2,int color)
{
	int dx,dy,e;
	dx=x2-x1; 
	dy=y2-y1;
    
	if(dx>=0)
	{
		if(dy >= 0) // dy>=0
		{
			if(dx>=dy) // 1/8 octant
			{
				e=dy-dx/2;
				while(x1<=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1+=1;e-=dx;}	
					x1+=1;
					e+=dy;
				}
			}
			else		// 2/8 octant
			{
				e=dx-dy/2;
				while(y1<=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1+=1;e-=dy;}	
					y1+=1;
					e+=dx;
				}
			}
		}
		else		   // dy<0
		{
			dy=-dy;   // dy=abs(dy)

			if(dx>=dy) // 8/8 octant
			{
				e=dy-dx/2;
				while(x1<=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1-=1;e-=dx;}	
					x1+=1;
					e+=dy;
				}
			}
			else		// 7/8 octant
			{
				e=dx-dy/2;
				while(y1>=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1+=1;e-=dy;}	
					y1-=1;
					e+=dx;
				}
			}
		}	
	}
	else //dx<0
	{
		dx=-dx;		//dx=abs(dx)
		if(dy >= 0) // dy>=0
		{
			if(dx>=dy) // 4/8 octant
			{
				e=dy-dx/2;
				while(x1>=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1+=1;e-=dx;}	
					x1-=1;
					e+=dy;
				}
			}
			else		// 3/8 octant
			{
				e=dx-dy/2;
				while(y1<=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1-=1;e-=dy;}	
					y1+=1;
					e+=dx;
				}
			}
		}
		else		   // dy<0
		{
			dy=-dy;   // dy=abs(dy)

			if(dx>=dy) // 5/8 octant
			{
				e=dy-dx/2;
				while(x1>=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1-=1;e-=dx;}	
					x1-=1;
					e+=dy;
				}
			}
			else		// 6/8 octant
			{
				e=dx-dy/2;
				while(y1>=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1-=1;e-=dy;}	
					y1-=1;
					e+=dx;
				}
			}
		}	
	}
}

void MoveViewPort(int type)
{
    int vx=0,vy=0,vd;
	// minimum movement offset
	vd=	(type==MODE_STN_1BIT)*16+(type==MODE_STN_2BIT)*8+(type==MODE_STN_4BIT)*4
        +(type==MODE_CSTN_8BIT)*2+(type==MODE_CSTN_12BIT)*4+(type==MODE_CSTN_12BIT_UP)*1+(type==MODE_CSTN_16BIT)*1
        +(type==MODE_TFT_1BIT_240320)*16+(type==MODE_TFT_8BIT_240320)*2+(type==MODE_TFT_16BIT_240320)*1
        +(type==MODE_TFT_1BIT_640480)*16+(type==MODE_TFT_8BIT_640480)*2+(type==MODE_TFT_16BIT_640480)*1+(type==MODE_TFT_24BIT_640480)/2
        +(type==MODE_TFT_1BIT_800600)*16+(type==MODE_TFT_8BIT_800600)*2+(type==MODE_TFT_16BIT_800600)*1;        

    while(1)
    {
    	switch(Uart_getc())
    	{
    	case 'i':
		    if(vy>=vd)vy-=vd;    	   	
        break;

    	case 'j':
    	    if(vx>=vd)vx-=vd;
    	break;

    	case 'k':
		    //if((type==MODE_TFT_1BIT_800600)|(type==MODE_TFT_8BIT_800600)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -