OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3427|回复: 1

原子哥,最近在驱动一个3.2寸的TFT液晶,要求要用16位并行输入,而且不是战舰里的那种FMSC那种方式,你能否帮帮忙,下面是51源程序,需要怎样修改

[复制链接]

19

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-1-14
在线时间
7 小时
发表于 2015-7-24 11:07:27 | 显示全部楼层 |阅读模式
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);
  
   }

ceshi.uvproj

13.21 KB, 下载次数: 20

STM32.pdf

121.2 KB, 下载次数: 59

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-25 11:31:55 | 显示全部楼层
帮不到你,不好意思。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 13:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表