|
大家好,
我在移植斑竹的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*/
}
} |
|