硬汉嵌入式论坛

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

[emWin] 求助【关于STenwin库中GUI_WaitKey和GUI_GetKey函数得不到按钮返回值】

[复制链接]

8

主题

17

回帖

41

积分

新手上路

积分
41
发表于 2014-1-17 09:29:29 | 显示全部楼层 |阅读模式
大家好,
      我在移植斑竹的uCOS-II+STemWin+FatFs例程时,触摸屏为电容屏,在进行按钮触摸的时候,用GUI_WaitKey()和GUI_GetKey()无法得到按钮的ID返回值,
使用GUI_WaitKey()时,触摸按钮,按钮马上变色,然后一直是死等待,用GUI_GetKey()时,触摸按钮,按钮马上变色,但是返回的KEY值为0
单纯测试触摸屏点的时候,返回的测试点是正确的,一旦写按钮控件时,就得不到按钮的ID值,请各位大侠指点下,谢谢

代码如下:
文件GUI_X_Touch_Analog.c中:
      uint8_t TOUCH_GetKey(void)
{
    uint16_t First_POSx1=0,First_POSy1=0;
    if(ts_event.Key_Sta==Key_Down)        //触摸屏被按下
    {
        Pen_Int_Set(0);//关闭中断
        mydelay_nms(20);
        do
        {
            ft5x0x_read_data();            
            ts_event.Key_Sta=Key_Up;        
        }while(PEN()==0);//如果PEN一直有效,则一直执行   
        Pen_Int_Set(1);//开启中断
        if((0<ts_event.x1<800)&&(0<ts_event.y1<480))
         return 1;
      else
         return 0;            
    }                  
    else
    {
//        GPIOB->ODR^=GPIO_Pin_14;   
        return 0;
    }
}

uint8_t volatile g_ucTouch = 0;
void GUI_TOUCH_X_ActivateX(void)
{

}
void GUI_TOUCH_X_ActivateY(void)
{

}
int  GUI_TOUCH_X_MeasureX(void)
{
    //TOUCH_SCAN();
    //return(g_tTP.usAdcNowX);
    int xPhys = -1,yPhys = -1;
    g_ucTouch = TOUCH_GetKey();
    if(g_ucTouch == 1)
    {
        xPhys = ts_event.x1;
          yPhys = ts_event.y1;
        GUI_TOUCH_StoreState(ts_event.x1, ts_event.y1);   
    }
   
    return ts_event.x1;        
}


int  GUI_TOUCH_X_MeasureY(void)
{   
    //return(g_tTP.usAdcNowY);
    int xPhys = -1,yPhys = -1;
    g_ucTouch = TOUCH_GetKey();
     
    if(g_ucTouch == 1)
    {
        xPhys = ts_event.x1;
          yPhys = ts_event.y1;
        GUI_TOUCH_StoreState(ts_event.x1, ts_event.y1);   
            
    }
    return ts_event.y1;   
}

在UCos中建立触摸屏任务:
  static void uctsk_TouchPanel (void)
{  
    int8_t    temp[8]={0};
    uint16_t tempx=0,tempy=0;
    GUI_PID_STATE th;
    int Touch_Count = 0;
   
    GPIO_InitTypeDef  GPIO_InitStructure;
    TOUCH_Init();                    //触摸屏初始化
       for(;;)
       {

       GUI_TOUCH_Exec();             //
           if (!GUI_Exec())
            GUI_X_ExecIdle();
       GUI_TOUCH_GetState(&th);        //得到采样的AD点
       //调试触摸屏输出的AD值
        //th.x = GUI_TOUCH_X_MeasureX();
        //th.y = GUI_TOUCH_X_MeasureY();
       if(th.x != 0 && th.y != 0)
        {
            sprintf(temp,"X:%4d,Y:%4d",th.x,th.y);
            GUI_DispStringAt(temp,100,100);               //显示的触摸屏点坐标是对的
            memset(temp,0,sizeof(temp));
            tempx = th.x;
            tempy = th.y;
        }
       OSTimeDlyHMSM(0, 0, 0, 20);     /* 20 MS  延时20ms*/
    }
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2014-1-17 09:59:49 | 显示全部楼层
GUI_WaitKey()和GUI_GetKey()的使用还没有研究过,我一般是在回调函数里面做消息处理
回复

使用道具 举报

8

主题

17

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2014-1-17 10:03:13 | 显示全部楼层
回调函数里面我也试过,也没有该释放按钮ID的响应,说白了,就是STemwin控件检测不到按钮按下的ID,继续请求帮助,之前在UCGUI3.98都可以获取按钮的ID,可能是哪个地方遗漏了
回复

使用道具 举报

8

主题

17

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2014-1-17 11:57:00 | 显示全部楼层
自己顶一顶,很急啊,在线等,谢谢大家
回复

使用道具 举报

8

主题

17

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2014-1-20 08:28:38 | 显示全部楼层
继续求助中,谢谢大家
回复

使用道具 举报

32

主题

298

回帖

394

积分

高级会员

积分
394
发表于 2015-12-18 10:42:47 | 显示全部楼层
我现在也是 没搞明白 按键函数和里面的控件是如何对应上的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-16 13:58 , Processed in 0.040400 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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