|
发表于 2017-11-16 14:22:37
|
显示全部楼层
看我们这个FT5X06的,你发送的状态里面得有松手的。
注意置红的代码,得有状态的判断。然后调用函数GUI_PID_StoreState。
=====================================
void FT5X06_OnePiontScan(void)
{
uint8_t buf[CFG_POINT_READ_BUF];
uint8_t i;
static uint8_t s_tp_down = 0;
uint16_t x, y;
if (g_tFT5X06.Enable == 0)
{
return;
}
if (FT5X06_PenInt() == 0)
{
return;
}
FT5X06_ReadReg(2, buf, 1);
/* 判断是否有触摸数据 */
if ((buf[0] & 0x07) == 0)
{
if (s_tp_down == 1)
{
/* State.x和State.y的数值无需更新,State是全局变量,保存的就是最近一次的数值 */
s_tp_down = 0;
State.Pressed = 0;
GUI_PID_StoreState(&State); /* 释放 */
}
return;
}
/* 有触摸,读取完整的数据,这里读取了一次 */
FT5X06_ReadReg(0, buf, CFG_POINT_READ_BUF);
for (i = 0; i < FT5X06_TOUCH_POINTS; i++)
{
uint8_t pointid;
pointid = (buf[5 + 6*i]) >> 4;
if (pointid >= 0x0f)
{
break;
}
else
{
g_tFT5X06.X = (int16_t)(buf[3 + 6*i] & 0x0F)<<8 | (int16_t)buf[4 + 6*i];
g_tFT5X06.Y = (int16_t)(buf[5 + 6*i] & 0x0F)<<8 | (int16_t)buf[6 + 6*i];
g_tFT5X06.Event = buf[0x3 + 6*i] >> 6;
g_tFT5X06.id = (buf[5 + 6*i])>>4;
}
}
/* 检测按下 */
{
if ((g_tFT5X06.ChipID == 0x55)||(g_tFT5X06.ChipID == 0xa3)) /* 4.3寸 480 * 272 */
{
x = g_tFT5X06.Y[0];
y = g_tFT5X06.X[0];
/* 判断值域 */
if (x > 479)
{
x = 479;
}
if (y > 271)
{
y = 271;
}
}
else if (g_tFT5X06.ChipID == 0x0A) /* 5.0寸 800 * 480 */
{
x = g_tFT5X06.X[0];
y = g_tFT5X06.Y[0];
/* 判断值域 */
if (x > 799)
{
x = 799;
}
if (y > 479)
{
y = 479;
}
}
else /* id == 0x06 表示7寸电容屏(FT芯片) */
{
x = g_tFT5X06.X[0];
y = g_tFT5X06.Y[0];
/* 判断值域 */
if (x > 799)
{
x = 799;
}
if (y > 479)
{
y = 479;
}
}
}
if (s_tp_down == 0)
{
s_tp_down = 1;
State.x = x;
State.y = y;
State.Pressed = 1;
GUI_PID_StoreState(&State);
}
else
{
State.x = x;
State.y = y;
State.Pressed = 1;
GUI_PID_StoreState(&State);
}
#if 0
for (i = 0; i < CFG_POINT_READ_BUF; i++)
{
printf("%02X ", buf);
}
printf("\\r\\n");
#endif
#if 0 /* 打印5个坐标点数据 */
printf("(%5d,%5d,%3d,%3d) ", g_tFT5X06.X[0], g_tFT5X06.Y[0], g_tFT5X06.Event[0], g_tFT5X06.id[0]);
printf("(%5d,%5d,%3d,%3d) ", g_tFT5X06.X[1], g_tFT5X06.Y[1], g_tFT5X06.Event[1], g_tFT5X06.id[1]);
printf("(%5d,%5d,%3d,%3d) ", g_tFT5X06.X[2], g_tFT5X06.Y[2], g_tFT5X06.Event[2], g_tFT5X06.id[2]);
printf("(%5d,%5d,%3d,%3d) ", g_tFT5X06.X[3], g_tFT5X06.Y[3], g_tFT5X06.Event[3], g_tFT5X06.id[3]);
printf("(%5d,%5d,%3d,%3d) ", g_tFT5X06.X[4], g_tFT5X06.Y[4], g_tFT5X06.Event[4], g_tFT5X06.id[4]);
printf("\\r\\n");
#endif
}
|
|