硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1741|回复: 7
收起左侧

[emWin] 按钮控件可以点击不能释放

[复制链接]

7

主题

52

回帖

73

积分

初级会员

积分
73
发表于 2017-11-16 13:43:49 | 显示全部楼层 |阅读模式
按钮控件可以点击不能释放,请问大家是怎么回事啊 WFMNHL2V}BTCIV~~3({P5GG.png
回复

使用道具 举报

7

主题

52

回帖

73

积分

初级会员

积分
73
 楼主| 发表于 2017-11-16 13:44:35 | 显示全部楼层
LED0可以亮,LED1没效果
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107418
QQ
发表于 2017-11-16 13:50:05 | 显示全部楼层
这种情况一般是你的触摸驱动有问题,你串口打印下触摸坐标,看看是不是松手了,还是按下的状态。
回复

使用道具 举报

7

主题

52

回帖

73

积分

初级会员

积分
73
 楼主| 发表于 2017-11-16 13:59:48 | 显示全部楼层
汉个回复好及时,好的我试试
回复

使用道具 举报

7

主题

52

回帖

73

积分

初级会员

积分
73
 楼主| 发表于 2017-11-16 14:11:58 | 显示全部楼层

回 eric2013 的帖子

eric2013:这种情况一般是你的触摸驱动有问题,你串口打印下触摸坐标,看看是不是松手了,还是按下的状态。 (2017-11-16 13:50)

    FT6206_Read_Reg((uint8_t*)&buf, 7);

    if ((buf[2]&0x0f) == 1)   //判断是否按下
    {
        touchY = (s16)(buf[5] & 0x0F)<<8 | (s16)buf[6];
        touchX = (s16)(buf[3] & 0x0F)<<8 | (s16)buf[4];
        if(touchY==0)
            touchX=0;   

            if(touchX >479 ) touchX =479;
            //else if(touchX < 0) touchX=0;

            if(touchY > 799) touchY = 799;
            //else if(touchY < 0) touchY = 0;
    printf("′¥ÃtX:%d\\r\\n",touchX);


    }
  else
  {
    touchX=touchY=0;
  }


    return touchX;

松开坐标就变为0了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107418
QQ
发表于 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   
}

回复

使用道具 举报

7

主题

52

回帖

73

积分

初级会员

积分
73
 楼主| 发表于 2017-11-16 14:30:39 | 显示全部楼层

回 eric2013 的帖子

eric2013:看我们这个FT5X06的,你发送的状态里面得有松手的。
注意置红的代码,得有状态的判断。然后调用函数GUI_PID_StoreState。
=====================================
void FT5X06_OnePiontScan(void)
....... (2017-11-16 14:22) 
谢谢汉哥,我去试试
回复

使用道具 举报

7

主题

52

回帖

73

积分

初级会员

积分
73
 楼主| 发表于 2017-11-16 15:27:56 | 显示全部楼层
好的,可以了,感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-30 20:47 , Processed in 0.271346 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表