原子哥,使用F4开发板时,我配的是4.3寸液晶屏+电容屏,运行综合演示程序时,我点击那个“计算器”功能程序,
进入点击计算器的数字软键盘时,用手点触摸屏的数字进行输入时,会出现无反应或者程序一下子就死掉了;或者是进入到“ 拨号” 程序,点击 输入 电话号码时,多点几次,点数字按键时会经常出现无反应状态。
后来我怀疑是触屏有问题,但是电容触摸屏点击其他的都是正常的。
我换了一块 2.8寸的电阻式屏,发现点击正常。所以应该是软件问题。
现在问题是,我要用4.3寸屏和4.3寸电容式触摸屏,像“计算器” 程序那样的数字输入界面,程序要怎么改,才能输入正常?进入到“计算器”后点击数字按键,或者进入到“拨号”程序,点击数字按键,会反应流畅?才会不死机呢?
求助哈。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
[mw_shl_code=c,true]//扫描触摸屏(采用查询方式) //mode:0,正常扫描. //返回值:当前触屏状态. //0,触屏无触摸;1,触屏有触摸 u8 GT9147_Scan(u8 mode) { u8 buf[4]; u8 i=0; u8 res=0; u8 temp; u8 tempsta; static u8 t=0;//控制查询间隔,从而降低CPU占用率 t++; if((t%10)==0||t<10)//空闲时,每进入10次CTP_Scan函数才检测1次,从而节省CPU使用率 { GT9147_RD_Reg(GT_GSTID_REG,&mode,1); //读取触摸点的状态 if(mode&0X80&&((mode&0XF)<6)) { temp=0; GT9147_WR_Reg(GT_GSTID_REG,&temp,1);//清标志 } if((mode&0XF)&&((mode&0XF)<6)) { temp=0XFF<<(mode&0XF); //将点的个数转换为1的位数,匹配tp_dev.sta定义 tempsta=tp_dev.sta; //保存当前的tp_dev.sta值 tp_dev.sta=(~temp)|TP_PRES_DOWN|TP_CATH_PRES; tp_dev.x[4]=tp_dev.x[0]; //保存触点0的数据 tp_dev.y[4]=tp_dev.y[0]; for(i=0;i<5;i++) { if(tp_dev.sta&(1<<i)) //触摸有效? { GT9147_RD_Reg(GT9147_TPX_TBL,buf,4); //读取XY坐标值 if(tp_dev.touchtype&0X01)//横屏 { tp_dev.y=((u16)buf[1]<<8)+buf[0]; tp_dev.x=800-(((u16)buf[3]<<8)+buf[2]); }else { tp_dev.x=((u16)buf[1]<<8)+buf[0]; tp_dev.y=((u16)buf[3]<<8)+buf[2]; } //printf("x[%d]:%d,y[%d]:%d ",i,tp_dev.x,i,tp_dev.y); } } res=1; if(tp_dev.x[0]>lcddev.width||tp_dev.y[0]>lcddev.height)//非法数据(坐标超出了) { if((mode&0XF)>1) //有其他点有数据,则复第二个触点的数据到第一个触点. { tp_dev.x[0]=tp_dev.x[1]; tp_dev.y[0]=tp_dev.y[1]; t=0; //触发一次,则会最少连续监测10次,从而提高命中率 }else //非法数据,则忽略此次数据(还原原来的) { tp_dev.x[0]=tp_dev.x[4]; tp_dev.y[0]=tp_dev.y[4]; mode=0X80; tp_dev.sta=tempsta; //恢复tp_dev.sta } }else t=0; //触发一次,则会最少连续监测10次,从而提高命中率 } } if((mode&0X8F)==0X80)//无触摸点按下 { 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; //清除点有效标记 } } if(t>240)t=10;//重新从10开始计数 return res; } [/mw_shl_code]
一周热门 更多>