Ejemplo n.º 1
0
/*************************************************************
*	函数名称:LCD_DrawRec
*	功    能:在指定位置画矩形
*	参    数:
*				x:  窗体中X坐标中始点
*	 		 	y:  窗体中Y坐标中始点
*				Length:条形的长
*				High:	矩形的高
*				Colour:矩形的颜色 
*	返 回 值:无
*************************************************************/
void LCD_DrawRec(u16 x,u16 y,u16 Length,u16 High,u16 Colour)
{
	u16 i;	
	if(horizontal_or_vertical)			 //横屏显示时
	{	
		if(x+Length>320)
			Length=320-Length;
		if(High+y>240)
			High=240-High;
		LCD_SetPosition(x,y);
		LCD_WR_CMD(0X0044,((High+y-1)<<8)+y);
		LCD_WR_CMD(0X0046,x+Length);
	}
	else								//竖屏显示时
	{
		if(x+Length>240)
			Length=240-Length;
		if(High+y>320)
			High=320-High;
		LCD_SetPosition(x,y);
		LCD_WR_CMD(0X0044,((Length+x-1)<<8)+x);
		LCD_WR_CMD(0X0046,y+High);
	}
	LCD_WR_ADD(0x0022);
	for(i=0;i<Length*High;i++)
	{
		LCD_WR_DATA(Colour);
	}	
}
Ejemplo n.º 2
0
/*************************************************************
*	函数名称:LCD_SetPosition
*	功    能:定义显示窗体
*	参    数:
*				x0:  窗体中X坐标中较小者
*	 		 	y0:  窗体中Y坐标中较小者 
*	返 回 值:无
*************************************************************/
void LCD_SetPosition(u16 x0,u16 y0)
{
	switch (horizontal_or_vertical)
	{									 
	 	case 0:							 //水平显示的时候
		{									
			LCD_WR_CMD(0x0044,0xef00+x0); 
			LCD_WR_CMD(0x004e,x0);        //设置X方向初始值

			/*R45、R46   垂直方向的起、止点*/
			LCD_WR_CMD(0x0045,y0);	  
			LCD_WR_CMD(0x0046,0x13f);
			LCD_WR_CMD(0x004f,y0);        //设置y方向初始值		
		}break;
		case 1:							 //横屏显示的时候
		{				
			/*垂直方向,高位为终止位*/				
			LCD_WR_CMD(0x0044,0xef+y0); 
			LCD_WR_CMD(0x004e,y0);        //设置X方向初始值

			/*R45、R46   水平方向的起、止点*/
			LCD_WR_CMD(0x0045,x0);	  
			LCD_WR_CMD(0x0046,0x13f);
			LCD_WR_CMD(0x004f,x0);        //设置y方向初始值
		}break;
	}	
	LCD_WR_ADD(0x0022);			  //准备写数据	
}
Ejemplo n.º 3
0
/**********************************************************
	*	函数名称:LCD_Set_Ver
	*	功能描述:设置是水平显示还是垂直显示
	*	输入参数:无
	*	返回:无
********************************************************/
void LCD_Set_Ver(unsigned char ver)
{
	switch (ver)
	{
		case 0:	
			{
				horizontal_or_vertical=0; //水平显示
				/*********************************************************************
				*当R01为0x6b3f时RGB从S719到S0,为2b3f时从s0到s719...并且选择BGR模式***
				*********************************************************************/
				LCD_WR_CMD(0x0001,0x2b3f);     //驱动输出控制320*240  0x6B3F和0x2b3f可选
				//LCD_WR_CMD(0x0001,0x6b3f);
			
				/************************************************************************
				 *		  这里设置颜色的格式是16色还是262色,0x6000代表显示16色,
				 *		  0x4000代表显示262色,
				 *		  0x0030代表平行扫描,0x0038代表垂直扫描,详见SSD1289
				 *		  数据手册 寄存器R11 的说明。   
				************************************************************************/
				LCD_WR_CMD(0x0011,0x6030);   	//  16位色 竖屏 从左到右扫描
				//LCD_WR_CMD(0x0011,0x6038);	//16色 横屏显示		从左到右扫描
				/************************************************************************/
			}break;
		case 1:
			{
				horizontal_or_vertical=1; //垂直显示
				LCD_WR_CMD(0x0001,0x6b3f);
				LCD_WR_CMD(0x0011,0x6038);

			}break;
		default:horizontal_or_vertical=0; break; //水平显示
	}
}
Ejemplo n.º 4
0
//显示一副图片
//x,y:图片起始位置
//lenth:图片的宽度(0~240)  
//wide: 图片高度(0~320)
//*p:图片首地址        
//不带范围判断
void TFT_ShowBmp(u8 x,u16 y,u8 lenth,u16 wide,const u8 *p)
{      
    u32 size,temp; 
    //开辟窗口

	LCD_WR_CMD(0x0050, x); // Horizontal GRAM Start Address
	LCD_WR_CMD(0x0051, (u16)x+lenth-1); // Horizontal GRAM End Address
	LCD_WR_CMD(0x0052, y); // Vertical GRAM Start Address
	LCD_WR_CMD(0x0053, y+wide-1); // Vertical GRAM Start Address
	LCD_WR_REG(34);

	temp=(u32)lenth*wide*2;
	for(size=0;size<temp;size++)LCD_WR_Data_8(p[size]); 
}  
Ejemplo n.º 5
0
void TFT_Clear(u8 x,u16 y,u8 len,u16 wid)
{           
    u32 n,temp;	

	LCD_WR_CMD(0x0050, x); // Horizontal GRAM Start Address
	LCD_WR_CMD(0x0051, x+len-1); // Horizontal GRAM End Address
	LCD_WR_CMD(0x0052, y); // Vertical GRAM Start Address
	LCD_WR_CMD(0x0053, y+wid-1); // Vertical GRAM Start Address
	LCD_WR_REG(34);

	temp=(u32)len*wid;    
	for(n=0;n<temp;n++) 
	  LCD_WR_Data(BACK_COLOR);

}   
Ejemplo n.º 6
0
/*************************************************************
*	函数名称:LCD_DrawCir
*	功    能:在指定位置画圆
*	参    数:
*				x:  窗体中圆心坐标
*	 		 	y:  窗体中圆心坐标
*				r: 圆的半径
*				Colour:圆的颜色 
*	返 回 值:无
*************************************************************/
void LCD_DrawCir(u16 x,u16 y,u16 r,u16 Colour)
{
	u16 i,j;	
	if(horizontal_or_vertical)			 //横屏显示时
	{	
		if(x+r>320||r-x>0)
			LCD_PutString(19,190,"ERRO!",Red,Black);
		if(r+y>240||r-y>0)
			LCD_PutString(19,190,"ERRO!",Red,Black);

		LCD_WR_CMD(0x0044,(y+r-1)<<8); 
		LCD_WR_CMD(0x004e,y-r);        //设置X方向初始值
		
		/*R45、R46   垂直方向的起、止点*/
		LCD_WR_CMD(0x0045,x-r);	  
		LCD_WR_CMD(0x0046,x+r-1);
	   	LCD_WR_CMD(0x004f,x-r);        //设置y方向初始值

	}
	else								//竖屏显示时
	{
		if(x+r>240||r-x>0)
			LCD_PutString(19,190,"ERRO!",Red,Black);;
		if(r+y>320||r-y>0)
			LCD_PutString(19,190,"ERRO!",Red,Black);;		
		LCD_WR_CMD(0x0044,((x+r-1)<<8)+x-r); 
		LCD_WR_CMD(0x004e,x-r);        //设置X方向初始值
		
		/*R45、R46   垂直方向的起、止点*/
		LCD_WR_CMD(0x0045,y-r);	  
		LCD_WR_CMD(0x0046,y+r-1);
	   	LCD_WR_CMD(0x004f,y-r);        //设置y方向初始值
	}
	LCD_WR_ADD(0x0022);
	for(i=0;i<2*r;i++)
		for(j=0;j<2*r;j++)
		{
			if((abs(r-i)*abs(r-i)+abs(r-j)*abs(r-j))<=r*r)
				LCD_WR_DATA(Colour);
			else
			{
				
				LCD_WR_DATA(Red);
			}
				
		}		
}
Ejemplo n.º 7
0
/*************************************************************
*	函数名称:LCD_TEST_Picture1
*	功    能:显示图片
*	参    数:
*			*picture1:待显示的图片数组 
*	返 回 值:无
*	说	  明:直接把图片颜色数据烧入FLASH,实在太占空间,最好
*			  使用别的方法,比如放入SD卡,直接读BMP格式。
*			  如果这样使用时,一定要设置好待显示的图片的长宽,
*			  否则显示不出效果。
*************************************************************/
void LCD_TEST_Picture1(unsigned char const *picture1)
{
     unsigned	char i,j;
	 u16 picdata,pixH,pixL;
     if	(horizontal_or_vertical)
	 {
	 	LCD_WR_CMD(0x0044,0xef00);        	//hs		  横屏时
	 	LCD_WR_CMD(0x0046,0x00ef);        	//vs
	 }
	 else
	 {
	 	LCD_WR_CMD(0x0044,0xef00);        	//hs  竖屏时
		LCD_WR_CMD(0x0046,0x013f);       	
	 } 									 	
     
	 LCD_WR_CMD(0x004e,0x0000);        		//h	 	 
	 LCD_WR_CMD(0x045,0x0000);        		//he 
	 LCD_WR_CMD(0x004f,0x0000);        		//v     
     LCD_WR_ADD(0x0022);
     for (i=0;i<240;i++)
		for (j=0;j<180;j++)
		{
			pixH=*picture1++;
			pixL=*picture1++;
			picdata=((pixH<<8)+pixL);
			LCD_WR_DATA(picdata);                              
		}
}
Ejemplo n.º 8
0
//6*12大小
//在指定位置显示一个字符
//x:0~234
//y:0~308
//num:要显示的字符:" "--->"~"
void TFT_ShowChar(u8 x,u16 y,u8 num)
{   
    
#define MAX_CHAR_POSX 232
#define MAX_CHAR_POSY 304
    
    u8 temp;
    u8 pos,t; 

    if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;
    //设定一个字符所占的大小 
    //开辟空间
    
	LCD_WR_CMD(0x0050, x);    // Horizontal GRAM Start Address
	LCD_WR_CMD(0x0051, x+5);  // Horizontal GRAM End Address
	LCD_WR_CMD(0x0052, y);    // Vertical GRAM Start Address
	LCD_WR_CMD(0x0053, y+11); // Vertical GRAM Start Address	 
	LCD_WR_CMD(32, x);
    LCD_WR_CMD(33, y);
	LCD_WR_REG(34); 
	
	num=num-' ';
	for(pos=0;pos<12;pos++)
	{
	    temp=asc2_1206[num][pos];
	    for(t=0;t<6;t++)
	    {                 
	        if(temp&0x01)LCD_WR_Data(POINT_COLOR);
	        else LCD_WR_Data(BACK_COLOR);   
	        temp>>=1; 
	    }
	}	
}  	 
Ejemplo n.º 9
0
static inline void lcdSetCursor(JsGraphics *gfx, unsigned short x, unsigned short y) {
  x = (gfx->data.width-1)-x;

  switch( LCD_Code )
  {
     default:		 /* 0x9320 0x9325 0x9328 0x9331 0x5408 0x1505 0x0505 0x7783 0x4531 0x4535 */
          LCD_WR_CMD(0x0020, y );     
          LCD_WR_CMD(0x0021, x );     
	      break; 
#ifndef SAVE_ON_FLASH
     case SSD1298: 	 /* 0x8999 */
     case SSD1289:   /* 0x8989 */
	      LCD_WR_CMD(0x004e, y );      
          LCD_WR_CMD(0x004f, x );
	      break;  

     case HX8346A: 	 /* 0x0046 */
     case HX8347A: 	 /* 0x0047 */
     case HX8347D: 	 /* 0x0047 */
	      LCD_WR_CMD(0x02, y>>8 );                                                  
	      LCD_WR_CMD(0x03, y );  

	      LCD_WR_CMD(0x06, x>>8 );                           
	      LCD_WR_CMD(0x07, x );    
	
	      break;     
     case SSD2119:	 /* 3.5 LCD 0x9919 */
	      break; 
#endif
  }
}
Ejemplo n.º 10
0
/*************************************************************
*	函数名称:LCD_SetPos
*	功    能:定义显示窗体
*	参    数:
*				x0:  窗体中X坐标中较小者
*	 		 	y0:  窗体中Y坐标中较小者 
*	返 回 值:无
*************************************************************/
void LCD_SetPos(u16 x0,u16 y0)
{
		u16 xx;
		switch (horizontal_or_vertical)
		{									 //水平显示的时候
		 	case 0:
				{					
					if (char_or_word)	
		  				xx=(x0+15)<<8;	//若显示汉字
					else
						xx=(x0+7)<<8;	//若显示字符
					xx=xx+x0;				
					LCD_WR_CMD(0x0044,xx); 
					LCD_WR_CMD(0x004e,x0);        //设置X方向初始值
		
					/*R45、R46   垂直方向的起、止点*/
					LCD_WR_CMD(0x0045,y0);	  
					LCD_WR_CMD(0x0046,y0+15);
	   				LCD_WR_CMD(0x004f,y0);        //设置y方向初始值		
				}break;
			case 1:
				{					
					if (char_or_word)	
		  				xx=x0+15;	//显示汉字
					else
						xx=x0+7;	//若显示字符
					
					/*垂直方向,高位为终止位*/				
					LCD_WR_CMD(0x0044,(y0+15)<<8); 
					LCD_WR_CMD(0x004e,y0);        //设置X方向初始值
		
					/*R45、R46   水平方向的起、止点*/
					LCD_WR_CMD(0x0045,x0);	  
					LCD_WR_CMD(0x0046,xx);
	   				LCD_WR_CMD(0x004f,x0);        //设置y方向初始值
				}break;
		}	
		LCD_WR_ADD(0x0022);			  //准备写数据
}
Ejemplo n.º 11
0
/******************************************************************************* 
 * 函数名称: Lcd_Clear(*)
 * 功能描述: 清屏
 * 作    者: WLB
 * 输入参数: 
 * 输出参数: 
 * 返 回 值: 
 * 其它说明: 
 * 修改历史: 
 *           1. 2015-2-2  WLB  Created
 *******************************************************************************/
