#include #define DataH P2 #define DataL P0 sbit TFT_CS = P1^0; sbit RES = P1^4; sbit RS = P1^1; sbit WRB = P1^2; sbit RDB = P1^3; void delay(int value) { int i,j; for(i=0;i<=value;i++) {for(j=0;j<=500;j++);} } void LCD_WRITE_CMD(char cmd) { RS = 0; RDB = 1; WRB = 1; TFT_CS = 0; DataH = cmd; WRB = 0; WRB = 1; TFT_CS = 1; } void LCD_WRITE_DATA(char dat) { RS = 1; RDB = 1; WRB = 1; TFT_CS = 0; DataH = dat; WRB = 0; WRB = 1; TFT_CS = 1; } void reset(void) { RES = 1; delay(50); RES = 0; delay(200); RES = 1; delay(500); } void lcd_init(void) { reset(); LCD_WRITE_CMD(0x01);// Software Reset delay(20); LCD_WRITE_CMD(0x11);//Sleep Out delay(120); LCD_WRITE_CMD(0xc2);//Power Control 3 LCD_WRITE_DATA(0x05);//APA2 APA1 APA0 Large LCD_WRITE_DATA(0x00);//Step-up cycle in Booster circuit 1 //Step-up cycle in Booster circuit 2,3 LCD_WRITE_CMD(0xc3);//Power Control 4 LCD_WRITE_DATA(0x05);//APA2 APA1 APA0 Large LCD_WRITE_DATA(0x00);//Step-up cycle in Booster circuit 1 //Step-up cycle in Booster circuit 2,3 LCD_WRITE_CMD(0xc4);//Power Control 5 LCD_WRITE_DATA(0x05);//APA2 APA1 APA0 Large LCD_WRITE_DATA(0x00);//Step-up cycle in Booster circuit 1 //Step-up cycle in Booster circuit 2,3 LCD_WRITE_CMD(0x3A); LCD_WRITE_DATA(0x55); LCD_WRITE_CMD(0xD7); LCD_WRITE_DATA(0x40); LCD_WRITE_DATA(0xE0); LCD_WRITE_CMD(0xFD); LCD_WRITE_DATA(0x06); LCD_WRITE_DATA(0x11); LCD_WRITE_CMD(0xFA); LCD_WRITE_DATA(0x38); LCD_WRITE_DATA(0x20); LCD_WRITE_DATA(0x1C); LCD_WRITE_DATA(0x10); LCD_WRITE_DATA(0x37); LCD_WRITE_DATA(0x12); LCD_WRITE_DATA(0x22); LCD_WRITE_DATA(0x1E); LCD_WRITE_CMD(0xC0);//Set GVDD LCD_WRITE_DATA(0x05); LCD_WRITE_CMD(0xC5);//Set Vcom LCD_WRITE_DATA(0x20); LCD_WRITE_DATA(0x3D); LCD_WRITE_CMD(0xC7);//Set VCOM-OFFSET LCD_WRITE_DATA(0xA9);// 可以微调改善flicker LCD_WRITE_CMD(0x36);//Memory data access control LCD_WRITE_DATA(0xC8);//MY MX MV ML RGB MH 0 0 ////Gamma///////////////////////////////////////////// LCD_WRITE_CMD(0xE0);//E0H Set LCD_WRITE_DATA(0x23); LCD_WRITE_DATA(0x23); LCD_WRITE_DATA(0x24); LCD_WRITE_DATA(0x02); LCD_WRITE_DATA(0x08); LCD_WRITE_DATA(0x0F); LCD_WRITE_DATA(0x35); LCD_WRITE_DATA(0x7B); LCD_WRITE_DATA(0x43); LCD_WRITE_DATA(0x0E); LCD_WRITE_DATA(0x1F); LCD_WRITE_DATA(0x25); LCD_WRITE_DATA(0x10); LCD_WRITE_DATA(0x16); LCD_WRITE_DATA(0x31); LCD_WRITE_CMD(0xE1);//E1H Set LCD_WRITE_DATA(0x0D); LCD_WRITE_DATA(0x28); LCD_WRITE_DATA(0x2E); LCD_WRITE_DATA(0x0B); LCD_WRITE_DATA(0x11); LCD_WRITE_DATA(0x12); LCD_WRITE_DATA(0x3E); LCD_WRITE_DATA(0x59); LCD_WRITE_DATA(0x4C); LCD_WRITE_DATA(0x10); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x2B); LCD_WRITE_DATA(0x1B); LCD_WRITE_DATA(0x1B); LCD_WRITE_DATA(0x1B); LCD_WRITE_CMD(0x29);//display on LCD_WRITE_CMD(0x2c);//Memory Write } void LCD_SET_WIN(void) { LCD_WRITE_CMD(0x2A); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0xef); LCD_WRITE_CMD(0x2B); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x01); LCD_WRITE_DATA(0x3f); LCD_WRITE_CMD(0x002C); } void LCD_BRUSH(int color) { int i,j; LCD_WRITE_CMD(0x002C); for(i=0;i<240;i++) { for(j=0;j<320;j++) { LCD_WRITE_DATA(color>>8); LCD_WRITE_DATA(color); } } } unsigned char LCD_ID(unsigned int dat) //读取id { unsigned char temp,DL,DH; LCD_WRITE_CMD(dat); temp=0; P2=0xff; ///////////////////////////////////////// RS=1; TFT_CS=0; RDB=0; delay(5); DH=P2; //1byte RDB=1; /////////////////// RDB=0; DL=P2; //2byte 0X38; RDB=1; /////////////////// RDB=0; DH=P2; //3byte RDB=1; /////////////////// RDB=0; DH=P2; //4byte RDB=1; TFT_CS=1; temp=DL; return temp; } 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(0x04); UART_send_data(id); UART_send_data(0x55); lcd_init(); LCD_SET_WIN(); while(1) { LCD_BRUSH(0xffff); delay(1000); LCD_BRUSH(0x0000); delay(1000); LCD_BRUSH(0xf7de); delay(1000); LCD_BRUSH(0x001f); delay(1000); LCD_BRUSH(0x051f); delay(1000); LCD_BRUSH(0xf800); delay(1000); LCD_BRUSH(0xf81f); delay(1000); LCD_BRUSH(0x07e0); delay(1000); LCD_BRUSH(0x7fff); delay(1000); LCD_BRUSH(0xffe0); delay(1000); } }