|
楼主 |
发表于 2017-9-1 11:16:58
|
显示全部楼层
回 eric2013 的帖子
把那个批处理干掉好了,
现在就是在读取触摸屏时,使用 这个函数 uint8_t TOUCH_GetKey(int16_t *_pX, int16_t *_pY)
在没有按下触摸屏时,返回状态总是返回 2,
// 这个扫描函数我放在主函数里面或者定时器里面效果都是一样的,一般来说这个函数放在哪里扫描比较好啊 ???????
void GT928_Scan(void)
{
uint8_t buf[108];
uint8_t i;
static uint8_t s_tp_down = 0;
uint16_t x, y;
static uint16_t x_save, y_save;
uint8_t finger = 0, touch_num = 0;
if (g_GT928.Enable == 0)
{
return;
}
/* 20ms 执行一次 */
if (g_GT928.TimerCount < 20)
{
return;
}
g_GT928.TimerCount = 0;
/*
电容触摸板手册 P14
BIT7 BIT6 BIT5 BIT4 BIT3 - BIT0
x814E buffer status large detect Reserved HaveKey numberof touchpoint
*/
GT928_ReadReg(GT928_READ_XY_REG, (uint8_t *)buf, 1); /* 读触摸板相关寄存器 */
finger = buf[0];
touch_num = finger & 0x0f; /* 得到触摸点数量 */
if ((finger & 0x80) == 0) /* 0x80表示没有触摸键 */
{
return;
}
else /* 有触摸键,则要把 buffer(BIT7)置0,这样下次才能再读该寄存器 */
{
buf[0] = 0;
GT928_WriteReg(GT928_READ_XY_REG, (uint8_t *)buf, 1);
}
// 这个地方是我增加,增加后如果不按触摸屏的话,没有 2 返回
if(touch_num > 10) // 触摸屏最大点数, 911的貌似需要这样增加
{
buf[0] = 0;
GT928_WriteReg(GT928_READ_XY_REG, (uint8_t *)buf, 1);
return ;
}
if (touch_num == 0)
{
if (s_tp_down == 1)
{
s_tp_down = 0;
TOUCH_PutKey(TOUCH_RELEASE, x_save, y_save);
}
return;
}
GT928_ReadReg(GT928_READ_XY_REG, &buf[0], 82);
/*
0x814E buffer status large detect Reserved HaveKey num of touch point
0x814F 监测id
0x8150 触摸点 1,X 坐标低 8 位
0x8151 触摸点 1,X 坐标高 8 位
0x8152 触摸点 1,Y 坐标低 8 位
0x8153 触摸点 1,Y 坐标高 8 位
0x8154 触摸点1尺寸 低8位
0x8155 触摸点1尺寸 高8位
10个触摸点:8 x 10 + 1个触摸状态寄存器 + 1个KeyValue寄存器 = 82个寄存器
*/
g_GT928.TouchReg = buf[0]; /* 触摸状态寄存器 */
for (i = 0; i < 10; i++)
{
g_GT928.Id = buf[i * 8 + 1]; /* 监测ID */
g_GT928.X = ((uint16_t)buf[i * 8 + 3] << 8) + buf[i * 8 + 2]; /* 触摸点 X坐标 */
g_GT928.Y = ((uint16_t)buf[i * 8 + 5] << 8) + buf[i * 8 + 4]; /* 触摸点 Y坐标 */
g_GT928.Size = ((uint16_t)buf[i * 8 + 7] << 8) + buf[i * 8 + 6]; /* 触摸点 尺寸 */
}
/* 检测按下 */
{
/*
坐标:
(左上角是 (0,0), 右下角是 (1023,599)
*/
x = g_GT928.X[0];
y = g_GT928.Y[0];
}
if (s_tp_down == 0)
{
s_tp_down = 1;
TOUCH_PutKey(TOUCH_DOWN, x, y);
}
else
{
TOUCH_PutKey(TOUCH_MOVE, x, y);
}
x_save = x; /* 保存坐标,用于释放事件 */
y_save = y;
#if 0
for (i = 0; i < 82; i++)
{
static uint8_t oldbus[108];
if (buf != oldbus)
{
//printf("[%d]: %02X ", i, buf);
oldbus = buf;
}
}
/* 打印测试 */
for (i = 0; i < 82; i++)
{
printf("%02X ", buf);
}
printf("\\r\\n");
printf("(%5d,%5d,%5d) ", g_GT928.Id[0], g_GT928.X[0], g_GT928.Y[0]);
// printf("(%5d,%5d,%3d) ", g_GT928.X1, g_GT928.Y1, g_GT928.P1);
// printf("(%5d,%5d,%3d) ", g_GT928.X2, g_GT928.Y2, g_GT928.P2);
// printf("(%5d,%5d,%3d) ", g_GT928.X3, g_GT928.Y3, g_GT928.P3);
// printf("(%5d,%5d,%3d) ", x, y, g_GT928.P4);
printf("\\r\\n");
#endif
} |
|