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

📄 lcd_240x320.c

📁 UCOS S3C2440 移植源代码 ADS1.2 可以直接跑在开发板上
💻 C
📖 第 1 页 / 共 2 页
字号:

			if ( ( (x0+x) < SCR_XSIZE_TFT_240320) && ( (y0+y) < SCR_YSIZE_TFT_240320) )
			LCD_BUFER[y0+y][x0+x] = c ;

    		p = p + 2 ;
    	}
    }
*/
}

///**********************************
//显示VGA  Fill是8X16点阵的ASCLL码 
//************************************

void Lcd_PutASCII(void *PDC,U32 x,U32 y,U8 Fill,U16 Fcolor,U16 Bcolor)
{
	U16 i,j;
	U8 *pZK;
	U16 *lcdbuf;
    
	pZK =(U8*) Font8x16 + Fill*16;//求Fill的字模首地址
	for( i = 0 ; i < 16 ; i++ )  //连写16行
	{
		if( x < SCR_XSIZE_TFT_320240 && y < SCR_YSIZE_TFT_320240 )
		{
			Fill=*pZK;//取字模
			lcdbuf =(U16 *)PDC + y*SCR_XSIZE_TFT_320240 + x;//确定数据在显示缓冲中的位置
			for( j = 0; j < 8; j++)//scan 8 dots/line
	 	 	{
	     		if( Fill > 0x7f )//该点为1,则显示字体颜色
		 		{
			 		*lcdbuf++ = Fcolor;
		 		}
	     		else//为0,则显示背景颜色
		 		{
			 		*lcdbuf++ = Bcolor;
		 		}
        		Fill=Fill<<1;//取下一个点
	  		}
		}
		pZK++;//取下个字模
		y++;//scan the next line
	}
}

//**********************************************************
//汉字显示QW是16X16点阵的中文内码
//*************************************************

void Lcd_PutHZ(void *PDC,U32 x,U32 y,U16 QW,U16 Fcolor,U16 Bcolor)
{
	U16 i,k;
	U16 *pZK;
	U16 *lcdbuf;
	U16 Fill;
     
	pZK=(U16*)Font16x16+(((QW>>8)-1)*94+(QW&0x00ff)-1)*16;//求QW的字模首地址
	for( i = 0 ; i < 16 ; i++ )  //连写16行
	{
		if( x < SCR_XSIZE_TFT_320240 && y < SCR_YSIZE_TFT_320240 )
		{
	  		Fill=*pZK;//取字模
	  		Fill=(Fill&0xff)<<8 | (Fill>>8);//交换高、低8位
			lcdbuf =(U16 *)PDC + y*SCR_XSIZE_TFT_320240 + x;//确定数据在显示缓冲中的位置
	  		for( k = 0; k < 16; k++)//scan disp 16 dots/line
	  		{
	     		if( Fill > 0x7fff )//该点为1,则显示字体颜色
		 		{
					 *lcdbuf++ = Fcolor;
		 		}
	     		else//为0,则显示字体颜色
		 		{
			 		 *lcdbuf++ = Bcolor;
		 		}
         		Fill=Fill<<1;//取下一个点
	  		}
		}
		pZK++;//取下个字模
		y++;//scan the next line
	}
}



//**************************************************************
//显示字符子程序
//*fmt,....是要显示的字符需用""号,  "....\n" 其中\n是转行符。即显示字符并转行。
//                                    "....%8d"  其中%8d是表示空8个格
//   *fmt,后面可以直接加变量,而显示变量的值。
//***************************************************************
void Lcd_printf(void *PDC,U32 lcdx,U32 lcdy,U16 Fcolor,U16 Bcolor,char *fmt,...)
{
    va_list ap;
    char string[256];
	unsigned char *pStr = (unsigned char *)string;
    unsigned int i = 0;

    va_start(ap,fmt);
    vsprintf(string,fmt,ap);
    va_end(ap);
    

    while(*pStr != 0 )
	{
		switch(*pStr)
		{
			case '\n' :
				{
                    lcdx = 0;       //当遇到\n时转行
                    lcdy = lcdy +16;         //
	               if( lcdy > SCR_YSIZE_TFT_320240-16)
                    {
                        lcdy = SCR_YSIZE_TFT_320240-16;
                    }
		            pStr++;
                    i++;
                    break;
				}

			default:
				{
                    Uart_Printf("printf chinese!\n");
					if( *pStr > 0xA0 & *(pStr+1) > 0xA0 )  //中文输出
                    {
                        if( lcdx > SCR_XSIZE_TFT_320240-16 )
                        {
                            lcdx = 0;
                            lcdy = lcdy + 16;
						}
	                       if( lcdy > SCR_YSIZE_TFT_320240-16)
						   {
                             lcdy = SCR_YSIZE_TFT_320240-16;
						   }


                        Lcd_PutHZ(PDC,lcdx , lcdy , (*pStr - 0xA0)<<8 | (*(pStr+1) - 0xA0),Fcolor,Bcolor);
                         
                        lcdx = lcdx + 16;
                        pStr++;
                        i++;

		                pStr++;
                        i++;
                    }
					else  //英文输出
                    {
                        Uart_Printf("printf english!\n");
                        if( lcdx > SCR_XSIZE_TFT_320240-8 )
                        {
                            lcdx = 0;
                            lcdy = lcdy + 16;
						}
	                       if( lcdy > SCR_YSIZE_TFT_320240-16)
						   {
                             lcdy = SCR_YSIZE_TFT_320240-16;
						   }

                        Lcd_PutASCII(PDC,lcdx,lcdy,*pStr,Fcolor,Bcolor);
                        lcdx=lcdx + 8;
		                pStr++;
                        i++;

                    }

                    break;
				}
		}

        if( i > 255 ) break;
	}
}