void Lcd_Clear(void)
{
    uint16 n = 0;
    LCD_WR_CMD(0x0000,0x0001);      //打开晶振
	LCD_WR_CMD(0x0044,0xEF00);	//指定水平扫描时的地址范围,这里默认   
	LCD_WR_CMD(0x0045,0x0000);  //指定垂直扫描时的地址范围,这里默认   
	LCD_WR_CMD(0x0046,0x013F);	//指定垂直扫描时的地址范围,这里默认
    LCD_WR_CMD(0x004e,0);        //设置X方向初始值
    LCD_WR_CMD(0x004f,0);
    LCD_WR_CMD(0x0023,0x0000);     //所有数据都可以写入GDDRAM
	LCD_WR_CMD(0x0024,0x0000);     //所有数据都可以写入GDDRAM  

    LCD_WR_ADD(0x0022);
    for(n=0;n<320*240;n++)
	{
		LCD_WR_DATA(White);
	}

    return;
}
Ejemplo n.º 12
0
//画点
//x:0~239
//y:0~319
//POINT_COLOR:此点的颜色
void TFT_DrawPoint(u8 x,u16 y)
{

    LCD_WR_CMD(0x0050, x); // Horizontal GRAM Start Address
	LCD_WR_CMD(0x0051, 0x00EF); // Horizontal GRAM End Address
	LCD_WR_CMD(0x0052, y); // Vertical GRAM Start Address
	LCD_WR_CMD(0x0053, 0x013F); // Vertical GRAM Start Address
	LCD_WR_CMD(32, x); // Horizontal GRAM Start Address		
	LCD_WR_CMD(33, y); // Vertical GRAM Start Address
	LCD_WR_REG(34);


	LCD_WR_Data(POINT_COLOR);
 
} 
Ejemplo n.º 13
0
void LCD_init_panel() {
  uint16_t DeviceCode;
  delay_ms(100);
  DeviceCode = LCD_RD_CMD(0x0000);

  if (DeviceCode == 0x4532) { // For the 2.4" LCD boards
    LCD_Code = ILI9325;
    LCD_WR_CMD(0x0000,0x0001);
    LCD_DELAY(DELAY_SHORT);

    LCD_WR_CMD(0x0015,0x0030);
    LCD_WR_CMD(0x0011,0x0040);
    LCD_WR_CMD(0x0010,0x1628);
    LCD_WR_CMD(0x0012,0x0000);
    LCD_WR_CMD(0x0013,0x104d);
    LCD_DELAY(DELAY_SHORT);
    LCD_WR_CMD(0x0012,0x0010);
    LCD_DELAY(DELAY_SHORT);
    LCD_WR_CMD(0x0010,0x2620);
    LCD_WR_CMD(0x0013,0x344d); //304d
    LCD_DELAY(DELAY_SHORT);

    LCD_WR_CMD(0x0001,0x0100);
    LCD_WR_CMD(0x0002,0x0300);
    LCD_WR_CMD(0x0003,0x1030); // ORG is 0
    LCD_WR_CMD(0x0008,0x0604);
    LCD_WR_CMD(0x0009,0x0000);
    LCD_WR_CMD(0x000A,0x0008);

    LCD_WR_CMD(0x0041,0x0002);
    LCD_WR_CMD(0x0060,0x2700);
    LCD_WR_CMD(0x0061,0x0001);
    LCD_WR_CMD(0x0090,0x0182);
    LCD_WR_CMD(0x0093,0x0001);
    LCD_WR_CMD(0x00a3,0x0010);
    LCD_DELAY(DELAY_SHORT);

    //################# void Gamma_Set(void) ####################//
        LCD_WR_CMD(0x30,0x0000);
        LCD_WR_CMD(0x31,0x0502);
        LCD_WR_CMD(0x32,0x0307);
        LCD_WR_CMD(0x33,0x0305);
        LCD_WR_CMD(0x34,0x0004);
        LCD_WR_CMD(0x35,0x0402);
        LCD_WR_CMD(0x36,0x0707);
        LCD_WR_CMD(0x37,0x0503);
        LCD_WR_CMD(0x38,0x1505);
        LCD_WR_CMD(0x39,0x1505);
        LCD_DELAY(DELAY_SHORT);

        //################## void Display_ON(void) ####################//
        LCD_WR_CMD(0x0007,0x0001);
        LCD_DELAY(DELAY_SHORT);
        LCD_WR_CMD(0x0007,0x0021);
        LCD_WR_CMD(0x0007,0x0023);
        LCD_DELAY(DELAY_SHORT);
        LCD_WR_CMD(0x0007,0x0033);
        LCD_DELAY(DELAY_SHORT);
        LCD_WR_CMD(0x0007,0x0133);
  }
  else if( DeviceCode == 0x9325 || DeviceCode == 0x9328 )
  {
    LCD_Code = ILI9325;
    LCD_WR_CMD(0x00e7,0x0010);
    LCD_WR_CMD(0x0000,0x0001);  	/* start internal osc */
    LCD_WR_CMD(0x0001,0x0100);
    LCD_WR_CMD(0x0002,0x0700); 	/* power on sequence */
    LCD_WR_CMD(0x0003,(1<<12)|(1<<5)|(1<<4)|(0<<3) ); 	/* importance */
    LCD_WR_CMD(0x0004,0x0000);
    LCD_WR_CMD(0x0008,0x0207);
    LCD_WR_CMD(0x0009,0x0000);
    LCD_WR_CMD(0x000a,0x0000); 	/* display setting */
    LCD_WR_CMD(0x000c,0x0001);	/* display setting */
    LCD_WR_CMD(0x000d,0x0000);
    LCD_WR_CMD(0x000f,0x0000);
    /* Power On sequence */
    LCD_WR_CMD(0x0010,0x0000);
    LCD_WR_CMD(0x0011,0x0007);
    LCD_WR_CMD(0x0012,0x0000);
    LCD_WR_CMD(0x0013,0x0000);
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0010,0x1590);
    LCD_WR_CMD(0x0011,0x0227);
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0012,0x009c);
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0013,0x1900);
    LCD_WR_CMD(0x0029,0x0023);
    LCD_WR_CMD(0x002b,0x000e);
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0020,0x0000);
    LCD_WR_CMD(0x0021,0x0000);
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0030,0x0007);
    LCD_WR_CMD(0x0031,0x0707);
    LCD_WR_CMD(0x0032,0x0006);
    LCD_WR_CMD(0x0035,0x0704);
    LCD_WR_CMD(0x0036,0x1f04);
    LCD_WR_CMD(0x0037,0x0004);
    LCD_WR_CMD(0x0038,0x0000);
    LCD_WR_CMD(0x0039,0x0706);
    LCD_WR_CMD(0x003c,0x0701);
    LCD_WR_CMD(0x003d,0x000f);
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0050,0x0000);
    LCD_WR_CMD(0x0051,0x00ef);
    LCD_WR_CMD(0x0052,0x0000);
    LCD_WR_CMD(0x0053,0x013f);
    LCD_WR_CMD(0x0060,0xa700);
    LCD_WR_CMD(0x0061,0x0001);
    LCD_WR_CMD(0x006a,0x0000);
    LCD_WR_CMD(0x0080,0x0000);
    LCD_WR_CMD(0x0081,0x0000);
    LCD_WR_CMD(0x0082,0x0000);
    LCD_WR_CMD(0x0083,0x0000);
    LCD_WR_CMD(0x0084,0x0000);
    LCD_WR_CMD(0x0085,0x0000);

    LCD_WR_CMD(0x0090,0x0010);
    LCD_WR_CMD(0x0092,0x0000);
    LCD_WR_CMD(0x0093,0x0003);
    LCD_WR_CMD(0x0095,0x0110);
    LCD_WR_CMD(0x0097,0x0000);
    LCD_WR_CMD(0x0098,0x0000);
    /* display on sequence */
    LCD_WR_CMD(0x0007,0x0133);

    LCD_WR_CMD(0x0020,0x0000);  /* ÐÐÊ×Ö·0 */
    LCD_WR_CMD(0x0021,0x0000);  /* ÁÐÊ×Ö·0 */
  }
  else if( DeviceCode == 0x9320 || DeviceCode == 0x9300 )
  {
    LCD_Code = ILI9320;
    LCD_WR_CMD(0x00,0x0000);
    LCD_WR_CMD(0x01,0x0100);	/* Driver Output Contral */
    LCD_WR_CMD(0x02,0x0700);	/* LCD Driver Waveform Contral */
    LCD_WR_CMD(0x03,0x1018);	/* Entry Mode Set */

    LCD_WR_CMD(0x04,0x0000);	/* Scalling Contral */
    LCD_WR_CMD(0x08,0x0202);	/* Display Contral */
    LCD_WR_CMD(0x09,0x0000);	/* Display Contral 3.(0x0000) */
    LCD_WR_CMD(0x0a,0x0000);	/* Frame Cycle Contal.(0x0000) */
    LCD_WR_CMD(0x0c,(1<<0));	/* Extern Display Interface Contral */
    LCD_WR_CMD(0x0d,0x0000);	/* Frame Maker Position */
    LCD_WR_CMD(0x0f,0x0000);	/* Extern Display Interface Contral 2. */

    delay_ms(100);  /* delay 100 ms */
    LCD_WR_CMD(0x07,0x0101);	/* Display Contral */
    delay_ms(100);  /* delay 100 ms */

    LCD_WR_CMD(0x10,(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4));	/* Power Control 1.(0x16b0)	*/
    LCD_WR_CMD(0x11,0x0007);								/* Power Control 2 */
    LCD_WR_CMD(0x12,(1<<8)|(1<<4)|(0<<0));				/* Power Control 3.(0x0138)	*/
    LCD_WR_CMD(0x13,0x0b00);								/* Power Control 4 */
    LCD_WR_CMD(0x29,0x0000);								/* Power Control 7 */

    LCD_WR_CMD(0x2b,(1<<14)|(1<<4));

    LCD_WR_CMD(0x50,0);       /* Set X Start */
    LCD_WR_CMD(0x51,239);	    /* Set X End */
    LCD_WR_CMD(0x52,0);	    /* Set Y Start */
    LCD_WR_CMD(0x53,319);	    /* Set Y End */

    LCD_WR_CMD(0x60,0x2700);	/* Driver Output Control */
    LCD_WR_CMD(0x61,0x0001);	/* Driver Output Control */
    LCD_WR_CMD(0x6a,0x0000);	/* Vertical Srcoll Control */

    LCD_WR_CMD(0x80,0x0000);	/* Display Position? Partial Display 1 */
    LCD_WR_CMD(0x81,0x0000);	/* RAM Address Start? Partial Display 1 */
    LCD_WR_CMD(0x82,0x0000);	/* RAM Address End-Partial Display 1 */
    LCD_WR_CMD(0x83,0x0000);	/* Displsy Position? Partial Display 2 */
    LCD_WR_CMD(0x84,0x0000);	/* RAM Address Start? Partial Display 2 */
    LCD_WR_CMD(0x85,0x0000);	/* RAM Address End? Partial Display 2 */

    LCD_WR_CMD(0x90,(0<<7)|(16<<0));	/* Frame Cycle Contral.(0x0013)	*/
    LCD_WR_CMD(0x92,0x0000);	/* Panel Interface Contral 2.(0x0000) */
    LCD_WR_CMD(0x93,0x0001);	/* Panel Interface Contral 3. */
    LCD_WR_CMD(0x95,0x0110);	/* Frame Cycle Contral.(0x0110)	*/
    LCD_WR_CMD(0x97,(0<<8));
    LCD_WR_CMD(0x98,0x0000);	/* Frame Cycle Contral */

    LCD_WR_CMD(0x07,0x0173);
  }
