|
发表于 2018-2-5 10:56:50
|
显示全部楼层
使用我给emWin做的这个即可,用不到g_tFT5X06.Count,
if(FT5X06_PenInt() == 0) 也可以删掉。就是查询就好了,这个基本不占用什么CPU利用率,非常低。
- /*
- *********************************************************************************************************
- * 函 数 名: FT5X06_OnePiontScan
- * 功能说明: FT5X06_OnePiontScan函数仅读取了电容触摸屏的一次触摸,在bsp_ts_ft5x06.h文件里面设置参数
- * #define FT5X06_TOUCH_POINTS 1
- * 专门用于emWin。
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- extern GUI_PID_STATE State;
- 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[i] = (int16_t)(buf[3 + 6*i] & 0x0F)<<8 | (int16_t)buf[4 + 6*i];
- g_tFT5X06.Y[i] = (int16_t)(buf[5 + 6*i] & 0x0F)<<8 | (int16_t)buf[6 + 6*i];
- g_tFT5X06.Event[i] = buf[0x3 + 6*i] >> 6;
- g_tFT5X06.id[i] = (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[i]);
- }
- 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
- }
复制代码
|
|