#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; //////////////////////////////////// void delay(int value) { int i,j; for(i=0;i<=value;i++) {for(j=0;j<=200;j++);} } //////////////////////////////////// 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); } void seng_cmd_dat(int cmd,int dataa) { LCD_WRITE_CMD(cmd); LCD_WRITE_DATA(dataa); } //////////////////////init///////////////////////////// void lcd_init(void) { RESET(); // ///*********8347*************// seng_cmd_dat(0x0046,0x00A4); seng_cmd_dat(0x0047,0x0053); seng_cmd_dat(0x0048,0x0000); seng_cmd_dat(0x0049,0x0044); seng_cmd_dat(0x004a,0x0004); seng_cmd_dat(0x004b,0x0067); seng_cmd_dat(0x004c,0x0033); seng_cmd_dat(0x004d,0x0077); seng_cmd_dat(0x004e,0x0012); seng_cmd_dat(0x004f,0x004C); seng_cmd_dat(0x0050,0x0046); seng_cmd_dat(0x0051,0x0044); //240x320 window setting // seng_cmd_dat(0x0002,0x0000); // Column address start2 // seng_cmd_dat(0x0003,0x0000); // Column address start1 // seng_cmd_dat(0x0004,0x0000); // Column address end2 // seng_cmd_dat(0x0005,0x00ef); // Column address end1 // seng_cmd_dat(0x0006,0x0000); // Row address start2 // seng_cmd_dat(0x0007,0x0000); // Row address start1 // seng_cmd_dat(0x0008,0x0001); // Row address end2 // seng_cmd_dat(0x0009,0x003f); // Row address end1 // Display Setting seng_cmd_dat(0x0001,0x0006); // IDMON=0, INVON=1, NORON=1, PTLON=0 seng_cmd_dat(0x0016,0x0008); // MY=0, MX=0, MV=0, ML=1, BGR=0, TEON=0 横屏0xa8 ,竖屏 00C8 seng_cmd_dat(0x0023,0x0095); // N_DC=1001 0101 seng_cmd_dat(0x0024,0x0095); // PI_DC=1001 0101 seng_cmd_dat(0x0025,0x00FF); // I_DC=1111 1111 seng_cmd_dat(0x0027,0x0002); // N_BP=0000 0010 seng_cmd_dat(0x0028,0x0002); // N_FP=0000 0010 seng_cmd_dat(0x0029,0x0002); // PI_BP=0000 0010 seng_cmd_dat(0x002a,0x0002); // PI_FP=0000 0010 seng_cmd_dat(0x002C,0x0002); // I_BP=0000 0010 seng_cmd_dat(0x002d,0x0002); // I_FP=0000 0010 seng_cmd_dat(0x003a,0x0001); // N_RTN=0000, N_NW=001 0001 seng_cmd_dat(0x003b,0x0000); // P_RTN=0000, P_NW=001 seng_cmd_dat(0x003c,0x00f0); // I_RTN=1111, I_NW=000 seng_cmd_dat(0x003d,0x0000); // DIV=00 delay(1); seng_cmd_dat(0x0035,0x0038); // EQS=38h seng_cmd_dat(0x0036,0x0078); // EQP=78h seng_cmd_dat(0x003E,0x0038); // SON=38h seng_cmd_dat(0x0040,0x000F); // GDON=0Fh seng_cmd_dat(0x0041,0x00F0); // GDOFF // Power Supply Setting seng_cmd_dat(0x0019,0x0049); // CADJ=0100, CUADJ=100, OSD_EN=1 ,60Hz seng_cmd_dat(0x0093,0x000F); // RADJ=1111, 100% delay(1); seng_cmd_dat(0x0020,0x0040); // BT=0100 seng_cmd_dat(0x001D,0x0007); // VC1=111 0007 seng_cmd_dat(0x001E,0x0000); // VC3=000 seng_cmd_dat(0x001F,0x0004); // VRH=0011 //VCOM SETTING seng_cmd_dat(0x0044,0x004D); // VCM=101 0000 4D seng_cmd_dat(0x0045,0x000E); // VDV=1 0001 0011 delay(1); seng_cmd_dat(0x001C,0x0004); // AP=100 delay(2); seng_cmd_dat(0x001B,0x0018); // GASENB=0, PON=0, DK=1, XDK=0, VLCD_TRI=0, STB=0 delay(1); seng_cmd_dat(0x001B,0x0010); // GASENB=0, PON=1, DK=0, XDK=0, VLCD_TRI=0, STB=0 delay(1); seng_cmd_dat(0x0043,0x0080); //set VCOMG=1 delay(2); // Display ON Setting seng_cmd_dat(0x0090,0x007F); // SAP=0111 1111 seng_cmd_dat(0x0026,0x0004); //GON=0, DTE=0, D=01 delay(1); seng_cmd_dat(0x0026,0x0024); //GON=1, DTE=0, D=01 seng_cmd_dat(0x0026,0x002C); //GON=1, DTE=0, D=11 delay(1); seng_cmd_dat(0x0026,0x003C); //GON=1, DTE=1, D=11 // INTERNAL REGISTER SETTING seng_cmd_dat(0x0057,0x0002); // TEST_Mode=1: into TEST mode seng_cmd_dat(0x0095,0x0001); // SET DISPLAY CLOCK AND PUMPING CLOCK TO SYNCHRONIZE seng_cmd_dat(0x0057,0x0000); // TEST_Mode=0: exit TEST mode //seng_cmd_dat(0x0021,0x0000); LCD_WRITE_CMD(0x0022); } /////////////////////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(0x00); //Row Start LCD_WRITE_CMD(0x08);LCD_WRITE_DATA(0x01); LCD_WRITE_CMD(0x09);LCD_WRITE_DATA(0x3f); //Row End LCD_WRITE_CMD(0x22); delay(140); } void set_point_8347(unsigned int x,unsigned int y) { seng_cmd_dat(0x0002,x>>8); // Column address start2 seng_cmd_dat(0x0003,x); // Column address start1 // seng_cmd_dat(0x0004,x>>8); // Column address end2 // seng_cmd_dat(0x0005,x); // Column address end1 seng_cmd_dat(0x0006,y>>8); // Row address start2 seng_cmd_dat(0x0007,y); // Row address start1 // seng_cmd_dat(0x0008,y>>8); // Row address end2 // seng_cmd_dat(0x0009,y); // Row address end1 LCD_WRITE_CMD(0x0022);//LCD_WriteCMD(GRAMWR); } ///////////////////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); LCD_BRUSH(0x07e0); delay(4000); LCD_BRUSH(0x001f); delay(4000); draw_pic(); while(1); }