#include #include "img.h" #define DataH P2 //数据高8位 #define DataL P0 sbit LCD_CS = P1^0; sbit LCD_RESET = P1^4; sbit LCD_RS = P1^1; sbit LCD_WR = P1^2; sbit LCD_RD = P1^3; sbit KEY = P3^3; //////////////////////////////////// void delay(int value) { int i,j; for(i=0;i<=value;i++) {for(j=0;j<=200;j++);} } void Keypress() { while(KEY) { delay(10);} } //////////////////////////////////// void LCD_WRITE_CMD(int cmd) { LCD_CS = 0; LCD_RS = 0; LCD_RD = 1; LCD_WR = 1; DataH = cmd>>8; //高8位 DataL = cmd; //低8位 LCD_WR = 0; LCD_WR = 1; LCD_CS = 1; } /////////////////////////////////// void LCD_WRITE_DATA(int dat) { LCD_CS = 0; LCD_RS = 1; LCD_RD = 1; LCD_WR = 1; DataH = dat>>8; //高8位 DataL = dat; //低8位 LCD_WR = 0; LCD_WR = 1; LCD_CS = 1; } void LCD_WRITE_DATA_16(char dat,char dat1) { LCD_CS = 0; LCD_RS = 1; LCD_RD = 1; LCD_WR = 1; DataH = dat; //高8位 DataL = dat1; //低8位 LCD_WR = 0; LCD_WR = 1; LCD_CS = 1; } void LCD(int reg,int dat) { LCD_WRITE_CMD(reg); LCD_WRITE_DATA(dat); } //////////////////////////////////// void RESET(void) { LCD_RESET = 1; delay(10); LCD_RESET = 0; delay(20); LCD_RESET = 1; delay(150); } //////////////////////init///////////////////////////// void lcd_init(void) { RESET(); // ///*********8347*************// LCD_WRITE_CMD(0x2E);LCD_WRITE_DATA(0x79);delay(1); // LCD_WRITE_CMD(0xEE);LCD_WRITE_DATA(0x0C);delay(1); // //Driving ability Setting LCD_WRITE_CMD(0xEA);LCD_WRITE_DATA(0x00);delay(1); //PTBA[15:8] LCD_WRITE_CMD(0xEB);LCD_WRITE_DATA(0x20);delay(1); //PTBA[7:0] LCD_WRITE_CMD(0xEC);LCD_WRITE_DATA(0x08);delay(1); //STBA[15:8] LCD_WRITE_CMD(0xED);LCD_WRITE_DATA(0xC4);delay(1); //STBA[7:0] LCD_WRITE_CMD(0xE8);LCD_WRITE_DATA(0x40);delay(1); //OPON[7:0] LCD_WRITE_CMD(0xE9);LCD_WRITE_DATA(0x38);delay(1); //OPON1[7:0] LCD_WRITE_CMD(0xF1);LCD_WRITE_DATA(0x01); delay(1); //OTPS1B LCD_WRITE_CMD(0xF2);LCD_WRITE_DATA(0x10);delay(1); //GEN LCD_WRITE_CMD(0x27);LCD_WRITE_DATA(0xA3);delay(1); // delay(10); //Gamma 2.2 Setting LCD_WRITE_CMD(0x40);LCD_WRITE_DATA(0x00);delay(1); // LCD_WRITE_CMD(0x41);LCD_WRITE_DATA(0x00);delay(1); // LCD_WRITE_CMD(0x42);LCD_WRITE_DATA(0x01);delay(1); // LCD_WRITE_CMD(0x43);LCD_WRITE_DATA(0x12);delay(1); // LCD_WRITE_CMD(0x44);LCD_WRITE_DATA(0x10); delay(1);// LCD_WRITE_CMD(0x45);LCD_WRITE_DATA(0x26);delay(1); // LCD_WRITE_CMD(0x46);LCD_WRITE_DATA(0x08);delay(1); // LCD_WRITE_CMD(0x47);LCD_WRITE_DATA(0x54);delay(1); // LCD_WRITE_CMD(0x48);LCD_WRITE_DATA(0x02);delay(1); // LCD_WRITE_CMD(0x49);LCD_WRITE_DATA(0x15);delay(1); // LCD_WRITE_CMD(0x4A);LCD_WRITE_DATA(0x19);delay(1); // LCD_WRITE_CMD(0x4B);LCD_WRITE_DATA(0x19);delay(1); // LCD_WRITE_CMD(0x4C);LCD_WRITE_DATA(0x16);delay(1); // LCD_WRITE_CMD(0x50);LCD_WRITE_DATA(0x19);delay(1); // LCD_WRITE_CMD(0x51);LCD_WRITE_DATA(0x2F); delay(1);// LCD_WRITE_CMD(0x52);LCD_WRITE_DATA(0x2D);delay(1); // LCD_WRITE_CMD(0x53);LCD_WRITE_DATA(0x3E);delay(1); // LCD_WRITE_CMD(0x54);LCD_WRITE_DATA(0x3F);delay(1); // LCD_WRITE_CMD(0x55);LCD_WRITE_DATA(0x3F);delay(1); // LCD_WRITE_CMD(0x56);LCD_WRITE_DATA(0x2B);delay(1); // LCD_WRITE_CMD(0x57);LCD_WRITE_DATA(0x77);delay(1); // LCD_WRITE_CMD(0x58);LCD_WRITE_DATA(0x09);delay(1); // LCD_WRITE_CMD(0x59);LCD_WRITE_DATA(0x06);delay(1); // LCD_WRITE_CMD(0x5A);LCD_WRITE_DATA(0x06);delay(1); // LCD_WRITE_CMD(0x5B);LCD_WRITE_DATA(0x0A);delay(1); // LCD_WRITE_CMD(0x5C);LCD_WRITE_DATA(0x1D); delay(1);// LCD_WRITE_CMD(0x5D);LCD_WRITE_DATA(0xCC);delay(1); // delay(10); //Power Voltage Setting LCD_WRITE_CMD(0x1B);LCD_WRITE_DATA(0x1B); delay(1); //VRH=4.65V LCD_WRITE_CMD(0x1A);LCD_WRITE_DATA(0x01);delay(1); //BT (VGH~15V);,(VGL~-10V),(DDVDH~5V) LCD_WRITE_CMD(0x24);LCD_WRITE_DATA(0x2F);delay(1); //VMH(VCOM High voltage ~3.2V) LCD_WRITE_CMD(0x25);LCD_WRITE_DATA(0x57);delay(1); //VML(VCOM Low voltage -1.2V) delay(10); //****VCOM offset**/// LCD_WRITE_CMD(0x23);LCD_WRITE_DATA(0x79);delay(1); //for Flicker adjust //can reload from OTP delay(10); //Power on Setting LCD_WRITE_CMD(0x18);LCD_WRITE_DATA(0x36); delay(1); //I/P_RADJ,N/P_RADJ, Normal mode 75Hz LCD_WRITE_CMD(0x19);LCD_WRITE_DATA(0x01); delay(1); //OSC_EN='1', start Osc LCD_WRITE_CMD(0x01);LCD_WRITE_DATA(0x00);delay(1); //DP_STB='0', out deep sleep LCD_WRITE_CMD(0x1F);LCD_WRITE_DATA(0x88);delay(1);//GAS=1, VOMG=00, PON=0, DK=1, XDK=0, DVDH_TRI=0, STB=0 delay(10); LCD_WRITE_CMD(0x1F);LCD_WRITE_DATA(0x80);delay(1);// GAS=1, VOMG=00, PON=0, DK=0, XDK=0, DVDH_TRI=0, STB=0 delay(10); LCD_WRITE_CMD(0x1F);LCD_WRITE_DATA(0x90);delay(1);// GAS=1, VOMG=00, PON=1, DK=0, XDK=0, DVDH_TRI=0, STB=0 delay(10); LCD_WRITE_CMD(0x1F);LCD_WRITE_DATA(0xD0);delay(1);// GAS=1, VOMG=10, PON=1, DK=0, XDK=0, DDVDH_TRI=0, STB=0 delay(10); //262k/65k color selection LCD_WRITE_CMD(0x17);LCD_WRITE_DATA(0x05); delay(1); //default 0x06 262k color // 0x05 65k color delay(10); //SET PANEL LCD_WRITE_CMD(0x36);LCD_WRITE_DATA(0x00);delay(1); //SS_P, GS_P,REV_P,BGR_P delay(10); //Display ON Setting LCD_WRITE_CMD(0x28);LCD_WRITE_DATA(0x38);delay(1); //GON=1, DTE=1, D=1000 delay(10); LCD_WRITE_CMD(0x28);LCD_WRITE_DATA(0x3C);delay(1); //GON=1, DTE=1, D=1100 //Set GRAM Area LCD_WRITE_CMD(0x02);LCD_WRITE_DATA(0x00); delay(1); LCD_WRITE_CMD(0x03);LCD_WRITE_DATA(0x00); delay(1); //Column Start LCD_WRITE_CMD(0x04);LCD_WRITE_DATA(0x00);delay(1); LCD_WRITE_CMD(0x05);LCD_WRITE_DATA(0xEF); delay(1); //Column End LCD_WRITE_CMD(0x06);LCD_WRITE_DATA(0x00); delay(1); LCD_WRITE_CMD(0x07);LCD_WRITE_DATA(0x00); delay(1); //Row Start LCD_WRITE_CMD(0x08);LCD_WRITE_DATA(0x01); delay(1); LCD_WRITE_CMD(0x09);LCD_WRITE_DATA(0x3F); delay(1); //Row End LCD_WRITE_CMD(0x22); delay(1); //Start GRAM write delay(150); } /////////////////////set win///////////////////////////////// void LCD_SET_WIN(void) { LCD_WRITE_CMD(0x02);LCD_WRITE_DATA(0x00); LCD_WRITE_CMD(0x03);LCD_WRITE_DATA(0x00); //Column Start LCD_WRITE_CMD(0x04);LCD_WRITE_DATA(0x00); LCD_WRITE_CMD(0x05);LCD_WRITE_DATA(0XEF); //Column End LCD_WRITE_CMD(0x06);LCD_WRITE_DATA(0x00); LCD_WRITE_CMD(0x07);LCD_WRITE_DATA(0x01); //Row Start LCD_WRITE_CMD(0x08);LCD_WRITE_DATA(0x3F); LCD_WRITE_CMD(0x09);LCD_WRITE_DATA(200); //Row End LCD_WRITE_CMD(0x22); delay(140); } ///////////////////color/////////////////////////////////// void LCD_BRUSH(int color) { int i,j; LCD_WRITE_CMD(0x22); delay(40); for(i=0;i<240;i++) { for(j=0;j<320;j++) { // LCD_WRITE_DATA(color>>8); // LCD_WRITE_DATA(color); LCD_WRITE_DATA(color); } } } void draw_pic() { int i=0,m=0,n=0; for(m=0;m<320;m++) //刷图片 { for(n=0;n<240;n++) { if(i == 19200) {i = 0;} LCD_WRITE_DATA_16(image[i*2+1],image[i*2]); // LCD_WRITE_DATA(image[i*2]); i++; } } } ////////////////////id////////////////////////////////// unsigned char LCD_ID(unsigned int dat) { unsigned char DH,DL; LCD_WRITE_CMD(dat); P2=0xff; P0=0xff; LCD_RS=1; LCD_CS=0; LCD_RD=0; DH=DataH; DL=DataL; LCD_RD=1; LCD_CS=1; return DL; } ////////////////////usart////////////////////////////// void UART_init(void) { SCON=0x40; TMOD=0x20; TH1=0xF3; //波特率计算256-11059200/(12*32*9600) TL1=0xF3; TR1=1; } void UART_send_data(unsigned char str) { SBUF=str; while(!TI); TI=0; } ////////////////////////////////////////////////////////// void main(void) { unsigned char id; UART_init(); RESET(); id = LCD_ID(0x00); UART_send_data(id); lcd_init(); LCD_SET_WIN(); LCD_BRUSH(0x00); delay(4000); Keypress(); LCD_BRUSH(0xf800); LCD_BRUSH(0x07e0); LCD_BRUSH(0x001f); //Keypress(); draw_pic(); while(1); }