/************************************************************* * 函数名称: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); } }
/************************************************************* * 函数名称: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); //准备写数据 }
/********************************************************** * 函数名称: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; //水平显示 } }
//显示一副图片 //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]); }
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); }
/************************************************************* * 函数名称: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); } } }
/************************************************************* * 函数名称: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); } }
//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; } } }
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 } }
/************************************************************* * 函数名称: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); //准备写数据 }
/******************************************************************************* * 函数名称: 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; }
//画点 //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); }
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 */ }
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 } }
/********************************************************** * 函数名称: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); } }
/*** 说 明:图片取模格式为水平扫描,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,以为获取下一个像素数据 } }
//初始化函数 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); } }
/*** 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); //用黑色清屏 } }