#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 char cmd) { RS = 0; // RDB = 1; // WRB = 1; TFT_CS = 0; DataH = cmd; WRB = 0; //; WRB = 1; // DataH = cmd; // WRB = 0; // ; // WRB = 1; TFT_CS = 1; } void LCD_WRITE_DATA(unsigned char dat) { RS = 1; // RDB = 1; // WRB = 1; TFT_CS = 0; DataH = dat; 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 lcd_init(void) { reset(); LCD_WRITE_CMD(0xf4); LCD_WRITE_DATA(0x59); LCD_WRITE_DATA(0x59); LCD_WRITE_DATA(0x52); LCD_WRITE_DATA(0x52); LCD_WRITE_DATA(0x11); LCD_WRITE_CMD(0xf5); LCD_WRITE_DATA(0x12); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x0b); LCD_WRITE_DATA(0xf0); LCD_WRITE_DATA(0x00); delayms(10); LCD_WRITE_CMD(0xf3); LCD_WRITE_DATA(0xff); LCD_WRITE_DATA(0x2a); LCD_WRITE_DATA(0x2a); LCD_WRITE_DATA(0x0a); LCD_WRITE_DATA(0x22); LCD_WRITE_DATA(0x72); LCD_WRITE_DATA(0x72); LCD_WRITE_DATA(0x20); LCD_WRITE_CMD(0x3a); LCD_WRITE_DATA(0x55); LCD_WRITE_CMD(0xf2); LCD_WRITE_DATA(0x17); LCD_WRITE_DATA(0x17); LCD_WRITE_DATA(0x0f); LCD_WRITE_DATA(0x08); LCD_WRITE_DATA(0x08); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x04);// 0x04 niuweifeng 20101102 0x00 ????? LCD_WRITE_DATA(0x13); LCD_WRITE_DATA(0x00); LCD_WRITE_CMD(0xf6); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x08);// 0x00 niuweifeng 20101102 LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_CMD(0xf7); LCD_WRITE_DATA(0x80); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x05); LCD_WRITE_DATA(0x0d); LCD_WRITE_DATA(0x1f); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x2d); LCD_WRITE_DATA(0x14); LCD_WRITE_DATA(0x15); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x20); LCD_WRITE_DATA(0x01); LCD_WRITE_DATA(0x22); LCD_WRITE_DATA(0x22); LCD_WRITE_CMD(0xf8); LCD_WRITE_DATA(0x80); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x05); LCD_WRITE_DATA(0x0d); LCD_WRITE_DATA(0x1f); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x2d); LCD_WRITE_DATA(0x14); LCD_WRITE_DATA(0x15); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x20); LCD_WRITE_DATA(0x01); LCD_WRITE_DATA(0x22); LCD_WRITE_DATA(0x22); LCD_WRITE_CMD(0xf9); LCD_WRITE_DATA(0x80); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x05); LCD_WRITE_DATA(0x0d); LCD_WRITE_DATA(0x1f); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x2d); LCD_WRITE_DATA(0x14); LCD_WRITE_DATA(0x15); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x20); LCD_WRITE_DATA(0x01); LCD_WRITE_DATA(0x22); LCD_WRITE_DATA(0x22); LCD_WRITE_CMD(0xfA); LCD_WRITE_DATA(0x80); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x05); LCD_WRITE_DATA(0x0d); LCD_WRITE_DATA(0x1f); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x2d); LCD_WRITE_DATA(0x14); LCD_WRITE_DATA(0x15); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x20); LCD_WRITE_DATA(0x01); LCD_WRITE_DATA(0x22); LCD_WRITE_DATA(0x22); LCD_WRITE_CMD(0xfB); LCD_WRITE_DATA(0x80); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x05); LCD_WRITE_DATA(0x0d); LCD_WRITE_DATA(0x1f); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x2d); LCD_WRITE_DATA(0x14); LCD_WRITE_DATA(0x15); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x20); LCD_WRITE_DATA(0x01); LCD_WRITE_DATA(0x22); LCD_WRITE_DATA(0x22); LCD_WRITE_CMD(0xfC); LCD_WRITE_DATA(0x80); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x05); LCD_WRITE_DATA(0x0d); LCD_WRITE_DATA(0x1f); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x2d); LCD_WRITE_DATA(0x14); LCD_WRITE_DATA(0x15); LCD_WRITE_DATA(0x26); LCD_WRITE_DATA(0x20); LCD_WRITE_DATA(0x01); LCD_WRITE_DATA(0x22); LCD_WRITE_DATA(0x22); LCD_WRITE_CMD(0xFD); LCD_WRITE_DATA(0x11);//0x11 LCD_WRITE_DATA(0x01); LCD_WRITE_CMD(0x36); LCD_WRITE_DATA(0xa8); //????,?? LCD_WRITE_CMD(0x35); LCD_WRITE_DATA(0x00); LCD_WRITE_CMD(0x2A); //????,?? ??? 400. LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x01); LCD_WRITE_DATA(0x8f); LCD_WRITE_CMD(0x2B);//????,?? ??? 240. LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0xef); LCD_WRITE_CMD(0xF1); LCD_WRITE_DATA(0x5A); LCD_WRITE_CMD(0xFF); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x40);//0x40 LCD_WRITE_CMD(0x11); delayms(120); LCD_WRITE_CMD(0xF1); LCD_WRITE_DATA(0x00); LCD_WRITE_CMD(0x21); LCD_WRITE_CMD(0x29); delayms(40); LCD_WRITE_CMD(0x2c); } void LCD_SET_WIN(void) { LCD_WRITE_CMD(0x2b); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0xef); LCD_WRITE_CMD(0x2a); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x00); LCD_WRITE_DATA(0x01); LCD_WRITE_DATA(0x8f); LCD_WRITE_CMD(0x002C); } 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_04H0(unsigned int dat) { unsigned int temp,DH,DL; LCD_WRITE_CMD(dat); temp=0; P0=0xff; P2=0xff; RS=1; //选择数据 TFT_CS=0; //片选 RDB=0; //读开启 delayms(5); //延时 DH=P2; // DL=P0; RDB=1; //读关闭 UART_send_data(DH); // 空读 RS=1; //选择数据 TFT_CS=0; //片选 RDB=0; //读开启 delayms(5); //延时 DH=P2; // DL=P0; RDB=1; //读关闭 UART_send_data(DH); // 有效 TFT_CS=1; //片选关闭 temp=temp|DH; return temp; } void draw_pic() { int i=0,m=0,n=0 ; for(m=0;m<320;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_04H0(0xDA); id = LCD_ID_04H0(0xDB); id = LCD_ID_04H0(0xDC); lcd_init(); LCD_SET_WIN(); while(1) { // LCD_BRUSH(0x0000); // LCD_BRUSH(0x001f); // draw_pic(); LCD_BRUSH(0x0000);KeyPress(); LCD_BRUSH(0xf800);KeyPress(); LCD_BRUSH(0x07e0);KeyPress(); LCD_BRUSH(0x001f);KeyPress(); // 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 } }