OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7592|回复: 3

F4板子 综合程序 的计算器程序点击无反应

[复制链接]

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-1-23
在线时间
2 小时
发表于 2015-4-9 01:07:53 | 显示全部楼层 |阅读模式
5金钱
原子哥,使用F4开发板时,我配的是4.3寸液晶屏+电容屏,运行综合演示程序时,我点击那个“计算器”功能程序,
进入点击计算器的数字软键盘时,用手点触摸屏的数字进行输入时,会出现无反应或者程序一下子就死掉了;或者是进入到“ 拨号” 程序,点击 输入 电话号码时,多点几次,点数字按键时会经常出现无反应状态。
后来我怀疑是触屏有问题,但是电容触摸屏点击其他的都是正常的。
我换了一块 2.8寸的电阻式屏,发现点击正常。所以应该是软件问题。
现在问题是,我要用4.3寸屏和4.3寸电容式触摸屏,像“计算器” 程序那样的数字输入界面,程序要怎么改,才能输入正常?进入到“计算器”后点击数字按键,或者进入到“拨号”程序,点击数字按键,会反应流畅?才会不死机呢?

求助哈。

最佳答案

查看完整内容[请看2#楼]

 代码的bug,4.3屏在某些时候,会输出大于480*800的坐标,你用给我给你的这个函数,替换原来的GT9147_SCAN函数即可。 [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 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-4-9 01:07:54 | 显示全部楼层
 代码的bug,4.3屏在某些时候,会输出大于480*800的坐标,你用给我给你的这个函数,替换原来的GT9147_SCAN函数即可。
[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\r\n",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]

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

70

主题

6756

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12983
金钱
12983
注册时间
2012-11-26
在线时间
3787 小时
发表于 2015-4-9 08:04:43 | 显示全部楼层
你自己没乱改过东西?
学无止境
回复

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-1-23
在线时间
2 小时
 楼主| 发表于 2015-4-10 14:22:58 | 显示全部楼层
谢谢原子哥的支持!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 12:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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