void WriteComm(unsigned int i) { CS0=0; RD0=1; RS=0; DBL=i; WR0=0; WR0=1; CS0=1; } void WriteData(unsigned int i) { CS0=0; RD0=1; RS=1; DBL=i; WR0=0; WR0=1; CS0=1; } void LCD_Init(void) { RST=1; Delay(200); RST=0; Delay(800); RST=1; Delay(800); #if 1 WriteComm(0XF1); WriteData(0x36); WriteData(0x04); WriteData(0x00); WriteData(0x3C); WriteData(0x0F); WriteData(0x8F); WriteComm(0xF2); WriteData(0x18); WriteData(0xA3); WriteData(0x12); WriteData(0x02); WriteData(0xB2); WriteData(0x12); WriteData(0xFF); WriteData(0x10); WriteData(0x00); WriteComm(0XF7); WriteData(0xa9); WriteData(0x91); WriteData(0x2d); WriteData(0x0a); WriteData(0x4c); WriteComm(0xF8); WriteData(0x21); WriteData(0x04); WriteComm(0xF9); WriteData(0x00); WriteData(0x08); WriteComm(0x36); // Memory Access Control WriteData(0xC8); WriteComm(0x3A); // 16/18 bits WriteData(0x55); WriteComm(0xB4); WriteData(0x02); // 2-Dot Inv WriteComm(0xB7); WriteData(0x86); WriteComm(0xC0); // Vreg WriteData(0x0c); // Vreg1 WriteData(0x02); // Vreg2 WriteComm(0xC1); //Power control WriteData(0x41); //SAP[2:0];BT[3:0] WriteComm(0xC2); //Pump Freq WriteData(0x22); WriteComm(0xC5); //DC VCOM WriteData(0x00); WriteData(0x44); WriteData(0x80); WriteComm(0xB1); //Frame Rate WriteData(0xB0); WriteData(0x11); WriteComm(0x26); //Gamma curve selected WriteData(0x01); WriteComm(0xE0); WriteData(0x0F); WriteData(0x1C); WriteData(0x18); WriteData(0x0A); WriteData(0x0F); WriteData(0x08); WriteData(0x45); WriteData(0xA8); WriteData(0x34); WriteData(0x0C); WriteData(0x13); WriteData(0x05); WriteData(0x0B); WriteData(0x07); WriteData(0x00); WriteComm(0XE1); WriteData(0x0F); WriteData(0x38); WriteData(0x34); WriteData(0x0A); WriteData(0x0C); WriteData(0x03); WriteData(0x4B); WriteData(0x75); WriteData(0x3A); WriteData(0x07); WriteData(0x13); WriteData(0x00); WriteData(0x27); WriteData(0x23); WriteData(0x00); WriteComm(0xB6); WriteData(0x00); // CPU\RGB WriteData(0x42); WriteData(0x3B); WriteComm(0xB7); WriteData(0x86); WriteComm(0x11); //Exit Sleep Delay(120); WriteComm(0x29); //Display on #else WriteComm(0xF1); WriteData(0x36); WriteData(0x04); WriteData(0x00); WriteData(0x3C); WriteData(0x0F); WriteData(0x8F); WriteComm(0xF2); WriteData(0x18); WriteData(0xA3); WriteData(0x12); WriteData(0x02); WriteData(0xb2); WriteData(0x12); WriteData(0xFF); WriteData(0x10); WriteData(0x00); WriteComm(0xF8); WriteData(0x21); WriteData(0x04); WriteComm(0xF9); WriteData(0x00); WriteData(0x08); WriteComm(0x36);//set address mode WriteData(0x08); WriteComm(0x3A); //pixel format WriteData(0x55);//0x55-16bits,0x66-18bits //gamma setting 2.2 WriteComm(0xE0); //Set Gamma P WriteData(0x0F); //VP0[4:0] WriteData(0x1C); //VP1[5:0] WriteData(0x18); //VP2[5:0] WriteData(0x0A); //VP4[3:0] WriteData(0x0F); //VP6[4:0] WriteData(0x08); //VP13[3:0] WriteData(0x45); //VP20[6:0] WriteData(0xA8); //VP36[3:0];VP27[3:0] WriteData(0x34); //VP43[6:0] WriteData(0x0C); //VP50[3:0] WriteData(0x13); //0f //VP57[4:0] WriteData(0x05); //0a //VP59[3:0] WriteData(0x0B); // 1c //VP61[5:0] WriteData(0x07);// 1f //VP62[5:0] WriteData(0x00); //15 //VP63[4:0]//black WriteComm(0xE1); //Set Gamma N WriteData(0x0F); //VN0[4:0] WriteData(0x38); //VN1[5:0] WriteData(0x34); //VN2[5:0] WriteData(0x0A); //VN4[3:0] WriteData(0x0C); //VN6[4:0] WriteData(0x03); //VN13[3:0] WriteData(0x4B); //VN20[6:0] WriteData(0x75); //VN36[3:0];VN27[3:0] WriteData(0x3A); //VN43[6:0] WriteData(0x07); //VN50[3:0] WriteData(0x13); //VN57[4:0] WriteData(0x00); //VN59[3:0] WriteData(0x27); //VN61[5:0] WriteData(0x23); //VN62[5:0] WriteData(0x00); //VN63[4:0]//black WriteComm(0xB1); //Set Frame Rate WriteData(0xb0); //a0 b0 20111027 WriteData(0x11); WriteComm(0xB4); //Set 2 dot Invertion WriteData(0x02); //02 Cloumn invertion WriteComm(0xB6); // 111111 WriteData(0x02); WriteData(0x22); // 2e WriteComm(0x20); //Display Inversion OFF WriteComm(0xC0); WriteData(0x08); WriteData(0x06); WriteComm(0xC1); // WriteData(0x41); //05 20111027 WriteComm(0xC2); WriteData(0x22); WriteComm(0xB7); WriteData(0x86); WriteComm(0xC5); WriteData(0x00); WriteData(0x44); //55 WriteData(0x80); WriteComm(0x2A); //display area column setting WriteData(0x00); WriteData(0x00); WriteData(0x01); WriteData(0x3F); WriteComm(0x2B); //display area page setting WriteData(0x00); WriteData(0x00); WriteData(0x01); WriteData(0xDF); WriteComm(0x11);//exit sleep mode Delay(150); WriteComm(0x35); WriteData(0x00); WriteComm(0x44); // tearing set scanline WriteData(0x00); WriteData(0x44); WriteComm(0x29); //Display on Delay(20); WriteComm(0x2C); //memary write #endif } void BlockWrite(unsigned int Xstart,unsigned int Xend,unsigned int Ystart,unsigned int Yend) reentrant { WriteComm(0x2a); WriteData(Xstart>>8); WriteData(Xstart&0xff); WriteData(Xend>>8); WriteData(Xend&0xff); WriteComm(0x2b); WriteData(Ystart>>8); WriteData(Ystart&0xff); WriteData(Yend>>8); WriteData(Yend&0xff); WriteComm(0x2c); } void DispColor(unsigned int color) { unsigned int i,j; BlockWrite(0,COL-1,0,ROW-1); CS0=0; RS=1; RD0=1; for(i=0;i>8; WR0=0; WR0=1; DBL=color; WR0=0; WR0=1; } } CS0=1; } Main() { LCD_Init(); for(;;) { DispColor(0xf800); //RED Delay(10); DispColor(0x07e0); //GREEN Delay(10); DispColor(0x001f);//BLUE Delay(10); DispColor(0xffff); //WHITE } }