初级会员

- 积分
- 166
- 金钱
- 166
- 注册时间
- 2015-1-14
- 在线时间
- 7 小时
|
5金钱
原子哥,最近在驱动一个3.2寸的TFT液晶,要求要用16位并行输入,而且不是战舰里的那种FMSC那种方式,你能否帮帮忙,下面是51源程序,需要怎样修改
#include <reg51.h>
#include <intrins.h>
/* http://ttmcu.taobao.com ?ê?¤??×?
?ú???????·??:JME-2????°?+1T??????????STC?????ú?¨51????STC12LE5A60S2)+33M?§?? ?????ú?¤×÷????3.3V
???ò????IO????·?????
????????RS-P3^5; WR-P3^6; RD-P3^7; CS-P1^0; REST-P1^2;
??????: DB0-DB7????????P0^0-P0^7; DB8-DB15????????P2^0-P2^7;?¨8????????DB0-DB7???????????©
????????????·?????(??????????????????)
D_CLK-P1^7; D_CS-P1^4; D_DIN-P3^0; D_OUT-P3^1; D_PENIRQ-P3^4;
*/
//#define Bus_16 //16??????????,????????8??????????×???????????????????16???????????ò??????
#define LCD_DataPortH P2 //??8????????,8????????????????8??
#define LCD_DataPortL P0 //??8???????? ,8??????????8????????????,???·??P0??????????10K??×è,??????????×???4.7K,????10K.
sbit LCD_RS = P3^5; //????/?ü??????
sbit LCD_WR = P3^6; //??????
sbit LCD_RD =P3^7; //??????
sbit LCD_CS=P1^0; //????
sbit LCD_REST = P1^2; //????
struct pix_
{
unsigned int x;
unsigned int y;
};
struct pix_ Tp_pix; //?±?°????×?±ê?????ù??
/* touch panel interface define */
sbit DCLK =   1^7;
sbit CS =   1^4;
sbit DIN =   3^0;
sbit DOUT =   3^1;
sbit Penirq =   3^4; //?ì?????????ì??????
unsigned int TP_X,TP_Y; //?±?°????×?±ê
unsigned char code image[3200]={ /* 0X00,0X10,0X28,0X00,0X28,0X00,0X01,0X1B, */
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
};
//8*12×?·?
unsigned char code zifu[]={
/*-- ??×?: --*/
/*-- ????9; ??×??????????????ó?????íx??=6x12 --*/
/*-- ?í??????8??±????????÷???????í??x????=8x12 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- ??×?: ! --*/
/*-- ????9; ??×??????????????ó?????íx??=6x12 --*/
/*-- ?í??????8??±????????÷???????í??x????=8x12 --*/
0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,
};
//**********************************************************
void spistar() //SPI????
{
CS=1;
DCLK=1;
DIN=1;
DCLK=1;
}
//**********************************************************
void WriteCharTo7843(unsigned char num) //SPI??????
{
unsigned char count=0;
DCLK=0;
for(count=0;count<8;count++)
{
num<<=1;
//DIN=CY;
DCLK=0; _nop_();_nop_();_nop_(); //?????????§
DCLK=1; _nop_();_nop_();_nop_();
}
}
//**********************************************************
unsigned int ReadFromCharFrom7843() //SPI ??????
{
unsigned char count=0;
unsigned int Num=0;
for(count=0;count<12;count++)
{
Num<<=1;
DCLK=1; _nop_();_nop_();_nop_(); //?????????§
DCLK=0; _nop_();_nop_();_nop_();
if(DOUT) Num++;
}
return(Num);
}
void delayms(int count) // /* X1ms */
{
int i,j;
for(i=0;i<count;i++)
for(j=0;j<1000;j++);
}
#ifdef Bus_16 //????±à??-16??????????
void LCD_Writ_Bus(char VH,char VL) //????????????????
{
LCD_DataPortH=VH;
LCD_DataPortL=VL;
LCD_WR=0;
LCD_WR=1;
}
#else //????±à??-8??????????
void LCD_Writ_Bus(char VH,char VL) //????????????????
{
LCD_DataPortH=VH;
LCD_WR=0;
LCD_WR=1;
LCD_DataPortH=VL;
LCD_WR=0;
LCD_WR=1;
}
#endif
void Lcd_Write_Com(char VH,char VL) //·????ü??-8??????
{
LCD_RS=0;
LCD_Writ_Bus(VH,VL);
}
void Lcd_Write_Data(char VH,char VL) //·???????-8??????
{
LCD_RS=1;
LCD_Writ_Bus(VH,VL);
}
void Lcd_Write_Com_Data(int com,int val) //·????????ü??
{
Lcd_Write_Com(com>>8,com);
Lcd_Write_Data(val>>8,val);
}
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
Lcd_Write_Com(0x00,0x46);Lcd_Write_Data(x2,x1);
Lcd_Write_Com(0x00,0x47);Lcd_Write_Data(y2>>8,y2);
Lcd_Write_Com(0x00,0x48);Lcd_Write_Data(y1>>8,y1);
Lcd_Write_Com(0x00,0x20);Lcd_Write_Data(x1>>8,x1);
Lcd_Write_Com(0x00,0x21);Lcd_Write_Data(y1>>8,y1);
Lcd_Write_Com(0x00,0x22);
}
void Lcd_Init(void)
{
LCD_REST=1;
delayms(5);
LCD_REST=0;
delayms(5);
LCD_REST=1;
LCD_CS=1;
LCD_RD=1;
LCD_WR=1;
delayms(5);
LCD_CS =0; //?ò??????????
Lcd_Write_Com_Data(0x11,0x2004);
Lcd_Write_Com_Data(0x13,0xCC00);
Lcd_Write_Com_Data(0x15,0x2600);
Lcd_Write_Com_Data(0x14,0x252A);
// Lcd_Write_Com_Data(0x14,0x002A);
Lcd_Write_Com_Data(0x12,0x0033);
Lcd_Write_Com_Data(0x13,0xCC04);
delayms(1);
Lcd_Write_Com_Data(0x13,0xCC06);
delayms(1);
Lcd_Write_Com_Data(0x13,0xCC4F);
delayms(1);
Lcd_Write_Com_Data(0x13,0x674F);
Lcd_Write_Com_Data(0x11,0x2003);
delayms(1);
Lcd_Write_Com_Data(0x30,0x2609);
Lcd_Write_Com_Data(0x31,0x242C);
Lcd_Write_Com_Data(0x32,0x1F23);
Lcd_Write_Com_Data(0x33,0x2425);
Lcd_Write_Com_Data(0x34,0x2226);
Lcd_Write_Com_Data(0x35,0x2523);
Lcd_Write_Com_Data(0x36,0x1C1A);
Lcd_Write_Com_Data(0x37,0x131D);
Lcd_Write_Com_Data(0x38,0x0B11);
Lcd_Write_Com_Data(0x39,0x1210);
Lcd_Write_Com_Data(0x3A,0x1315);
Lcd_Write_Com_Data(0x3B,0x3619);
Lcd_Write_Com_Data(0x3C,0x0D00);
Lcd_Write_Com_Data(0x3D,0x000D);
Lcd_Write_Com_Data(0x16,0x0007);
Lcd_Write_Com_Data(0x02,0x0013);
Lcd_Write_Com_Data(0x03,0x0003);
Lcd_Write_Com_Data(0x01,0x0127);
delayms(1);
Lcd_Write_Com_Data(0x08,0x0303);
Lcd_Write_Com_Data(0x0A,0x000B);
Lcd_Write_Com_Data(0x0B,0x0003);
Lcd_Write_Com_Data(0x0C,0x0000);
Lcd_Write_Com_Data(0x41,0x0000);
Lcd_Write_Com_Data(0x50,0x0000);
Lcd_Write_Com_Data(0x60,0x0005);
Lcd_Write_Com_Data(0x70,0x000B);
Lcd_Write_Com_Data(0x71,0x0000);
Lcd_Write_Com_Data(0x78,0x0000);
Lcd_Write_Com_Data(0x7A,0x0000);
Lcd_Write_Com_Data(0x79,0x0007);
Lcd_Write_Com_Data(0x07,0x0051);
delayms(1);
Lcd_Write_Com_Data(0x07,0x0053);
Lcd_Write_Com_Data(0x79,0x0000);
Lcd_Write_Com(0x00,0x22);
LCD_CS =1; //??±?????????
}
void Pant(char VH,char VL)
{
int i,j;
Address_set(0,0,239,319);
for(i=0;i<320;i++)
{
for (j=0;j<240;j++)
{
Lcd_Write_Data(VH,VL);
}
}
}
void inttostr(int dd,unsigned char *str)
{
str[0]=dd/10000+48;
str[1]=(dd/1000)-((dd/10000)*10)+48;
str[2]=(dd/100)-((dd/1000)*10)+48;
str[3]=(dd/10)-((dd/100)*10)+48;
str[4]=dd-((dd/10)*10)+48;
str[5]=0;
}
unsigned char Makpix(struct pix_ pix1,struct pix_ pix2)
{
unsigned char l=0;
int x=pix1.x>pix2.x?pix1.x-pix2.x:pix2.x-pix1.x;
int y=pix1.y>pix2.y?pix1.y-pix2.y:pix2.y-pix1.y;
if(x<14&&y<11) //?í?????¨??2?????ù?????à?????ó?????????ù
{
l=1;
Tp_pix.x=pix1.x;
Tp_pix.y=pix1.y;
}
return l;
}
struct pix_ AD7843()
{
//delayms(1); //?????ó???±???????????????????ù?????ü×??·
//spistar(); //????SPI
//while(BUSY); //????BUSY??????????????????????
//delayms(1);
struct pix_ pix;
CS=0;
WriteCharTo7843(0x90); //??????×? 10010000 ??????·?·?????X×?±ê ?ê??????????×???
//while(BUSY); //????BUSY??????????????????????
//delayms(1);
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
pix.y=ReadFromCharFrom7843();
WriteCharTo7843(0xD0); //??????×? 11010000 ??????·?·?????Y×?±ê ?ê??????????×???
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
pix.x=ReadFromCharFrom7843();
CS=1;
return pix;
}
unsigned char Getpix() //?????ù?????????????í?????¨??2?????ù?????à?????ó?????????ù
{
struct pix_ pix1;
struct pix_ pix2;
pix1=AD7843();
pix2=AD7843();
return Makpix(pix1,pix2);
}
//?????¨????????????×?·?(8*12?ó??)
//dcolor????????????gbcolor??±???????
void showzifu(unsigned int x,unsigned int y,unsigned char value,unsigned int dcolor,unsigned int bgcolor)
{
unsigned char i,j;
unsigned char *temp=zifu;
Address_set(x,y,x+7,y+11); //?è?????ò
temp+=(value-32)*12;
for(j=0;j<12;j++)
{
for(i=0;i<8;i++)
{
if((*temp&(1<<(7-i)))!=0)
{
Lcd_Write_Data(dcolor>>8,dcolor);
}
else
{
Lcd_Write_Data(bgcolor>>8,bgcolor);
}
}
temp++;
}
}
//?????¨????????????×?·??®(8*12?ó??)
//dcolor????????????gbcolor??±???????
void showzifustr(unsigned int x,unsigned int y,unsigned char *str,unsigned int dcolor,unsigned int bgcolor)
{
unsigned int x1,y1;
x1=x;
y1=y;
while(*str!='\0')
{
showzifu(x1,y1,*str,dcolor,bgcolor);
x1+=7;
str++;
}
}
void point()
{
unsigned char ss[6];
unsigned int lx,ly;
long i;
i=0;
Pant(0xff,0xff); //????
while(i<200000)
{
if(Penirq==0)
{
i=0;
if(Getpix()==1) //?????±?°TP?????ù?????????????í?????¨??2?????ù?????à?????ó?????????ù
{
inttostr(Tp_pix.x,ss);
showzifustr(10,305,"X:",0xf800,0xffff);
showzifustr(25,305,ss,0xf800,0xffff); //????×?·??®
inttostr(Tp_pix.y,ss);
showzifustr(80,305,"Y:",0xf800,0xffff);
showzifustr(95,305,ss,0xf800,0xffff); //????×?·??®
lx=240-((Tp_pix.x-330)*10/142);
ly=320-((Tp_pix.y-380)/11);
Address_set(lx,ly,lx+2,ly+2);
Lcd_Write_Data(0,255);
Lcd_Write_Data(0,255);
Lcd_Write_Data(0,255);
Lcd_Write_Data(0,255);
Lcd_Write_Data(0,255);
Lcd_Write_Data(0,255);
Lcd_Write_Data(0,255);
Lcd_Write_Data(0,255);
Lcd_Write_Data(0,255);
}
}
else
{
i++;
}
}
}
main()
{
unsigned int i,j,k;
spistar(); //????spi??????
while(1)
{
Lcd_Init(); //tft??????
LCD_CS =0; //?ò??????????
Pant(0xff,0xff); //????
for(k=0;k<8;k++) //??????
{
for(j=0;j<6;j++)
{
if (Penirq==0)
{
point();
}
Address_set(40*j,40*k,40*j+39,40*k+39);
for(i=0;i<1600;i++)
{
Lcd_Write_Data(image[i*2+1],image[i*2]);
}
}
}
delayms(500);
} |
|