OpenEdv-开源电子网

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

STM32 mini 的触摸屏测试代码好像有点小问题 ?

[复制链接]

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-4-17 20:18:08 | 显示全部楼层 |阅读模式

if(Pen_Point.Key_Sta==Key_Down)//觸摸屏被按下
{
Pen_Int_Set(0);//關閉中斷
do
{
Convert_Pos();
Pen_Point.Key_Sta=Key_Up; 
POINT_COLOR=BLUE;
LCD_ShowString(105,2,"X=");
          LCD_ShowString(170,2,"Y=");
   LCD_ShowNum(130,2,Pen_Point.X0,3,16);
   LCD_ShowNum(190,2,Pen_Point.Y0,3,16);

if ((Pen_Point.X0>175 && Pen_Point.X0<240) && (Pen_Point.Y0>260 && Pen_Point.Y0<320))   {
POWER_KEY_PRESS=1;
}

LED0=0;
   } while(PEN==0);//如果PEN一直有效,則一直執行

LED0=1;
  Pen_Int_Set(1);//開啟中斷



依照这个代码,  我设了一个ON/OFF按键,  在同一位置, 按一次是 "开机",  再按第2次时是 "关机"  (取反).
但发现, 从关机变成开机后的 "第1次" ,   我按画面的其它任何位置,  有很高的机率被误判成 "又按一次开关键",  
结果又关机了.   特别是轻轻触碰的时候.       反过来先在开机状态,  用同样方式, 也会误判又自己变 "关机" 状态.
并且这动作只会出现在转变后的 "第1次" .     轻轻按其它区域特别会出现这问题, 于是我在画面写上读到的触碰XY座标,
结果真的是抓成上一次的座标值(即电源位置),     不知道其它人会发生这问题吗 ?

如果触控按键不是设计成取反的这种功能,  则可能不容易发现 . 



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
 楼主| 发表于 2013-4-17 20:22:19 | 显示全部楼层
Touch 函式库 :

void Convert_Pos(void)
{  
if(Read_ADS2(&en_Point.X,&en_Point.Y)) {
Pen_Point.X0=Pen_Point.xfac*Pen_Point.X+Pen_Point.xoff;
Pen_Point.Y0=Pen_Point.yfac*Pen_Point.Y+Pen_Point.yoff;  
}
}    

if(Read_ADS2 .....     如果这个if没有成立,  意谓著 en_Point.X0 与 en_Point.Y0 会是最后一次数值吗 ?

可能就是因为座标没有成功读到新值, 所以造成这种误判现象吗?
不知各位能不能明白我在说什么?    呵呵~~

一但转变状态后 第1次触碰别的地方没发生误判时,   其它触控按键就完全正常了.   不会再误动作,
除非再去按下 "开关机"  就会关机.    这里的动作倒是完全正常 .
所以我才会怀疑是否原始代码有一点小问题  ??









回复 支持 反对

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2386
金钱
2386
注册时间
2012-11-22
在线时间
403 小时
发表于 2013-4-17 20:30:58 | 显示全部楼层
我上次移植这个代码的时候,屏幕校准一直没成功过,后来移植的战舰的,才成功的。
态度决定一切
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-17 20:37:13 | 显示全部楼层
回复【楼主位】liuje:
---------------------------------
这个代码是没做连续按键检测的.
你做触摸按键的时候,这个是必须考虑的,就是防止一次按下,多次触发.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
 楼主| 发表于 2013-4-17 22:19:16 | 显示全部楼层
明白了, 相当是轻触按键的debounce(反弹跳就对了).
所以必须自己加上这个判断. 

谢谢.

回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
 楼主| 发表于 2013-4-18 21:11:14 | 显示全部楼层
解决触碰按键的弹跳问题了...    每个按键都设个旗号,  等到按键放开后再去判断按键然做对应动作就行了...
如果要能按住时, 按一定速率产生连续按键动作(可让调整的数字快速滚动), 就要再改一下...

while(1)
{
     if(Pen_Point.Key_Sta==Key_Down)//觸摸屏被按下
{
Pen_Int_Set(0);//關閉中斷
do
{
Convert_Pos();
Pen_Point.Key_Sta=Key_Up; 

POINT_COLOR=BLUE;
LCD_ShowString(105,2,"X=");
            LCD_ShowString(170,2,"Y=");
    LCD_ShowNum(130,2,Pen_Point.X0,3,16);
    LCD_ShowNum(190,2,Pen_Point.Y0,3,16);

if ((Pen_Point.X0>175 && en_Point.X0<240) && (Pen_Point.Y0>260 && en_Point.Y0<320))   {   //按了電源開關 ?
POWER_KEY_PRESS=1;
}
else {
POWER_KEY_PRESS=0;
}  
if ((Pen_Point.X0>80 && en_Point.X0<120) && (Pen_Point.Y0>70 && en_Point.Y0<110))   {   //按了設定溫度UP ?
    TEMP_UP_PRESS=1;
}
else {
    TEMP_UP_PRESS=0;
}
  if ((Pen_Point.X0>20 && en_Point.X0<60) && (Pen_Point.Y0>70 && en_Point.Y0<110))   {   //按了設定溫度DOWN?
TEMP_DOWN_PRESS=1;
}
else {
TEMP_DOWN_PRESS=0;
}
  if ((Pen_Point.X0>80 && en_Point.X0<120) && (Pen_Point.Y0>180 && en_Point.Y0<220))   {   //按了設定濕度UP?
    HUMI_UP_PRESS=1;
    }
else {
HUMI_UP_PRESS=0;
}
if ((Pen_Point.X0>20 && en_Point.X0<60) && (Pen_Point.Y0>180 && en_Point.Y0<220))   {   //按了設定濕度DOWN?
    HUMI_DOWN_PRESS=1;
}
else {
    HUMI_DOWN_PRESS=0;
}
if ((Pen_Point.X0>80 && Pen_Point.X0<120) && (Pen_Point.Y0>285 && Pen_Point.Y0<320))   {   //按了設定VOC UP?
VOC_UP_PRESS=1;
}  
else {
VOC_UP_PRESS=0;
}
    if ((Pen_Point.X0>20 && Pen_Point.X0<60) && (Pen_Point.Y0>285 && Pen_Point.Y0<320))   {   //按了設定VOC DOWN?
VOC_DOWN_PRESS=1;
}
else {
    VOC_DOWN_PRESS=0;
    }
 
LED0=0;
    } while(PEN==0);//如果PEN一直有效,則一直執行

LED0=1;
    Pen_Int_Set(1);//開啟中斷
 }  

 if (TEMP_UP_PRESS && (TEMP_SET<50))  TEMP_SET++;
 if (TEMP_DOWN_PRESS && (TEMP_SET>0)) TEMP_SET--;
     if (HUMI_UP_PRESS && (HUMI_SET<99)) HUMI_SET++;
 if (HUMI_DOWN_PRESS && (HUMI_SET>10)) HUMI_SET--;
 if (VOC_UP_PRESS && (VOC_SET<99)) VOC_SET++;
 if (VOC_DOWN_PRESS && (VOC_SET>0)) VOC_SET--;

 TEMP_UP_PRESS=0;
 TEMP_DOWN_PRESS=0;
 HUMI_UP_PRESS=0;
 HUMI_DOWN_PRESS=0;
 VOC_UP_PRESS=0;
 VOC_DOWN_PRESS=0;
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-21 02:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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