硬汉嵌入式论坛

 找回密码
 立即注册
查看: 9993|回复: 4
收起左侧

tft触摸遇难题?

[复制链接]

2

主题

11

回帖

2

积分

新手上路

积分
2
发表于 2012-10-19 00:39:47 | 显示全部楼层 |阅读模式
下边是我写的触摸三个函数,往TSC2046写8字节数据,读X坐标AD值,读Y坐标AD值。中断中读取XY坐标的值显示在屏上坐标值。
        但读回来总是零,不管往TSC2046写什么都读回来零。真纠结!!求助!!!求助!
/******************************************************************************
** 函数名称: void TouchInit(void).
** 功能描述: 触控初始化.
** 输入参数: None.         
** 输出参数: None
** 返回参数: None
*******************************************************************************/
void TouchInit(void)                                       
{
        gpio_init(Touch_PORT,Touch_CtrlPin_MISO,0,1);//输入
        gpio_init(Touch_PORT,Touch_CtrlPin_MOSI,1,0);//输出
        gpio_init(Touch_PORT,Touch_CtrlPin_SCK,1,0);//输出
        gpio_init(Touch_PORT,Touch_CtrlPin_TCS,1,0);//输出
        gpio_init(Touch_PORT,Touch_CtrlPin_BUSY,0,1);//输入

        Touch_SCK_Low;
        Touch_TCS_High;
        Touch_SCK_High;
        Touch_TCS_Low;
}
/******************************************************************************
** 函数名称: void SPIWriteToTSC2046(unsigned char dat).
** 功能描述: 往触控写数据.
** 输入参数: None.         
** 输出参数: None
** 返回参数: None
*******************************************************************************/
void SPIWriteToTSC2046(unsigned char tsdata)           
{
   unsigned char count;
   Touch_SCK_High;
   Touch_TCS_High;
   Touch_MOSI_Low;
   Touch_SCK_Low;
   Touch_TCS_Low;
   for(count=0;count<8;count++)
    {
      if(tsdata&0x80==0x80)
      {
         Touch_MOSI_High;
      }
      else  
      {
         Touch_MOSI_Low;
      }
      tsdata<<=1;
      Touch_SCK_Low;
      delay(1);//180ns
      Touch_SCK_High;
      delay(1);//180ns
    }
}
/******************************************************************************
** 函数名称: INT16U TouchReadX(void) .
** 功能描述: 获取TS2046 ADC 值或 实际对应LCD的x坐标值.
** 输入参数: None.         
** 输出参数: None.
** 返回参数: tsdata,TS2046 ADC 值或 实际对应LCD的x坐标值
*******************************************************************************/
uint16 TouchReadX(void)                              
{
  unsigned char count;
  uint16 tsdata=0;
  SPIWriteToTSC2046(0xd0);    /* 送控制字 11010000 用差分方式读x坐标 */
  Touch_SCK_Low;delay(1);//180ns
  Touch_SCK_High;delay(1);//180ns
  Touch_SCK_Low;delay(1);//180ns
  for(count=0;count<12;count++)
  {
    Touch_SCK_High;delay(1);//180ns
    tsdata<<=1;
    Touch_SCK_Low;delay(1);//180ns
    tsdata|=gpio_get(PORTC,Touch_CtrlPin_MOSI);
  }
  Touch_TCS_High;  
   return(tsdata);
}
/******************************************************************************
** 函数名称: INT16U TouchReadY(void) .
** 功能描述: 获取TS2046 ADC 值或 实际对应LCD的x坐标值.
** 输入参数: None.         
** 输出参数: None.
** 返回参数: tsdata,TS2046 ADC 值或 实际对应LCD的x坐标值
*******************************************************************************/
uint16 TouchReadY(void)                              
{
  unsigned char count;
  uint16 tsdata=0;
  SPIWriteToTSC2046(0x90);   /* 送控制字 10010000 用差分方式读y坐标 */
  Touch_SCK_Low;delay(1);//180ns
  Touch_SCK_High;delay(1);//180ns
  Touch_SCK_Low;delay(1);//180ns
  for(count=0;count<12;count++)
  {
    Touch_SCK_High;delay(1);//180ns
    tsdata<<=1;
    Touch_SCK_Low;delay(1);//180ns
    tsdata|=gpio_get(PORTC,Touch_CtrlPin_MOSI);
  }
  Touch_TCS_High;  
   return(tsdata);
}
OH~~year
回复

使用道具 举报

2

主题

11

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2012-10-19 00:44:26 | 显示全部楼层
下边是中断处理函数

void PORTC_isr(void)//中断C0 中断号89
{
    uint8 a,b=0,c=0;
    delay(10000000);   //大于30ms
    X=TouchReadX();
    Y=TouchReadY();
    Z=1;
    for(a=0;a<16;a++)
    {
        b=X&0x01;
        X>>=1;
        if(b==1)
        {
           LCD_DisplayChar(c,0,0x31);   //显示1
        }
        if(b==0)
        {
            LCD_DisplayChar(c,0,0x30);   //显示0
        }
        c+=16;
     }
     for(a=0;a<16;a++)
     {
         b=Y&0x01;
         Y>>=1;
         if(b==1)
         {
             LCD_DisplayChar(c,24,0x31);   //显示1
         }
         if(b==0)
         {
             LCD_DisplayChar(c,24,0x30);   //显示0
         }
         c+=16;
     }
        while(1);

}
OH~~year
回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2012-10-19 08:40:36 | 显示全部楼层
gpio_get () 是个什么函数
回复

使用道具 举报

2

主题

11

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2012-10-19 12:09:29 | 显示全部楼层

回 armfly 的帖子

armfly:gpio_get () 是个什么函数 (2012-10-19 08:40)
这是获得某个gpio引脚的状态值。
gpio_get(PORTC,Touch_CtrlPin_MOSI);  
这句就是获得端口C的与tft  mosi相连的引脚电平。
OH~~year
回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2012-10-22 22:47:28 | 显示全部楼层
GPIO的时钟是否打开了。
如果有示波器,最好看下SPI总线波形是否正常。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-21 11:45 , Processed in 0.173064 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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