#ifndef SAVE_ON_FLASH
  else if( DeviceCode == 0x9331 )
  {
    LCD_Code = ILI9331;
    LCD_WR_CMD(0x00E7, 0x1014);
    LCD_WR_CMD(0x0001, 0x0100);   /* set SS and SM bit */
    LCD_WR_CMD(0x0002, 0x0200);   /* set 1 line inversion */
    LCD_WR_CMD(0x0003, 0x1030);   /* set GRAM write direction and BGR=1 */
    LCD_WR_CMD(0x0008, 0x0202);   /* set the back porch and front porch */
    LCD_WR_CMD(0x0009, 0x0000);   /* set non-display area refresh cycle ISC[3:0] */
    LCD_WR_CMD(0x000A, 0x0000);   /* FMARK function */
    LCD_WR_CMD(0x000C, 0x0000);   /* RGB interface setting */
    LCD_WR_CMD(0x000D, 0x0000);   /* Frame marker Position */
    LCD_WR_CMD(0x000F, 0x0000);   /* RGB interface polarity */
    /* Power On sequence */
    LCD_WR_CMD(0x0010, 0x0000);   /* SAP, BT[3:0], AP, DSTB, SLP, STB	*/
    LCD_WR_CMD(0x0011, 0x0007);   /* DC1[2:0], DC0[2:0], VC[2:0] */
    LCD_WR_CMD(0x0012, 0x0000);   /* VREG1OUT voltage	*/
    LCD_WR_CMD(0x0013, 0x0000);   /* VDV[4:0] for VCOM amplitude */
    delay_ms(200);  /* delay 200 ms */
    LCD_WR_CMD(0x0010, 0x1690);   /* SAP, BT[3:0], AP, DSTB, SLP, STB	*/
    LCD_WR_CMD(0x0011, 0x0227);   /* DC1[2:0], DC0[2:0], VC[2:0] */
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0012, 0x000C);   /* Internal reference voltage= Vci	*/
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0013, 0x0800);   /* Set VDV[4:0] for VCOM amplitude */
    LCD_WR_CMD(0x0029, 0x0011);   /* Set VCM[5:0] for VCOMH */
    LCD_WR_CMD(0x002B, 0x000B);   /* Set Frame Rate */
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0020, 0x0000);   /* GRAM horizontal Address */
    LCD_WR_CMD(0x0021, 0x0000);   /* GRAM Vertical Address */
    /* Adjust the Gamma Curve */
    LCD_WR_CMD(0x0030, 0x0000);
    LCD_WR_CMD(0x0031, 0x0106);
    LCD_WR_CMD(0x0032, 0x0000);
    LCD_WR_CMD(0x0035, 0x0204);
    LCD_WR_CMD(0x0036, 0x160A);
    LCD_WR_CMD(0x0037, 0x0707);
    LCD_WR_CMD(0x0038, 0x0106);
    LCD_WR_CMD(0x0039, 0x0707);
    LCD_WR_CMD(0x003C, 0x0402);
    LCD_WR_CMD(0x003D, 0x0C0F);
    /* Set GRAM area */
    LCD_WR_CMD(0x0050, 0x0000);   /* Horizontal GRAM Start Address */
    LCD_WR_CMD(0x0051, 0x00EF);   /* Horizontal GRAM End Address */
    LCD_WR_CMD(0x0052, 0x0000);   /* Vertical GRAM Start Address */
    LCD_WR_CMD(0x0053, 0x013F);   /* Vertical GRAM Start Address */
    LCD_WR_CMD(0x0060, 0x2700);   /* Gate Scan Line */
    LCD_WR_CMD(0x0061, 0x0001);   /*  NDL,VLE, REV */
    LCD_WR_CMD(0x006A, 0x0000);   /* set scrolling line */
    /* Partial Display Control */
    LCD_WR_CMD(0x0080, 0x0000);
    LCD_WR_CMD(0x0081, 0x0000);
    LCD_WR_CMD(0x0082, 0x0000);
    LCD_WR_CMD(0x0083, 0x0000);
    LCD_WR_CMD(0x0084, 0x0000);
    LCD_WR_CMD(0x0085, 0x0000);
    /* Panel Control */
    LCD_WR_CMD(0x0090, 0x0010);
    LCD_WR_CMD(0x0092, 0x0600);
    LCD_WR_CMD(0x0007,0x0021);
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0007,0x0061);
    delay_ms(50);  /* delay 50 ms */
    LCD_WR_CMD(0x0007,0x0133);    /* 262K color and display ON */
  }
  else if( DeviceCode == 0x9919 )
  {
    LCD_Code = SSD2119;
    /* POWER ON &RESET DISPLAY OFF */
    LCD_WR_CMD(0x28,0x0006);
    LCD_WR_CMD(0x00,0x0001);
    LCD_WR_CMD(0x10,0x0000);
    LCD_WR_CMD(0x01,0x72ef);
    LCD_WR_CMD(0x02,0x0600);
    LCD_WR_CMD(0x03,0x6a38);
    LCD_WR_CMD(0x11,0x6874);
    LCD_WR_CMD(0x0f,0x0000);    /* RAM WRITE DATA MASK */
    LCD_WR_CMD(0x0b,0x5308);    /* RAM WRITE DATA MASK */
    LCD_WR_CMD(0x0c,0x0003);
    LCD_WR_CMD(0x0d,0x000a);
    LCD_WR_CMD(0x0e,0x2e00);
    LCD_WR_CMD(0x1e,0x00be);
    LCD_WR_CMD(0x25,0x8000);
    LCD_WR_CMD(0x26,0x7800);
    LCD_WR_CMD(0x27,0x0078);
    LCD_WR_CMD(0x4e,0x0000);
    LCD_WR_CMD(0x4f,0x0000);
    LCD_WR_CMD(0x12,0x08d9);
    /* Adjust the Gamma Curve */
    LCD_WR_CMD(0x30,0x0000);
    LCD_WR_CMD(0x31,0x0104);
    LCD_WR_CMD(0x32,0x0100);
    LCD_WR_CMD(0x33,0x0305);
    LCD_WR_CMD(0x34,0x0505);
    LCD_WR_CMD(0x35,0x0305);
    LCD_WR_CMD(0x36,0x0707);
    LCD_WR_CMD(0x37,0x0300);
    LCD_WR_CMD(0x3a,0x1200);
    LCD_WR_CMD(0x3b,0x0800);
    LCD_WR_CMD(0x07,0x0033);
  }
  else if( DeviceCode == 0x1505 || DeviceCode == 0x0505 )
  {
    LCD_Code = R61505U;
    /* initializing funciton */
    LCD_WR_CMD(0xe5,0x8000);  /* Set the internal vcore voltage */
    LCD_WR_CMD(0x00,0x0001);  /* start OSC */
    LCD_WR_CMD(0x2b,0x0010);  /* Set the frame rate as 80 when the internal resistor is used for oscillator circuit */
    LCD_WR_CMD(0x01,0x0100);  /* s720  to  s1 ; G1 to G320 */
    LCD_WR_CMD(0x02,0x0700);  /* set the line inversion */
    LCD_WR_CMD(0x03,0x1018);  /* 65536 colors */
    LCD_WR_CMD(0x04,0x0000);
    LCD_WR_CMD(0x08,0x0202);  /* specify the line number of front and back porch periods respectively */
    LCD_WR_CMD(0x09,0x0000);
    LCD_WR_CMD(0x0a,0x0000);
    LCD_WR_CMD(0x0c,0x0000);  /* select  internal system clock */
    LCD_WR_CMD(0x0d,0x0000);
    LCD_WR_CMD(0x0f,0x0000);
    LCD_WR_CMD(0x50,0x0000);  /* set windows adress */
    LCD_WR_CMD(0x51,0x00ef);
    LCD_WR_CMD(0x52,0x0000);
    LCD_WR_CMD(0x53,0x013f);
    LCD_WR_CMD(0x60,0x2700);
    LCD_WR_CMD(0x61,0x0001);
    LCD_WR_CMD(0x6a,0x0000);
    LCD_WR_CMD(0x80,0x0000);
    LCD_WR_CMD(0x81,0x0000);
    LCD_WR_CMD(0x82,0x0000);
    LCD_WR_CMD(0x83,0x0000);
    LCD_WR_CMD(0x84,0x0000);
    LCD_WR_CMD(0x85,0x0000);
    LCD_WR_CMD(0x90,0x0010);
    LCD_WR_CMD(0x92,0x0000);
    LCD_WR_CMD(0x93,0x0003);
    LCD_WR_CMD(0x95,0x0110);
    LCD_WR_CMD(0x97,0x0000);
    LCD_WR_CMD(0x98,0x0000);
    /* power setting function */
    LCD_WR_CMD(0x10,0x0000);
    LCD_WR_CMD(0x11,0x0000);
    LCD_WR_CMD(0x12,0x0000);
    LCD_WR_CMD(0x13,0x0000);
    delay_ms(100);
    LCD_WR_CMD(0x10,0x17b0);
    LCD_WR_CMD(0x11,0x0004);
    delay_ms(50);
    LCD_WR_CMD(0x12,0x013e);
    delay_ms(50);
    LCD_WR_CMD(0x13,0x1f00);
    LCD_WR_CMD(0x29,0x000f);
    delay_ms(50);
    LCD_WR_CMD(0x20,0x0000);
    LCD_WR_CMD(0x21,0x0000);

    /* initializing function */
    LCD_WR_CMD(0x30,0x0204);
    LCD_WR_CMD(0x31,0x0001);
    LCD_WR_CMD(0x32,0x0000);
    LCD_WR_CMD(0x35,0x0206);
    LCD_WR_CMD(0x36,0x0600);
    LCD_WR_CMD(0x37,0x0500);
    LCD_WR_CMD(0x38,0x0505);
    LCD_WR_CMD(0x39,0x0407);
    LCD_WR_CMD(0x3c,0x0500);
    LCD_WR_CMD(0x3d,0x0503);

    /* display on */
    LCD_WR_CMD(0x07,0x0173);
  }
  else if( DeviceCode == 0x8989 )
  {
    LCD_Code = SSD1289;
    LCD_WR_CMD(0x0000,0x0001);    delay_ms(50);   /* Žò¿ªŸ§Õñ */
    LCD_WR_CMD(0x0003,0xA8A4);    delay_ms(50);
    LCD_WR_CMD(0x000C,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x000D,0x080C);    delay_ms(50);
    LCD_WR_CMD(0x000E,0x2B00);    delay_ms(50);
    LCD_WR_CMD(0x001E,0x00B0);    delay_ms(50);
    LCD_WR_CMD(0x0001,0x2B3F);    delay_ms(50);   /* Çý¶¯Êä³ö¿ØÖÆ320*240 0x2B3F */
    LCD_WR_CMD(0x0002,0x0600);    delay_ms(50);
    LCD_WR_CMD(0x0010,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x0011,0x6070);    delay_ms(50);   /* ¶šÒåÊýŸÝžñÊœ 16λɫ ºáÆÁ 0x6070 */
    LCD_WR_CMD(0x0005,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x0006,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x0016,0xEF1C);    delay_ms(50);
    LCD_WR_CMD(0x0017,0x0003);    delay_ms(50);
    LCD_WR_CMD(0x0007,0x0133);    delay_ms(50);
    LCD_WR_CMD(0x000B,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x000F,0x0000);    delay_ms(50);   /* ÉšÃ迪ʌµØÖ· */
    LCD_WR_CMD(0x0041,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x0042,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x0048,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x0049,0x013F);    delay_ms(50);
    LCD_WR_CMD(0x004A,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x004B,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x0044,0xEF00);    delay_ms(50);
    LCD_WR_CMD(0x0045,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x0046,0x013F);    delay_ms(50);
    LCD_WR_CMD(0x0030,0x0707);    delay_ms(50);
    LCD_WR_CMD(0x0031,0x0204);    delay_ms(50);
    LCD_WR_CMD(0x0032,0x0204);    delay_ms(50);
    LCD_WR_CMD(0x0033,0x0502);    delay_ms(50);
    LCD_WR_CMD(0x0034,0x0507);    delay_ms(50);
    LCD_WR_CMD(0x0035,0x0204);    delay_ms(50);
    LCD_WR_CMD(0x0036,0x0204);    delay_ms(50);
    LCD_WR_CMD(0x0037,0x0502);    delay_ms(50);
    LCD_WR_CMD(0x003A,0x0302);    delay_ms(50);
    LCD_WR_CMD(0x003B,0x0302);    delay_ms(50);
    LCD_WR_CMD(0x0023,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x0024,0x0000);    delay_ms(50);
    LCD_WR_CMD(0x0025,0x8000);    delay_ms(50);
    LCD_WR_CMD(0x004f,0);        /* ÐÐÊ×Ö·0 */
    LCD_WR_CMD(0x004e,0);        /* ÁÐÊ×Ö·0 */
  }
  else if( DeviceCode == 0x8999 )
  {
    LCD_Code = SSD1298;
    LCD_WR_CMD(0x0028,0x0006);
    LCD_WR_CMD(0x0000,0x0001);
    LCD_WR_CMD(0x0003,0xaea4);    /* power control 1---line frequency and VHG,VGL voltage */
    LCD_WR_CMD(0x000c,0x0004);    /* power control 2---VCIX2 output voltage */
    LCD_WR_CMD(0x000d,0x000c);    /* power control 3---Vlcd63 voltage */
    LCD_WR_CMD(0x000e,0x2800);    /* power control 4---VCOMA voltage VCOML=VCOMH*0.9475-VCOMA */
    LCD_WR_CMD(0x001e,0x00b5);    /* POWER CONTROL 5---VCOMH voltage */
    LCD_WR_CMD(0x0001,0x3b3f);
    LCD_WR_CMD(0x0002,0x0600);
    LCD_WR_CMD(0x0010,0x0000);
    LCD_WR_CMD(0x0011,0x6830);
    LCD_WR_CMD(0x0005,0x0000);
    LCD_WR_CMD(0x0006,0x0000);
    LCD_WR_CMD(0x0016,0xef1c);
    LCD_WR_CMD(0x0007,0x0033);    /* Display control 1 */
    /* when GON=1 and DTE=0,all gate outputs become VGL */
    /* when GON=1 and DTE=0,all gate outputs become VGH */
    /* non-selected gate wires become VGL */
    LCD_WR_CMD(0x000b,0x0000);
    LCD_WR_CMD(0x000f,0x0000);
    LCD_WR_CMD(0x0041,0x0000);
    LCD_WR_CMD(0x0042,0x0000);
    LCD_WR_CMD(0x0048,0x0000);
    LCD_WR_CMD(0x0049,0x013f);
    LCD_WR_CMD(0x004a,0x0000);
    LCD_WR_CMD(0x004b,0x0000);
    LCD_WR_CMD(0x0044,0xef00);	/* Horizontal RAM start and end address */
    LCD_WR_CMD(0x0045,0x0000);	/* Vretical RAM start address */
    LCD_WR_CMD(0x0046,0x013f);	/* Vretical RAM end address */
    LCD_WR_CMD(0x004e,0x0000);	/* set GDDRAM x address counter */
    LCD_WR_CMD(0x004f,0x0000);    /* set GDDRAM y address counter */
    /* y control */
    LCD_WR_CMD(0x0030,0x0707);
    LCD_WR_CMD(0x0031,0x0202);
    LCD_WR_CMD(0x0032,0x0204);
    LCD_WR_CMD(0x0033,0x0502);
    LCD_WR_CMD(0x0034,0x0507);
    LCD_WR_CMD(0x0035,0x0204);
    LCD_WR_CMD(0x0036,0x0204);
    LCD_WR_CMD(0x0037,0x0502);
    LCD_WR_CMD(0x003a,0x0302);
    LCD_WR_CMD(0x003b,0x0302);
    LCD_WR_CMD(0x0023,0x0000);
    LCD_WR_CMD(0x0024,0x0000);
    LCD_WR_CMD(0x0025,0x8000);
    LCD_WR_CMD(0x0026,0x7000);
    LCD_WR_CMD(0x0020,0xb0eb);
    LCD_WR_CMD(0x0027,0x007c);
  }
  else if( DeviceCode == 0x5408 )
  {
    LCD_Code = SPFD5408B;

    LCD_WR_CMD(0x0001,0x0100);	  /* Driver Output Contral Register */
    LCD_WR_CMD(0x0002,0x0700);      /* LCD Driving Waveform Contral */
    LCD_WR_CMD(0x0003,0x1030);	  /* Entry ModeÉèÖÃ */

    LCD_WR_CMD(0x0004,0x0000);	  /* Scalling Control register */
    LCD_WR_CMD(0x0008,0x0207);	  /* Display Control 2 */
    LCD_WR_CMD(0x0009,0x0000);	  /* Display Control 3 */
    LCD_WR_CMD(0x000A,0x0000);	  /* Frame Cycle Control */
    LCD_WR_CMD(0x000C,0x0000);	  /* External Display Interface Control 1 */
    LCD_WR_CMD(0x000D,0x0000);      /* Frame Maker Position */
    LCD_WR_CMD(0x000F,0x0000);	  /* External Display Interface Control 2 */
    delay_ms(50);
    LCD_WR_CMD(0x0007,0x0101);	  /* Display Control */
    delay_ms(50);
    LCD_WR_CMD(0x0010,0x16B0);      /* Power Control 1 */
    LCD_WR_CMD(0x0011,0x0001);      /* Power Control 2 */
    LCD_WR_CMD(0x0017,0x0001);      /* Power Control 3 */
    LCD_WR_CMD(0x0012,0x0138);      /* Power Control 4 */
    LCD_WR_CMD(0x0013,0x0800);      /* Power Control 5 */
    LCD_WR_CMD(0x0029,0x0009);	  /* NVM read data 2 */
    LCD_WR_CMD(0x002a,0x0009);	  /* NVM read data 3 */
    LCD_WR_CMD(0x00a4,0x0000);
    LCD_WR_CMD(0x0050,0x0000);	  /* ÉèÖòÙ×÷Ž°¿ÚµÄXÖῪʌÁÐ */
    LCD_WR_CMD(0x0051,0x00EF);	  /* ÉèÖòÙ×÷Ž°¿ÚµÄXÖáœáÊøÁÐ */
    LCD_WR_CMD(0x0052,0x0000);	  /* ÉèÖòÙ×÷Ž°¿ÚµÄYÖῪʌÐÐ */
    LCD_WR_CMD(0x0053,0x013F);	  /* ÉèÖòÙ×÷Ž°¿ÚµÄYÖáœáÊøÐÐ */

    LCD_WR_CMD(0x0060,0x2700);	  /* Driver Output Control */
    /* ÉèÖÃÆÁÄ»µÄµãÊýÒÔŒ°ÉšÃèµÄÆðÊŒÐÐ */
    LCD_WR_CMD(0x0061,0x0003);	  /* Driver Output Control */
    LCD_WR_CMD(0x006A,0x0000);	  /* Vertical Scroll Control */

    LCD_WR_CMD(0x0080,0x0000);	  /* Display Position šC Partial Display 1 */
    LCD_WR_CMD(0x0081,0x0000);	  /* RAM Address Start šC Partial Display 1 */
    LCD_WR_CMD(0x0082,0x0000);	  /* RAM address End - Partial Display 1 */
    LCD_WR_CMD(0x0083,0x0000);	  /* Display Position šC Partial Display 2 */
    LCD_WR_CMD(0x0084,0x0000);	  /* RAM Address Start šC Partial Display 2 */
    LCD_WR_CMD(0x0085,0x0000);	  /* RAM address End šC Partail Display2 */
    LCD_WR_CMD(0x0090,0x0013);	  /* Frame Cycle Control */
    LCD_WR_CMD(0x0092,0x0000); 	  /* Panel Interface Control 2 */
    LCD_WR_CMD(0x0093,0x0003);	  /* Panel Interface control 3 */
    LCD_WR_CMD(0x0095,0x0110);	  /* Frame Cycle Control */
    LCD_WR_CMD(0x0007,0x0173);
  }
  else if( DeviceCode == 0x4531 )
  {
    LCD_Code = LGDP4531;
    /* Setup display */
    LCD_WR_CMD(0x00,0x0001);
    LCD_WR_CMD(0x10,0x0628);
    LCD_WR_CMD(0x12,0x0006);
    LCD_WR_CMD(0x13,0x0A32);
    LCD_WR_CMD(0x11,0x0040);
    LCD_WR_CMD(0x15,0x0050);
    LCD_WR_CMD(0x12,0x0016);
    delay_ms(50);
    LCD_WR_CMD(0x10,0x5660);
    delay_ms(50);
    LCD_WR_CMD(0x13,0x2A4E);
    LCD_WR_CMD(0x01,0x0100);
    LCD_WR_CMD(0x02,0x0300);
    LCD_WR_CMD(0x03,0x1030);
    LCD_WR_CMD(0x08,0x0202);
    LCD_WR_CMD(0x0A,0x0000);
    LCD_WR_CMD(0x30,0x0000);
    LCD_WR_CMD(0x31,0x0402);
    LCD_WR_CMD(0x32,0x0106);
    LCD_WR_CMD(0x33,0x0700);
    LCD_WR_CMD(0x34,0x0104);
    LCD_WR_CMD(0x35,0x0301);
    LCD_WR_CMD(0x36,0x0707);
    LCD_WR_CMD(0x37,0x0305);
    LCD_WR_CMD(0x38,0x0208);
    LCD_WR_CMD(0x39,0x0F0B);
    delay_ms(50);
    LCD_WR_CMD(0x41,0x0002);
    LCD_WR_CMD(0x60,0x2700);
    LCD_WR_CMD(0x61,0x0001);
    LCD_WR_CMD(0x90,0x0119);
    LCD_WR_CMD(0x92,0x010A);
    LCD_WR_CMD(0x93,0x0004);
    LCD_WR_CMD(0xA0,0x0100);
    delay_ms(50);
    LCD_WR_CMD(0x07,0x0133);
    delay_ms(50);
    LCD_WR_CMD(0xA0,0x0000);
  }
  else if( DeviceCode == 0x4535 )
  {
    LCD_Code = LGDP4535;
    LCD_WR_CMD(0x15, 0x0030); 	 /* Set the internal vcore voltage */
    LCD_WR_CMD(0x9A, 0x0010); 	 /* Start internal OSC */
    LCD_WR_CMD(0x11, 0x0020);	     /* set SS and SM bit */
    LCD_WR_CMD(0x10, 0x3428);	     /* set 1 line inversion */
    LCD_WR_CMD(0x12, 0x0002);	     /* set GRAM write direction and BGR=1 */
    LCD_WR_CMD(0x13, 0x1038);	     /* Resize register */
    delay_ms(40);
    LCD_WR_CMD(0x12, 0x0012);	     /* set the back porch and front porch */
    delay_ms(40);
    LCD_WR_CMD(0x10, 0x3420);	     /* set non-display area refresh cycle ISC[3:0] */
    LCD_WR_CMD(0x13, 0x3045);	     /* FMARK function */
    delay_ms(70);
    LCD_WR_CMD(0x30, 0x0000);      /* RGB interface setting */
    LCD_WR_CMD(0x31, 0x0402);	     /* Frame marker Position */
    LCD_WR_CMD(0x32, 0x0307);      /* RGB interface polarity */
    LCD_WR_CMD(0x33, 0x0304);      /* SAP, BT[3:0], AP, DSTB, SLP, STB */
    LCD_WR_CMD(0x34, 0x0004);      /* DC1[2:0], DC0[2:0], VC[2:0] */
    LCD_WR_CMD(0x35, 0x0401);      /* VREG1OUT voltage */
    LCD_WR_CMD(0x36, 0x0707);      /* VDV[4:0] for VCOM amplitude */
    LCD_WR_CMD(0x37, 0x0305);      /* SAP, BT[3:0], AP, DSTB, SLP, STB */
    LCD_WR_CMD(0x38, 0x0610);      /* DC1[2:0], DC0[2:0], VC[2:0] */
    LCD_WR_CMD(0x39, 0x0610);      /* VREG1OUT voltage */
    LCD_WR_CMD(0x01, 0x0100);      /* VDV[4:0] for VCOM amplitude */
    LCD_WR_CMD(0x02, 0x0300);      /* VCM[4:0] for VCOMH */
    LCD_WR_CMD(0x03, 0x1030);      /* GRAM horizontal Address */
    LCD_WR_CMD(0x08, 0x0808);      /* GRAM Vertical Address */
    LCD_WR_CMD(0x0A, 0x0008);
    LCD_WR_CMD(0x60, 0x2700);	     /* Gate Scan Line */
    LCD_WR_CMD(0x61, 0x0001);	     /* NDL,VLE, REV */
    LCD_WR_CMD(0x90, 0x013E);
    LCD_WR_CMD(0x92, 0x0100);
    LCD_WR_CMD(0x93, 0x0100);
    LCD_WR_CMD(0xA0, 0x3000);
    LCD_WR_CMD(0xA3, 0x0010);
    LCD_WR_CMD(0x07, 0x0001);
    LCD_WR_CMD(0x07, 0x0021);
    LCD_WR_CMD(0x07, 0x0023);
    LCD_WR_CMD(0x07, 0x0033);
    LCD_WR_CMD(0x07, 0x0133);
  }
  else if( DeviceCode == 0x0047 )
  {
    LCD_Code = HX8347D;
    /* Start Initial Sequence */
    LCD_WR_CMD(0xEA,0x00);
    LCD_WR_CMD(0xEB,0x20);
    LCD_WR_CMD(0xEC,0x0C);
    LCD_WR_CMD(0xED,0xC4);
    LCD_WR_CMD(0xE8,0x40);
    LCD_WR_CMD(0xE9,0x38);
    LCD_WR_CMD(0xF1,0x01);
    LCD_WR_CMD(0xF2,0x10);
    LCD_WR_CMD(0x27,0xA3);
    /* GAMMA SETTING */
    LCD_WR_CMD(0x40,0x01);
    LCD_WR_CMD(0x41,0x00);
    LCD_WR_CMD(0x42,0x00);
    LCD_WR_CMD(0x43,0x10);
    LCD_WR_CMD(0x44,0x0E);
    LCD_WR_CMD(0x45,0x24);
    LCD_WR_CMD(0x46,0x04);
    LCD_WR_CMD(0x47,0x50);
    LCD_WR_CMD(0x48,0x02);
    LCD_WR_CMD(0x49,0x13);
    LCD_WR_CMD(0x4A,0x19);
    LCD_WR_CMD(0x4B,0x19);
    LCD_WR_CMD(0x4C,0x16);
    LCD_WR_CMD(0x50,0x1B);
    LCD_WR_CMD(0x51,0x31);
    LCD_WR_CMD(0x52,0x2F);
    LCD_WR_CMD(0x53,0x3F);
    LCD_WR_CMD(0x54,0x3F);
    LCD_WR_CMD(0x55,0x3E);
    LCD_WR_CMD(0x56,0x2F);
    LCD_WR_CMD(0x57,0x7B);
    LCD_WR_CMD(0x58,0x09);
    LCD_WR_CMD(0x59,0x06);
    LCD_WR_CMD(0x5A,0x06);
    LCD_WR_CMD(0x5B,0x0C);
    LCD_WR_CMD(0x5C,0x1D);
    LCD_WR_CMD(0x5D,0xCC);
    /* Power Voltage Setting */
    LCD_WR_CMD(0x1B,0x18);
    LCD_WR_CMD(0x1A,0x01);
    LCD_WR_CMD(0x24,0x15);
    LCD_WR_CMD(0x25,0x50);
    LCD_WR_CMD(0x23,0x8B);
    LCD_WR_CMD(0x18,0x36);
    LCD_WR_CMD(0x19,0x01);
    LCD_WR_CMD(0x01,0x00);
    LCD_WR_CMD(0x1F,0x88);
    delay_ms(50);
    LCD_WR_CMD(0x1F,0x80);
    delay_ms(50);
    LCD_WR_CMD(0x1F,0x90);
    delay_ms(50);
    LCD_WR_CMD(0x1F,0xD0);
    delay_ms(50);
    LCD_WR_CMD(0x17,0x05);
    LCD_WR_CMD(0x36,0x00);
    LCD_WR_CMD(0x28,0x38);
    delay_ms(50);
    LCD_WR_CMD(0x28,0x3C);
  }
  else if( DeviceCode == 0x7783 )
  {
    LCD_Code = ST7781;
    /* Start Initial Sequence */
    LCD_WR_CMD(0x00FF,0x0001);
    LCD_WR_CMD(0x00F3,0x0008);
    LCD_WR_CMD(0x0001,0x0100);
    LCD_WR_CMD(0x0002,0x0700);
    LCD_WR_CMD(0x0003,0x1030);
    LCD_WR_CMD(0x0008,0x0302);
    LCD_WR_CMD(0x0008,0x0207);
    LCD_WR_CMD(0x0009,0x0000);
    LCD_WR_CMD(0x000A,0x0000);
    LCD_WR_CMD(0x0010,0x0000);
    LCD_WR_CMD(0x0011,0x0005);
    LCD_WR_CMD(0x0012,0x0000);
    LCD_WR_CMD(0x0013,0x0000);
    delay_ms(50);
    LCD_WR_CMD(0x0010,0x12B0);
    delay_ms(50);
    LCD_WR_CMD(0x0011,0x0007);
    delay_ms(50);
    LCD_WR_CMD(0x0012,0x008B);
    delay_ms(50);
    LCD_WR_CMD(0x0013,0x1700);
    delay_ms(50);
    LCD_WR_CMD(0x0029,0x0022);
    LCD_WR_CMD(0x0030,0x0000);
    LCD_WR_CMD(0x0031,0x0707);
    LCD_WR_CMD(0x0032,0x0505);
    LCD_WR_CMD(0x0035,0x0107);
    LCD_WR_CMD(0x0036,0x0008);
    LCD_WR_CMD(0x0037,0x0000);
    LCD_WR_CMD(0x0038,0x0202);
    LCD_WR_CMD(0x0039,0x0106);
    LCD_WR_CMD(0x003C,0x0202);
    LCD_WR_CMD(0x003D,0x0408);
    delay_ms(50);
    LCD_WR_CMD(0x0050,0x0000);
    LCD_WR_CMD(0x0051,0x00EF);
    LCD_WR_CMD(0x0052,0x0000);
    LCD_WR_CMD(0x0053,0x013F);
    LCD_WR_CMD(0x0060,0xA700);
    LCD_WR_CMD(0x0061,0x0001);
    LCD_WR_CMD(0x0090,0x0033);
    LCD_WR_CMD(0x002B,0x000B);
    LCD_WR_CMD(0x0007,0x0133);
  }
  else	/* special ID */
  {
    uint16_t DeviceCode2 = LCD_RD_CMD(0x67);
    if( DeviceCode2 == 0x0046 )
    {
      LCD_Code = HX8346A;

      /* Gamma for CMO 3.2 */
      LCD_WR_CMD(0x46,0x94);
      LCD_WR_CMD(0x47,0x41);
      LCD_WR_CMD(0x48,0x00);
      LCD_WR_CMD(0x49,0x33);
      LCD_WR_CMD(0x4a,0x23);
      LCD_WR_CMD(0x4b,0x45);
      LCD_WR_CMD(0x4c,0x44);
      LCD_WR_CMD(0x4d,0x77);
      LCD_WR_CMD(0x4e,0x12);
      LCD_WR_CMD(0x4f,0xcc);
      LCD_WR_CMD(0x50,0x46);
      LCD_WR_CMD(0x51,0x82);
      /* 240x320 window setting */
      LCD_WR_CMD(0x02,0x00);
      LCD_WR_CMD(0x03,0x00);
      LCD_WR_CMD(0x04,0x01);
      LCD_WR_CMD(0x05,0x3f);
      LCD_WR_CMD(0x06,0x00);
      LCD_WR_CMD(0x07,0x00);
      LCD_WR_CMD(0x08,0x00);
      LCD_WR_CMD(0x09,0xef);

      /* Display Setting */
      LCD_WR_CMD(0x01,0x06);
      LCD_WR_CMD(0x16,0xC8);	/* MY(1) MX(1) MV(0) */

      LCD_WR_CMD(0x23,0x95);
      LCD_WR_CMD(0x24,0x95);
      LCD_WR_CMD(0x25,0xff);

      LCD_WR_CMD(0x27,0x02);
      LCD_WR_CMD(0x28,0x02);
      LCD_WR_CMD(0x29,0x02);
      LCD_WR_CMD(0x2a,0x02);
      LCD_WR_CMD(0x2c,0x02);
      LCD_WR_CMD(0x2d,0x02);

      LCD_WR_CMD(0x3a,0x01);
      LCD_WR_CMD(0x3b,0x01);
      LCD_WR_CMD(0x3c,0xf0);
      LCD_WR_CMD(0x3d,0x00);
      delay_ms(2);
      LCD_WR_CMD(0x35,0x38);
      LCD_WR_CMD(0x36,0x78);

      LCD_WR_CMD(0x3e,0x38);

      LCD_WR_CMD(0x40,0x0f);
      LCD_WR_CMD(0x41,0xf0);
      /* Power Supply Setting */
      LCD_WR_CMD(0x19,0x49);
      LCD_WR_CMD(0x93,0x0f);
      delay_ms(1);
      LCD_WR_CMD(0x20,0x30);
      LCD_WR_CMD(0x1d,0x07);
      LCD_WR_CMD(0x1e,0x00);
      LCD_WR_CMD(0x1f,0x07);
      /* VCOM Setting for CMO 3.2¡± Panel */
      LCD_WR_CMD(0x44,0x4d);
      LCD_WR_CMD(0x45,0x13);
      delay_ms(1);
      LCD_WR_CMD(0x1c,0x04);
      delay_ms(2);
      LCD_WR_CMD(0x43,0x80);
      delay_ms(5);
      LCD_WR_CMD(0x1b,0x08);
      delay_ms(4);
      LCD_WR_CMD(0x1b,0x10);
      delay_ms(4);
      /* Display ON Setting */
      LCD_WR_CMD(0x90,0x7f);
      LCD_WR_CMD(0x26,0x04);
      delay_ms(4);
      LCD_WR_CMD(0x26,0x24);
      LCD_WR_CMD(0x26,0x2c);
      delay_ms(4);
      LCD_WR_CMD(0x26,0x3c);
      /* Set internal VDDD voltage */
      LCD_WR_CMD(0x57,0x02);
      LCD_WR_CMD(0x55,0x00);
      LCD_WR_CMD(0x57,0x00);
    }
    if( DeviceCode2 == 0x0047 )
    {
      LCD_Code = HX8347A;
      LCD_WR_CMD(0x0042,0x0008);
      /* Gamma setting */
      LCD_WR_CMD(0x0046,0x00B4);
      LCD_WR_CMD(0x0047,0x0043);
      LCD_WR_CMD(0x0048,0x0013);
      LCD_WR_CMD(0x0049,0x0047);
      LCD_WR_CMD(0x004A,0x0014);
      LCD_WR_CMD(0x004B,0x0036);
      LCD_WR_CMD(0x004C,0x0003);
      LCD_WR_CMD(0x004D,0x0046);
      LCD_WR_CMD(0x004E,0x0005);
      LCD_WR_CMD(0x004F,0x0010);
      LCD_WR_CMD(0x0050,0x0008);
      LCD_WR_CMD(0x0051,0x000a);
      /* Window Setting */
      LCD_WR_CMD(0x0002,0x0000);
      LCD_WR_CMD(0x0003,0x0000);
      LCD_WR_CMD(0x0004,0x0000);
      LCD_WR_CMD(0x0005,0x00EF);
      LCD_WR_CMD(0x0006,0x0000);
      LCD_WR_CMD(0x0007,0x0000);
      LCD_WR_CMD(0x0008,0x0001);
      LCD_WR_CMD(0x0009,0x003F);
      delay_ms(10);
      LCD_WR_CMD(0x0001,0x0006);
      LCD_WR_CMD(0x0016,0x00C8);
      LCD_WR_CMD(0x0023,0x0095);
      LCD_WR_CMD(0x0024,0x0095);
      LCD_WR_CMD(0x0025,0x00FF);
      LCD_WR_CMD(0x0027,0x0002);
      LCD_WR_CMD(0x0028,0x0002);
      LCD_WR_CMD(0x0029,0x0002);
      LCD_WR_CMD(0x002A,0x0002);
      LCD_WR_CMD(0x002C,0x0002);
      LCD_WR_CMD(0x002D,0x0002);
      LCD_WR_CMD(0x003A,0x0001);
      LCD_WR_CMD(0x003B,0x0001);
      LCD_WR_CMD(0x003C,0x00F0);
      LCD_WR_CMD(0x003D,0x0000);
      delay_ms(20);
      LCD_WR_CMD(0x0035,0x0038);
      LCD_WR_CMD(0x0036,0x0078);
      LCD_WR_CMD(0x003E,0x0038);
      LCD_WR_CMD(0x0040,0x000F);
      LCD_WR_CMD(0x0041,0x00F0);
      LCD_WR_CMD(0x0038,0x0000);
      /* Power Setting */
      LCD_WR_CMD(0x0019,0x0049);
      LCD_WR_CMD(0x0093,0x000A);
      delay_ms(10);
      LCD_WR_CMD(0x0020,0x0020);
      LCD_WR_CMD(0x001D,0x0003);
      LCD_WR_CMD(0x001E,0x0000);
      LCD_WR_CMD(0x001F,0x0009);
      LCD_WR_CMD(0x0044,0x0053);
      LCD_WR_CMD(0x0045,0x0010);
      delay_ms(10);
      LCD_WR_CMD(0x001C,0x0004);
      delay_ms(20);
      LCD_WR_CMD(0x0043,0x0080);
      delay_ms(5);
      LCD_WR_CMD(0x001B,0x000a);
      delay_ms(40);
      LCD_WR_CMD(0x001B,0x0012);
      delay_ms(40);
      /* Display On Setting */
      LCD_WR_CMD(0x0090,0x007F);
      LCD_WR_CMD(0x0026,0x0004);
      delay_ms(40);
      LCD_WR_CMD(0x0026,0x0024);
      LCD_WR_CMD(0x0026,0x002C);
      delay_ms(40);
      LCD_WR_CMD(0x0070,0x0008);
      LCD_WR_CMD(0x0026,0x003C);
      LCD_WR_CMD(0x0057,0x0002);
      LCD_WR_CMD(0x0055,0x0000);
      LCD_WR_CMD(0x0057,0x0000);
    } else {
      jsiConsolePrintf("Unknown LCD code %d %d\n", DeviceCode, DeviceCode2);
    }
  }