void Lcd_Tft_240X320_Init( void )
{
   	Lcd_Port_Init();

	//***********************************
	//LTV350QV_Reset();	         //reset LCD panel
	LTV350QV_Power_ON();
	//***********************************
	
    	Lcd_Init();
    	Lcd_EnvidOnOff(1);		//turn on vedio

	Lcd_ClearScr(0xffff);		//fill all screen with some color
	#define LCD_BLANK		16
	#define C_UP		( LCD_XSIZE_TFT_240320 - LCD_BLANK*2 )
	#define C_RIGHT		( LCD_XSIZE_TFT_240320 - LCD_BLANK*2 )
	#define V_BLACK		( ( LCD_YSIZE_TFT_240320 - LCD_BLANK*4 ) / 6 )
	Glib_FilledRectangle( LCD_BLANK, LCD_BLANK, ( LCD_XSIZE_TFT_320240 - LCD_BLANK ), ( LCD_YSIZE_TFT_320240 - LCD_BLANK ),0x0000);		//fill a Rectangle with some color

	Glib_FilledRectangle( (LCD_BLANK*2 + V_BLACK*0), (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*1),(C_RIGHT), 0x001f);		//fill a Rectangle with some color
	Glib_FilledRectangle( (LCD_BLANK*2 + V_BLACK*1), (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*2),(C_RIGHT), 0x07e0);		//fill a Rectangle with some color
	Glib_FilledRectangle( (LCD_BLANK*2 + V_BLACK*2), (LCD_BLANK*2),(LCD_BLANK*2 + V_BLACK*3),(C_RIGHT), 0xf800);		//fill a Rectangle with some color
	Glib_FilledRectangle(  (LCD_BLANK*2 + V_BLACK*3), (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*4),(C_RIGHT),0xffe0);		//fill a Rectangle with some color
	Glib_FilledRectangle(  (LCD_BLANK*2 + V_BLACK*4), (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*5),(C_RIGHT),0xf81f);		//fill a Rectangle with some color
	Glib_FilledRectangle( (LCD_BLANK*2 + V_BLACK*5), (LCD_BLANK*2),  (LCD_BLANK*2 + V_BLACK*6),(C_RIGHT),0x07ff);		//fill a Rectangle with some color
}

/**************************************************************
**************************************************************/
void Lcd_Tft_240X320( void )
{

    Lcd_Init();
    Lcd_EnvidOnOff(1);		//turn on vedio

	
    Lcd_ClearScr(0x00);		//fill all screen with some color
    Paint_Bmp( 0,0,320,240, xyx_240_320 ) ;		//paint a bmp
  
}

/*****************************************
*  *for LTV350QV_POE TFT LCD
*****************************************/
//short delay for about 90*time ns 
void LTV350QV_Short_Delay(U8 time)
{
	U8 i;
	for(i=0;i<time*15;i++) ;                 //about 360 ns
}

//****************************************
void LTV350QV_Reset(void)
{
	RST_L;
	Delay(100);
	RST_H;
	Delay(1);
}

void LTV350QV_Register_Write(LTV350QV_SPI_Data regdata)
{
	U8 i,temp1;
	U16 temp2;
	U32 temp3;

	//write index
	temp1=regdata.Device_ID<<2 | 0<<1 | 0<<0;          //register index
	temp2=regdata.Index;
	temp3=(temp1<<24) | (temp2<<8);

	CS_L;
	LTV350QV_Short_Delay(1);
	for(i=0;i<24;i++)
		{
			SCLK_L;
			if(temp3 & (1<<(31-i)) )              //if is H
				SDI_H;
			else 
				SDI_L;
			LTV350QV_Short_Delay(1);      //setup time
			SCLK_H;
			LTV350QV_Short_Delay(1);     //hold time
		}
	CS_H;
	
	LTV350QV_Short_Delay(5);
	
	//write instruction
	temp1=regdata.Device_ID<<2 | 1<<1 | 0<<0;       //instruction
	temp2=regdata.Structure;
	temp3=(temp1<<24) | (temp2<<8);
	
	CS_L;
	LTV350QV_Short_Delay(1);
	for(i=0;i<24;i++)
		{
			SCLK_L;
			if(temp3 & (1<<(31-i)) )             //if is H
				SDI_H;
			else
				SDI_L;
			LTV350QV_Short_Delay(1);
			SCLK_H;
			LTV350QV_Short_Delay(1);
		}
	CS_H;
}

