初级会员

- 积分
- 100
- 金钱
- 100
- 注册时间
- 2018-7-10
- 在线时间
- 45 小时
|
20金钱
阿波罗H743+1024*600,以下为红色部分为更改的代码,触摸之后显示直接部分重叠和背景图片显示错误,望能提供建议,谢谢。- //TOUCH任务
- void touch_task(void *p_arg)
- {
- OS_ERR err;
-
- while(1)
- {
- <font color="#ff0000"> OSSchedLock(&err);
- tp_dev.scan(0);
- OSSchedUnlock(&err);
- //GUI_TOUCH_Exec();
- OSTimeDlyHMSM(0,0,0,20,OS_OPT_TIME_PERIODIC,&err);//延时5ms</font>
- }
- }
复制代码
- u8 FT5206_Scan(u8 mode)
- {
- u8 buf[4];
- u8 i=0;
- u8 res=0;
- u8 temp;
- GUI_PID_STATE State;
-
- static u8 t=0;//控制查询间隔,从而降低CPU占用率
- t++;
- if((t%10)==0||t<10)//空闲时,每进入10次CTP_Scan函数才检测1次,从而节省CPU使用率
- {
- FT5206_RD_Reg(FT_REG_NUM_FINGER,&mode,1);//读取触摸点的状态
- if((mode&0XF)&&((mode&0XF)<6))
- {
- temp=0XFF<<(mode&0XF);//将点的个数转换为1的位数,匹配tp_dev.sta定义
- tp_dev.sta=(~temp)|TP_PRES_DOWN|TP_CATH_PRES;
- for(i=0;i<5;i++)
- {
- if(tp_dev.sta&(1<<i)) //触摸有效?
- {
- FT5206_RD_Reg(FT5206_TPX_TBL[i],buf,4); //读取XY坐标值
- if(tp_dev.touchtype&0X01)//横屏
- {
- tp_dev.y[i]=((u16)(buf[0]&0X0F)<<8)+buf[1];
- tp_dev.x[i]=((u16)(buf[2]&0X0F)<<8)+buf[3];
- }else
- {
- tp_dev.x[i]=lcddev.width-(((u16)(buf[0]&0X0F)<<8)+buf[1]);
- tp_dev.y[i]=((u16)(buf[2]&0X0F)<<8)+buf[3];
- }
- if((buf[0]&0XF0)!=0X80)tp_dev.x[i]=tp_dev.y[i]=0;//必须是contact事件,才认为有效
- //printf("x[%d]:%d,y[%d]:%d\r\n",i,tp_dev.x[i],i,tp_dev.y[i]);
- }
- }
- res=1;
- if(tp_dev.x[0]==0 && tp_dev.y[0]==0)mode=0; //读到的数据都是0,则忽略此次数据
- <font color="#ff0000"> else
- {
- #if GUI_NUM_LAYERS == 1
- State.Layer = 0;
- #elif GUI_NUM_LAYERS == 2
- State.Layer = 1;
- #endif
- State.Pressed=1;
- State.x=tp_dev.x[0];
- State.y=tp_dev.y[0];
- GUI_PID_StoreState(&State);
- }</font>
- t=0; //触发一次,则会最少连续监测10次,从而提高命中率
- }
- }
- if((mode&0X1F)==0)//无触摸点按下
- {
- if(tp_dev.sta&TP_PRES_DOWN) //之前是被按下的
- {
- tp_dev.sta&=~(1<<7); //标记按键松开
- }else //之前就没有被按下
- {
- tp_dev.x[0]=0xffff;
- tp_dev.y[0]=0xffff;
- tp_dev.sta&=0XE0; //清除点有效标记
- }
- <font color="#ff0000"> #if GUI_NUM_LAYERS == 1
- State.Layer = 0;
- #elif GUI_NUM_LAYERS == 2
- State.Layer = 1;
- #endif
- State.Pressed=0;
- State.x=-1;
- State.y=-1;
- GUI_PID_StoreState(&State);</font>
- }
- if(t>240)t=10;//重新从10开始计数
- return res;
- }
复制代码
|
|