|
下边是我写的触摸三个函数,往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);
} |
|