#endif				
  delay_ms(50);   /* delay 50 ms */

}
Ejemplo n.º 14
0
static inline void lcdSetWindow(JsGraphics *gfx, unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2) {
  // x1>=x2  and y1>=y2
  x2 = (gfx->data.width-1)-x2;
  x1 = (gfx->data.width-1)-x1;
  switch (LCD_Code) {
     default:
        LCD_WR_CMD(0x50, y1);
        LCD_WR_CMD(0x51, y2);
        LCD_WR_CMD(0x52, x2);
        LCD_WR_CMD(0x53, x1);
        break;
#ifndef SAVE_ON_FLASH
     case SSD1289:   /* 0x8989 */
        LCD_WR_CMD(0x44, y1 | (y2<<8));
        LCD_WR_CMD(0x45, x2);
        LCD_WR_CMD(0x46, x1);
        break;
     case HX8346A: 
     case HX8347A: 
     case HX8347D: 
        LCD_WR_CMD(0x02,y1>>8);
        LCD_WR_CMD(0x03,y1);
        LCD_WR_CMD(0x04,y2>>8);
        LCD_WR_CMD(0x05,y2);
        LCD_WR_CMD(0x06,x2>>8);
        LCD_WR_CMD(0x07,x2);
        LCD_WR_CMD(0x08,x1>>8); 
        LCD_WR_CMD(0x09,x1); 
        break;
#endif
  }
}
Ejemplo n.º 15
0
/**********************************************************
	*	函数名称:Lcd_Init
	*	功能描述:先写入REG再写入数据
	*	输入参数:无
	*	返回:无
********************************************************/
void LCD_MyInit(u8 ver)
{
	unsigned long n;       
	LCD_Set_Ver(ver);					//0为水平显示

	LCD_WR_CMD(0x0000,0x0001);
    LCD_WR_CMD(0x0000,0x0001);      //打开晶振
	LCD_WR_CMD(0x0003,0x6664);      //0xA8A4//  调整功耗,使用默认值
	LCD_WR_CMD(0x000C,0x0000);      //电源控制   5.1V  	   ,好像没什么用
	LCD_WR_CMD(0x000D,0x080C);      //Vlcd63振幅的放大倍数 ,好像没什么用 
	LCD_WR_CMD(0x000E,0x2B00);      //Vlcd63使用外部参考电压  
	LCD_WR_CMD(0x001E,0x00b0);      //不重新设置LCD的复位电平    b0  
    	
	LCD_WR_CMD(0x0002,0x0600);     //LCD Driving Waveform control
	LCD_WR_CMD(0x0010,0x0000);     //禁止睡眠模式
	
	/*这两个为比较寄存器??在读写数据时进行比较,不能在外部显示模式下使用***/
	LCD_WR_CMD(0x0005,0x0000);     
	LCD_WR_CMD(0x0006,0x0000);     	
	/************************************************************************/
	LCD_WR_CMD(0x0016,0xEF1C);     	//设置像素,这里使用最高 240(POR)像素,30个(hsync)延迟
	LCD_WR_CMD(0x0017,0x0003);     	//开始时 1个(hsync)延迟,结束时4个延迟
	LCD_WR_CMD(0x0007,0x0233);      //0x0233  //控制是否启动LCD     
	LCD_WR_CMD(0x000B,0x0000);     	//画面、周期控制
	LCD_WR_CMD(0x000F,0x0000);      //扫描开始地址,从G0开始,即原点
	/***********************************************************************/
	/**********这两个寄存器好像是设置显示效果的,如切换效果*****************/
	/**********这里不使用效果,所以全为0,以后可以试试**********************/
	LCD_WR_CMD(0x0041,0x0000);     
	LCD_WR_CMD(0x0042,0x0000);    
	/***********************************************************************/    
	LCD_WR_CMD(0x0048,0x0000); 	//指定开始时的扫描位置,这里默认    
	LCD_WR_CMD(0x0049,0x013F);  //指定结束时的扫描位置,这里默认   
	LCD_WR_CMD(0x004A,0x0000);  //指定二次开始时的扫描位置,这里默认   
	LCD_WR_CMD(0x004B,0x0000);	//指定二次结束时的扫描位置,这里默认  
	        
	LCD_WR_CMD(0x0044,0xEF00);	//指定水平扫描时的地址范围,这里默认   
	LCD_WR_CMD(0x0045,0x0000);  //指定垂直扫描时的地址范围,这里默认   
	LCD_WR_CMD(0x0046,0x013F);	//指定垂直扫描时的地址范围,这里默认
	/*******************************************************************        
	*************这些寄存器在数据手册里说是调整电压输出*****************
	*************好像是调整其灰度值的。这里使用默认值******************/
	LCD_WR_CMD(0x0030,0x0707);  
	LCD_WR_CMD(0x0031,0x0204);  
	LCD_WR_CMD(0x0032,0x0204);	     
	LCD_WR_CMD(0x0033,0x0502);     
	LCD_WR_CMD(0x0034,0x0507);     
	LCD_WR_CMD(0x0035,0x0204);     
	LCD_WR_CMD(0x0036,0x0204);     
	LCD_WR_CMD(0x0037,0x0502);     
	LCD_WR_CMD(0x003A,0x0302);     
	LCD_WR_CMD(0x003B,0x0302);
	/*****************************************************************/        
	LCD_WR_CMD(0x0023,0x0000);     //所有数据都可以写入GDDRAM
	LCD_WR_CMD(0x0024,0x0000);     //所有数据都可以写入GDDRAM  

	//LCD_WR_CMD(0x0025,0x8000);	   	//好像数据手册里没有提到这个寄存器
	
	//GRAM写入数据,白色清屏*/							   
	LCD_WR_ADD(0x0022);			   //准备写数据
	for(n=0;n<320*240;n++)
	{
		LCD_WR_DATA(White);
	}
}	
Ejemplo n.º 16
0
/*** 说    明:图片取模格式为水平扫描,16位颜色模式,取模软件img2LCD ***/
static void LCD_DrawPicture(uint16_t StartX, uint16_t StartY, uint8_t Dir, uint8_t *Pic)
{
	uint16_t temp;
	uint16_t x = 0, y = 0;
	uint32_t i = 8, len = 0;
	
	x = ((uint16_t)(Pic[2] << 8) + Pic[3]) - 1;		//从图像数组里取出图像的宽度
	y = ((uint16_t)(Pic[4] << 8) + Pic[5]) - 1;		//从图像数组里取出图像的高度
	
	if (Dir == 0)
	{
		LCD_WR_CMD(0x0003, 0x1030);			//图像显示方向为左上起,行递增,列增加
		LCD_WR_CMD(0x0210, StartX);			//水平显示区起始地址 0
		LCD_WR_CMD(0x0211, StartX + x);		//水平显示区结束地址 239
		LCD_WR_CMD(0x0212, StartY);			//垂直显示区起始地址 0
		LCD_WR_CMD(0x0213, StartY + y);		//垂直显示区结束地址 399

		LCD_WR_CMD(0x0200, StartX);			//水平显示区地址 0
  	LCD_WR_CMD(0x0201, StartY);			//垂直显示区地址 0
	}
	else if (Dir == 1)
	{
		LCD_WR_CMD(0x0003, 0x1018);   				//图像显示方向为左下起,行递增,列递减
	    LCD_WR_CMD(0x0210, StartY); 				//水平显示区起始地址 0
	  	LCD_WR_CMD(0x0211, StartY + y);           	//水平显示区结束地址 239
	  	LCD_WR_CMD(0x0212, StartX);     			//垂直显示区起始地址 0
	  	LCD_WR_CMD(0x0213, StartX + x);         	//垂直显示区结束地址 239
	  
	  	LCD_WR_CMD(0x0200, StartY);		          	//水平显示区地址
	  	LCD_WR_CMD(0x0201, StartX + x);		    	//垂直显示区地址
	}
	
	LCD_WR_REG(0x0202);				//写数据到显示区

	len = 2 * (x + 1) * (y + 1);	//计算出图像所占的字节数
	while (i < (len + 8))			//从图像数组的第9位开始递增
	{
		temp = (uint16_t)((Pic[i] << 8) + Pic[i+1]);	//16位总线,需要一次发送2个字节的数据
		LCD_WR_Data(temp);								//将取出的16位像素数据送入显示区
		i += 2;											//取模位置加2,以为获取下一个像素数据
	}	
}
Ejemplo n.º 17
0
//初始化函数
void LCD_Init(void)
{
    unsigned long  colori=0;
    LCD_GPIO_Init();
    FSMC_LCD_Init();
	LCD_Rst();	 

	LCD_WR_CMD(0x00E3, 0x3008); // Set internal timing
	LCD_WR_CMD(0x00E7, 0x0012); // Set internal timing
	LCD_WR_CMD(0x00EF, 0x1231); // Set internal timing
	LCD_WR_CMD(0x0000, 0x0001); // Start Oscillation
	LCD_WR_CMD(0x0001, 0x0100); // set SS and SM bit
	LCD_WR_CMD(0x0002, 0x0700); // set 1 line inversion

	LCD_WR_CMD(0x0003, 0x1030); // set GRAM write direction and BGR=0,262K colors,1 transfers/pixel.
	LCD_WR_CMD(0x0004, 0x0000); // Resize register
	LCD_WR_CMD(0x0008, 0x0202); // set the back porch and front porch
	LCD_WR_CMD(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]
	LCD_WR_CMD(0x000A, 0x0000); // FMARK function
	LCD_WR_CMD(0x000C, 0x0000); // RGB interface setting
	LCD_WR_CMD(0x000D, 0x0000); // Frame marker Position
	LCD_WR_CMD(0x000F, 0x0000); // RGB interface polarity
    //Power On sequence 
	LCD_WR_CMD(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
	LCD_WR_CMD(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
	LCD_WR_CMD(0x0012, 0x0000); // VREG1OUT voltage
	LCD_WR_CMD(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
	Lcd_Delay(200); // Dis-charge capacitor power voltage
	LCD_WR_CMD(0x0010, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB
	LCD_WR_CMD(0x0011, 0x0227); // R11h=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0]
	Lcd_Delay(50); // Delay 50ms
	LCD_WR_CMD(0x0012, 0x001C); // External reference voltage= Vci;
	Lcd_Delay(50); // Delay 50ms
	LCD_WR_CMD(0x0013, 0x1800); // R13=1200 when R12=009D;VDV[4:0] for VCOM amplitude
	LCD_WR_CMD(0x0029, 0x001C); // R29=000C when R12=009D;VCM[5:0] for VCOMH
	LCD_WR_CMD(0x002B, 0x000D); // Frame Rate = 91Hz
	Lcd_Delay(50); // Delay 50ms
	LCD_WR_CMD(0x0020, 0x0000); // GRAM horizontal Address
	LCD_WR_CMD(0x0021, 0x0000); // GRAM Vertical Address
    // ----------- Adjust the Gamma Curve ----------//
	LCD_WR_CMD(0x0030, 0x0007);
	LCD_WR_CMD(0x0031, 0x0302);
	LCD_WR_CMD(0x0032, 0x0105);
	LCD_WR_CMD(0x0035, 0x0206);
	LCD_WR_CMD(0x0036, 0x0808);
	LCD_WR_CMD(0x0037, 0x0206);
	LCD_WR_CMD(0x0038, 0x0504);
	LCD_WR_CMD(0x0039, 0x0007);
	LCD_WR_CMD(0x003C, 0x0105);
	LCD_WR_CMD(0x003D, 0x0808);
    //------------------ Set GRAM area ---------------//
	LCD_WR_CMD(0x0050, 0x0000); // Horizontal GRAM Start Address
	LCD_WR_CMD(0x0051, 0x00EF); // Horizontal GRAM End Address
	LCD_WR_CMD(0x0052, 0x0000); // Vertical GRAM Start Address
	LCD_WR_CMD(0x0053, 0x013F); // Vertical GRAM Start Address
	LCD_WR_CMD(0x0060, 0xA700); // Gate Scan Line
	LCD_WR_CMD(0x0061, 0x0001); // NDL,VLE, REV
	LCD_WR_CMD(0x006A, 0x0000); // set scrolling line
    //-------------- Partial Display Control ---------//
	LCD_WR_CMD(0x0080, 0x0000);
	LCD_WR_CMD(0x0081, 0x0000);
	LCD_WR_CMD(0x0082, 0x0000);
	LCD_WR_CMD(0x0083, 0x0000);
	LCD_WR_CMD(0x0084, 0x0000);
	LCD_WR_CMD(0x0085, 0x0000);
    //-------------- Panel Control -------------------//
	LCD_WR_CMD(0x0090, 0x0010);
	LCD_WR_CMD(0x0092, 0x0000);
	LCD_WR_CMD(0x0093, 0x0003);
	LCD_WR_CMD(0x0095, 0x0110);
	LCD_WR_CMD(0x0097, 0x0000);
	LCD_WR_CMD(0x0098, 0x0000);
	LCD_WR_CMD(0x0007, 0x0133); // 262K color and display ON
  	


    LCD_WR_CMD(32, 0);
    LCD_WR_CMD(33, 0x013F);
	*(__IO uint16_t *) (Bank1_LCD_C)= 34;
	for(colori=0;colori<76800;colori++)
	{
	  LCD_WR_Data(BACK_COLOR);
	}
			
}
Ejemplo n.º 18
0
/*** 3寸TFT(R61509)初始化函数 ***/
void LCD_Init(void)
{
	uint16_t i = 0;

	GPIO_ResetBits(GPIOE, GPIO_Pin_1);
	Delay(0x1AFFF);
	GPIO_SetBits(GPIOE, GPIO_Pin_1);
	Delay(0x1AFFF);
	
	LCD_WR_CMD(0x0000, 0x00000);
	LCD_WR_CMD(0x0000, 0x00000);
	LCD_WR_CMD(0x0000, 0x00000);
	LCD_WR_CMD(0x0000, 0x00000);
	
	LCD_WR_CMD(0x0400, 0x06200);
	LCD_WR_CMD(0x0008, 0x00808);
	LCD_WR_CMD(0x0300, 0x00C00);	//gamma
	LCD_WR_CMD(0x0301, 0x05A0B);
	LCD_WR_CMD(0x0302, 0x00906);
	LCD_WR_CMD(0x0303, 0x01017);
	LCD_WR_CMD(0x0304, 0x02300);
	LCD_WR_CMD(0x0305, 0x01700);
	LCD_WR_CMD(0x0306, 0x06309);
	LCD_WR_CMD(0x0307, 0x00C09);
	LCD_WR_CMD(0x0308, 0x0100C);
	LCD_WR_CMD(0x0309, 0x02232);
	LCD_WR_CMD(0x0010, 0x00016);	//69.5Hz
	LCD_WR_CMD(0x0011, 0x00101);
	LCD_WR_CMD(0x0012, 0x00000);
	LCD_WR_CMD(0x0013, 0x00001);
	LCD_WR_CMD(0x0100, 0x00330);	//BT,AP
	LCD_WR_CMD(0x0101, 0x00237);	//DC0,DC1,VC
	LCD_WR_CMD(0x0103, 0x00F00);	//VDV
	LCD_WR_CMD(0x0280, 0x06100);	//VCM
	LCD_WR_CMD(0x0102, 0x0C1B0);	//VRH,VCMR,PSON,PON

	LCD_WR_CMD(0x0001, 0x00100);
	LCD_WR_CMD(0x0002, 0x00100);
	LCD_WR_CMD(0x0003, 0x01030);
	LCD_WR_CMD(0x0009, 0x00001);
	LCD_WR_CMD(0x000C, 0x00000);
	LCD_WR_CMD(0x0090, 0x08000);
	LCD_WR_CMD(0x000F, 0x00000);
	LCD_WR_CMD(0x0210, 0x00000);
	LCD_WR_CMD(0x0211, 0x000EF);
	LCD_WR_CMD(0x0212, 0x00000);
	LCD_WR_CMD(0x0213, 0x0018F);	//432=1AF, 400=18F
	LCD_WR_CMD(0x0500, 0x00000);
	LCD_WR_CMD(0x0501, 0x00000);
	LCD_WR_CMD(0x0502, 0x0005F);
	LCD_WR_CMD(0x0401, 0x00001);
	LCD_WR_CMD(0x0404, 0x00000);

	LCD_WR_CMD(0x0007, 0x00100);	//BASEE

	LCD_WR_CMD(0x0200, 0x00000);
	LCD_WR_CMD(0x0201, 0x00000);
    LCD_WR_CMD(0x0200, 0x00000);
    LCD_WR_CMD(0x0201, 0x00000);
	
	Bank1_LCD_C = 0X0202;			//准备写数据显示区
	for (i=0; i<9600; i++)
	{
		LCD_WR_Data(0xFFFF);		//用黑色清屏
	}			
}