U16 LTV350QV_Register_Read(U8 index)
{
	U8 i,temp1;
	U16 temp2;
	U32 temp3;

	//write index
	temp1=LTV350QV_POE<<2 | 0<<1 | 1<<0;          //register index
	temp2=index;
	temp3=(temp1<<24) | (temp2<<8);

	CS_L;
	LTV350QV_Short_Delay(1);
	for(i=0;i<24;i++)
		{
			SCLK_L;
			if(temp3 & (1<<(31-i)) )              //if is H
				SDI_H;
			else 
				SDI_L;
			LTV350QV_Short_Delay(1);      //setup time
			SCLK_H;
			LTV350QV_Short_Delay(1);     //hold time
		}
	CS_H;
	
	LTV350QV_Short_Delay(5);
	
	//read instruction
	temp1=LTV350QV_POE<<2 | 1<<1 | 1<<0;       //instruction
	temp3=temp1<<24;
	
	CS_L;
	LTV350QV_Short_Delay(1);
	for(i=0;i<8;i++)                                          //send device ID
		{
			SCLK_L;
			if(temp3 & (1<<(31-i)) )              //if is H
				SDI_H;
			else 
				SDI_L;
			LTV350QV_Short_Delay(1);      //setup time
			SCLK_H;
			LTV350QV_Short_Delay(1);     //hold time
		}

	temp2=0;
	rGPCCON &=~(1<<20);      //SDI input
	for(i=0;i<16;i++)                                         //read data from the register
		{
			SCLK_L;
			LTV350QV_Short_Delay(1);
			SCLK_H;
			LTV350QV_Short_Delay(1);
			if(SDI_STATE)                     //if H
				temp2 |=1<<(15-i);
			else                                   //if L
				;
			LTV350QV_Short_Delay(1);
		}
	CS_H;

	return temp2;
}

/****************************************
*  *
****************************************/
void LTV350QV_Write(U16 index, U16 regdata)
{
	LTV350QV_SPI_Data WriteData;
	
	WriteData.Device_ID=LTV350QV_POE;  //0x1d
	WriteData.Index=index;                     //
	WriteData.Structure=regdata;

	LTV350QV_Register_Write(WriteData);
}

/****************************************
*  *power ON sequence
****************************************/
void LTV350QV_Power_ON(void)
{	
 	LTV350QV_Write(9, 0x0000);
 	Delay(150);
 	LTV350QV_Write(9, 0x4000);
 	LTV350QV_Write(10, 0x2000);
 	LTV350QV_Write(9, 0x4055);
 	Delay(550);
 	LTV350QV_Write(1, 0x409d);
 	LTV350QV_Write(2, 0x0284);
	 LTV350QV_Write(3, 0x0100);
 	LTV350QV_Write(4, 0x3000);
 	LTV350QV_Write(5, 0x4003);
 	LTV350QV_Write(6, 0x000a);
 	LTV350QV_Write(7, 0x0021);
 	LTV350QV_Write(8, 0x0c00);
 	LTV350QV_Write(10, 0x0103);
	 LTV350QV_Write(11, 0x0301);
 	LTV350QV_Write(12, 0x1f0f);
 	LTV350QV_Write(13, 0x1f0f);
 	LTV350QV_Write(14, 0x0707);
 	LTV350QV_Write(15, 0x0307);
 	LTV350QV_Write(16, 0x0707);
 	LTV350QV_Write(17, 0x0000);
 	LTV350QV_Write(18, 0x0004);
 	LTV350QV_Write(19, 0x0000);

 	Delay(200);
 	LTV350QV_Write(9, 0x4a55);
 	LTV350QV_Write(5, 0x5003);
}

/**********************************
*  *power OFF sequence
**********************************/
void LTV350QV_Powen_OFF(void)
{

	 /* GON -> 0, POC -> 0 */
	 LTV350QV_Write(9, 0x4055);
	 /* DSC -> 0 */
	 LTV350QV_Write(5, 0x4003);
 	/* VCOMG -> 0 */
 	LTV350QV_Write(10, 0x0000);

 	Delay(20);

	 /* AP[2:0] -> 000 */
	 LTV350QV_Write(9, 0x4000);
}
//*************************************************************


⌨️ 快捷键说明

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