中级会员
 
- 积分
- 273
- 金钱
- 273
- 注册时间
- 2017-7-19
- 在线时间
- 89 小时
|
1金钱
XPT2046芯片。
使用DEMO工程中的TOUCH_Sample.c来获取四个触摸屏坐标值,运行时发现十字光标自己乱跳,没触摸也会自己乱跳,AD值也在乱跳,而且最大AD值只能到1900左右,
不知道是不是触摸屏的读AD时序函数的问题,但是我自己写的获取触摸屏坐标函数就没问题,不会乱跳,按下才会读出坐标值(没有使用PEN判断,直接读取坐标)
[mw_shl_code=c,true]//触摸屏接口函数
#include "GUI.h"
#include "XPT2046.h"
void GUI_TOUCH_X_ActivateX(void)
{
CS = 0;
TP_SPI_Write(TP_CMD_RDX);//0XD0
}
void GUI_TOUCH_X_ActivateY(void)
{
CS = 0;
TP_SPI_Write(TP_CMD_RDY);//0X90
}
int GUI_TOUCH_X_MeasureX (void)
{
return TP_SPI_ReadGUI();
}
int GUI_TOUCH_X_MeasureY (void)
{
return TP_SPI_ReadGUI();
}
//触摸屏操作函数
void TP_SPI_Write(uchar dat)
{
uchar i;
DIN = 0;
DCLK = 0;//时钟先拉低
for(i=0;i<8;i++)
{
if(dat & 0x80) DIN = 1;//从最高位开始
else DIN = 0;
dat <<= 1;
DCLK = 0;
// delay_us(1);
DCLK = 1;//上升沿开始进行传输
}
}
/*------ 读数据时序 for GUI-------*/
//读出12位的数据
u16 TP_SPI_ReadGUI()
{
uchar i;
u16 dat = 0;
DIN = 0;
DCLK = 1;//时钟拉高
for(i=0;i<12;i++)//AD数据只有12位
{
dat <<= 1;
DCLK = 0;//下降沿后可以接收数据
// delay_us(1);
DCLK = 1;//为下个的下降沿准备
if(DOUT) dat++;
}
CS = 1;//拉高片选
return dat;
}[/mw_shl_code]
|
|