#include #include<16x8.h> #include"Touch.h" #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; sbit KEY = P3^3; struct pix_ Tp_pix; 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 delayms(int value) { int i,j; for(i=0;i<=value;i++) {for(j=0;j<=500;j++);} } void LCD_WRITE_CMD(unsigned int cmd) { RS = 0; // RDB = 1; // WRB = 1; TFT_CS = 0; DataH = cmd>>8; WRB = 0; //; WRB = 1; DataH = cmd; WRB = 0; ; WRB = 1; TFT_CS = 1; } void LCD_WRITE_DATA(unsigned int dat) { RS = 1; // RDB = 1; // WRB = 1; TFT_CS = 0; DataH = dat>>8; WRB = 0; //; WRB = 1; DataH = dat; WRB = 0; ; WRB = 1; TFT_CS = 1; } void LCD_WRITE_DATA2(unsigned char dat1,unsigned char dat2) { RS = 1; // RDB = 1; // WRB = 1; TFT_CS = 0; DataH = dat1; WRB = 0; //; WRB = 1; DataH = dat2; WRB = 0; WRB = 1; TFT_CS = 1; } //void seng_cmd_dat(int cmd,int dataa) // { // LCD_WRITE_CMD(cmd); // LCD_WRITE_DATA(dataa); // } void reset(void) { RES = 1; delayms(50); RES = 0; delayms(200); RES = 1; delayms(500); } void seng_cmd_dat(unsigned int cmd,unsigned int dat) { LCD_WRITE_CMD(cmd); LCD_WRITE_DATA(dat); } void lcd_init(void) { reset(); //ft1509 //LCD_WRITE_CMD(0x00); LCD_WRITE_DATA(0x0001); // LCD_WRITE_CMD(0x2B); LCD_WRITE_DATA(0x0002); // delayms(20); // LCD_WRITE_CMD(0x07); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x12); LCD_WRITE_DATA(0x0000); // delayms(20); // // LCD_WRITE_CMD(0x60); LCD_WRITE_DATA(0x3500); // delayms(20); // LCD_WRITE_CMD(0x08); LCD_WRITE_DATA(0x0405); // LCD_WRITE_CMD(0x91); LCD_WRITE_DATA(0x0600); // LCD_WRITE_CMD(0x92); LCD_WRITE_DATA(0x0700); // LCD_WRITE_CMD(0x98); LCD_WRITE_DATA(0x0747); // LCD_WRITE_CMD(0x01); LCD_WRITE_DATA(0x0000); //LCD_WRITE_CMD(0x0030);LCD_WRITE_DATA(0x0002); //LCD_WRITE_CMD(0x0031);LCD_WRITE_DATA(0x0606); //LCD_WRITE_CMD(0x0032);LCD_WRITE_DATA(0x0607); //LCD_WRITE_CMD(0x0035);LCD_WRITE_DATA(0x0001); //LCD_WRITE_CMD(0x0036);LCD_WRITE_DATA(0x0911); //LCD_WRITE_CMD(0x0037);LCD_WRITE_DATA(0x0605); //LCD_WRITE_CMD(0x0038);LCD_WRITE_DATA(0x0504); //LCD_WRITE_CMD(0x0039);LCD_WRITE_DATA(0x0707); //LCD_WRITE_CMD(0x003c);LCD_WRITE_DATA(0x0101); //LCD_WRITE_CMD(0x003d);LCD_WRITE_DATA(0x1a16); // // // LCD_WRITE_CMD(0x10); LCD_WRITE_DATA(0x5aC0); // LCD_WRITE_CMD(0x11); LCD_WRITE_DATA(0x0247); // delayms(20); // LCD_WRITE_CMD(0x12); LCD_WRITE_DATA(0x111a); // LCD_WRITE_CMD(0x13); LCD_WRITE_DATA(0x1303); // LCD_WRITE_CMD(0x29); LCD_WRITE_DATA(0x0016); // // delayms(20); // LCD_WRITE_CMD(0x01); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x02); LCD_WRITE_DATA(0x0700); // LCD_WRITE_CMD(0x03); LCD_WRITE_DATA(0x1030); // LCD_WRITE_CMD(0x61); LCD_WRITE_DATA(0x0001); // // LCD_WRITE_CMD(0x90); LCD_WRITE_DATA(0x0018); // LCD_WRITE_CMD(0x92); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x80); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x81); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x82); LCD_WRITE_DATA(0x018F); // LCD_WRITE_CMD(0x83); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x84); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x85); LCD_WRITE_DATA(0x018F); // // LCD_WRITE_CMD(0x50); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x51); LCD_WRITE_DATA(0x00EF); // LCD_WRITE_CMD(0x52); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x53); LCD_WRITE_DATA(0x018F); // LCD_WRITE_CMD(0x10); LCD_WRITE_DATA(0x5DC0); // LCD_WRITE_CMD(0x07); LCD_WRITE_DATA(0x0001); // delayms(50); // LCD_WRITE_CMD(0x07); LCD_WRITE_DATA(0x0021); // delayms(50); // LCD_WRITE_CMD(0x07); LCD_WRITE_DATA(0x0023); // delayms(50); // LCD_WRITE_CMD(0x07); LCD_WRITE_DATA(0x0033); // delayms(50); // LCD_WRITE_CMD(0x07); LCD_WRITE_DATA(0x0133); // delayms(50); // LCD_WRITE_CMD(0x20); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x21); LCD_WRITE_DATA(0x0000); //4551 seng_cmd_dat(0x15, 0x7040); seng_cmd_dat(0x11, 0x0510); //0x0110 seng_cmd_dat(0x10, 0x3628); seng_cmd_dat(0x12, 0x0006); seng_cmd_dat(0x13, 0x0c2f); delayms(40); seng_cmd_dat(0x12, 0x0015); //0x0016 delayms(40); seng_cmd_dat(0x10, 0x3640); //0x3620 //0x3640 seng_cmd_dat(0x13, 0x2b28); //0x2D24 0x2C2f delayms(20); seng_cmd_dat(0x30, 0x0202); seng_cmd_dat(0x31, 0x0403); seng_cmd_dat(0x32, 0x0007); seng_cmd_dat(0x33, 0x0402); seng_cmd_dat(0x34, 0x0007); seng_cmd_dat(0x35, 0x0403); seng_cmd_dat(0x36, 0x0505); seng_cmd_dat(0x37, 0x0204); seng_cmd_dat(0x38, 0x080e); seng_cmd_dat(0x39, 0x080e); delayms(20); seng_cmd_dat(0x01, 0x0100); seng_cmd_dat(0x02, 0x0300); seng_cmd_dat(0x03, 0x1030); seng_cmd_dat(0x08, 0x0808); seng_cmd_dat(0x0A, 0x0008); seng_cmd_dat(0x60, 0x3100); seng_cmd_dat(0x61, 0x0001); seng_cmd_dat(0x90, 0x003c); //0x003c(60)//0x0044(68) //0x0058(90) seng_cmd_dat(0x92, 0x010F); seng_cmd_dat(0x93, 0x0701); seng_cmd_dat(0x9A, 0x0005); seng_cmd_dat(0xA3, 0x0010); seng_cmd_dat(0x07, 0x0001); seng_cmd_dat(0x07, 0x0021); seng_cmd_dat(0x07, 0x0023); seng_cmd_dat(0x07, 0x0033); seng_cmd_dat(0x07, 0x0133); // LCD_WRITE_CMD(0x50); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x51); LCD_WRITE_DATA(0x00EF); // LCD_WRITE_CMD(0x52); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x53); LCD_WRITE_DATA(0x018F); // // LCD_WRITE_CMD(0x20); LCD_WRITE_DATA(0x0000); // LCD_WRITE_CMD(0x21); LCD_WRITE_DATA(0x0000); LCD_WRITE_CMD(0x022); delayms(20); // 9326 // seng_cmd_dat(0x0702, 0x3008);// Set internal timing, don’t change this value //seng_cmd_dat(0x0705, 0x0036);// Set internal timing, don’t change this value //seng_cmd_dat(0x070B, 0x1233);// Set internal timing, don’t change this value //seng_cmd_dat(0x0001, 0x0100); // set SS and SM bit //seng_cmd_dat(0x0002, 0x0101); // set 1 line inversion //seng_cmd_dat(0x0003, 0x1018); // set GRAM write direction and BGR=1. // //seng_cmd_dat(0x0008, 0x0202); // set the back porch and front porch //seng_cmd_dat(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0] //seng_cmd_dat(0x000C, 0x0000); // RGB interface setting //seng_cmd_dat(0x000F, 0x0000); // RGB interface polarity ////*************Power On sequence ****************// //seng_cmd_dat(0x0100, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB //seng_cmd_dat(0x0102, 0x0000); // VREG1OUT voltage //seng_cmd_dat(0x0103, 0x0000); // VDV[4:0] for VCOM amplitude //delayms(200); // Dis-charge capacitor power voltage //seng_cmd_dat(0x0100, 0x1190); // SAP, BT[3:0], AP, DSTB, SLP, STB //seng_cmd_dat(0x0101, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0] //delayms(50); // Delay 50ms //seng_cmd_dat(0x0102, 0x01BD); // VREG1OUT voltage //delayms(50); // Delay 50ms //seng_cmd_dat(0x0103, 0x3800); // VDV[4:0] for VCOM amplitude //seng_cmd_dat(0x0281, 0x0013); // VCM[5:0] for VCOMH //delayms(50); //seng_cmd_dat(0x0200, 0x0000); // GRAM horizontal Address //seng_cmd_dat(0x0201, 0x0000); // GRAM Vertical Address //// ----------- Adjust the Gamma Curve ----------// //seng_cmd_dat(0x0300, 0x0000); //seng_cmd_dat(0x0301, 0x0707); //seng_cmd_dat(0x0302, 0x0606); //seng_cmd_dat(0x0305, 0x0000); //seng_cmd_dat(0x0306, 0x0E00); //seng_cmd_dat(0x0307, 0x0606); //seng_cmd_dat(0x0308, 0x0005); //seng_cmd_dat(0x0309, 0x0007); //seng_cmd_dat(0x030C, 0x0002); //seng_cmd_dat(0x030D, 0x000E); ////------------------ Set GRAM area ---------------// //seng_cmd_dat(0x0210, 0x0000); // Horizontal GRAM Start Address //seng_cmd_dat(0x0211, 0x00EF); // Horizontal GRAM End Address //seng_cmd_dat(0x0212, 0x0000); // Vertical GRAM Start Address //seng_cmd_dat(0x0213, 0x018F); // Vertical GRAM Start Address //seng_cmd_dat(0x0400, 0x3100); // Gate Scan Line // //seng_cmd_dat(0x0401, 0x0003); // NDL,VLE, REV //seng_cmd_dat(0x0404, 0x0000); // set scrolling line ////-------------- Partial Display Control ---------// //seng_cmd_dat(0x0500, 0x0000);//Partial Image 1 Display Position //seng_cmd_dat(0x0501, 0x0000); //Partial Image 1 RAM Start/End Address //seng_cmd_dat(0x0502, 0x0000); //Partial Image 1 RAM Start/End Address //seng_cmd_dat(0x0503, 0x0000); //Partial Image 2 Display Position //seng_cmd_dat(0x0504, 0x0000);//Partial Image 2 RAM Start/End Address //seng_cmd_dat(0x0505, 0x0000); //Partial Image 2 RAM Start/End Address ////-------------- Panel Control -------------------// //seng_cmd_dat(0x0010, 0x0010); //DIVI[1:0];RTNI[4:0] //seng_cmd_dat(0x0011, 0x0600); //NOWI[2:0];SDTI[2:0] //seng_cmd_dat(0x0020, 0x0002); //DIVE[1:0];RTNE[5:0] //seng_cmd_dat(0x0400, 0x3100); // Gate Scan Line //seng_cmd_dat(0x0007, 0x0173); // 262K color and display ON // // LCD_WRITE_CMD(0x0202); } void LCD_SET_WIN(void) { seng_cmd_dat(0x0050,0x0000);//水平起始位置 seng_cmd_dat(0x0051,0x00EF);//水平终止位置 seng_cmd_dat(0x0052,0x0000);//垂直起始位置 seng_cmd_dat(0x0053,0x018F);//垂直终止位置 LCD_WRITE_CMD(0x0022);//LCD_WriteCMD(GRAMWR); //9326 // seng_cmd_dat(0x0210, 0x0000); // Horizontal GRAM Start Address //seng_cmd_dat(0x0211, 0x00eF); // Horizontal GRAM End Address //seng_cmd_dat(0x0212, 0x0000); // Vertical GRAM Start Address //seng_cmd_dat(0x0213, 0x018F); // Vertical GRAM Start Address // LCD_WRITE_CMD(0x0202); } void LCD_BRUSH(int color) { int i,j; for(i=0;i<400;i++) { for(j=0;j<240;j++) { // LCD_WRITE_DATA(color>>8); // LCD_WRITE_DATA(color); LCD_WRITE_DATA2(color>>8,color); } } } unsigned char LCD_ID_9327(unsigned int dat) { unsigned int temp,DH,DL; LCD_WRITE_CMD(0x0); temp=0; P0=0xff; P2=0xff; RS=1; //选择数据 TFT_CS=0; //片选 RDB=0; //读开启 // delayms(5); //延时 DH=DataH; RDB=1; //读关闭 RDB=0; //读开启 // delayms(5); //延时 DH=DataH; RDB=1; //读关闭 UART_send_data(DH); // RS=1; //选择数据 // TFT_CS=0; //片选 // RDB=0; //读开启 //// delayms(5); //延时 // DH=DataH; // RDB=1; //读关闭 // UART_send_data(DH); // RS=1; //选择数据 // TFT_CS=0; //片选 // RDB=0; //读开启 //// delayms(5); //延时 // DH=DataH; // RDB=1; //读关闭 // UART_send_data(DH); // RS=1; //选择数据 // TFT_CS=0; //片选 // RDB=0; //读开启 //// delayms(5); //延时 // DH=DataH; // RDB=1; //读关闭 // UART_send_data(DH); //读出0x0027 TFT_CS=1; //片选关闭 } void draw_pic() { int i=0,m=0,n=0 ; for(m=0;m<400;m++) //刷图片 { for(n=0;n<240;n++) { if(i == 16800) i = 0; LCD_WRITE_DATA2(image[i*2+1],image[i*2]); i++; } } } void Keypress() { while(KEY) delayms(10); } void main(void) { unsigned char id; unsigned int lx,ly,i; UART_init(); reset(); id = LCD_ID_9327(0); lcd_init(); LCD_SET_WIN(); while(1) { // LCD_BRUSH(0x0000); // LCD_BRUSH(0x001f); // draw_pic(); LCD_BRUSH(0x0000); LCD_BRUSH(0xf800); LCD_BRUSH(0x07e0); LCD_BRUSH(0x001f); // KeyPress(); // LCD_BRUSH(0x0000); draw_pic(); #if 1 spistart(); //模拟spi初始化 while(1) { if (Penirq==0) { if(Getpix()==1) //得到当前TP的取样值,此处使用软件滤波,2次取样的值相差太大的视为噪声 { lx=(4096-Tp_pix.x-320)/15+7;//x轴采样值转换成TFT的横坐标 ly=(Tp_pix.y-220)/11;//y轴采样值转换成TFT的纵坐标 drawpoint(240-lx,ly,0xffff); //写(x,y)点为红色 } } else { } } #endif } }