OpenEdv-开源电子网

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

触摸屏程序有点怪问题...真的狠怪滴.....各位大神来呀~~~原子大神,速度~~~

[复制链接]

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
发表于 2012-11-16 08:45:23 | 显示全部楼层 |阅读模式

 if(Pen_Point.Key_Sta==Key_Down)    //笔按下了
  {
   en_Int_Set(0);//关闭中断
   do
   {
    Convert_Pos();
    en_Point.Key_Sta=Key_Up;
    if(Pen_Point.X0>216&&en_Point.Y0<16)
    {
         Flag=0;
         Load_Drow_Dialog();//清除 
    }
    else if(Pen_Point.X0>30&&en_Point.X0<150&&en_Point.Y0<16) 
    {
         Flag=1;  //显示标志
    }
    else
    {      Flag=0;
          Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0);  //画图
          GPIOC->ODR|=1<<1;    //PC1 上拉   
    } 
   }while(PEN==0);  //如果PEN一直有效,则一直执行    
   if(Flag==1) 
   {
           Flag=0;
           LCD_ShowString(60,50,"Mini STM32"); 
   }

   en_Int_Set(1);//开启中断
  }


这是触摸屏主程序一部分,其他的都没问题的。就是这个主程序中 do...while 语句有问题。
   咋一看好像是没问题的。 我在原子程序上添加了一点点,那个Flag标志我已经定义了。
      很明显,如果在    Pen_Point.X0>30&&en_Point.X0<150&&en_Point.Y0<16       这个范围内有笔按下的话,Flag就会被赋值为1.
   当笔不松开时,程序会一直在do...while 里面循环。如果笔在这个范围内松开的话,就会进入 if(Flag==1) 这个条件语句里。
         因为我是在   Pen_Point.X0>30&&en_Point.X0<150&&en_Point.Y0<16   这个范围内松开笔的,故而Flag应该是等于1的。
  所以  if(Flag==1)  这个条件语句应当成立,同时 执行  LCD_ShowString(60,50,"Mini STM32");   指令,让LCD屏,显示对应的数据。
      

       是我在用的时候,并不是这样的。  LCD_ShowString(60,50,"Mini STM32");     这个语句根本就没有执行。也就是说在笔松开的时候Flag根本就不是1.如果我把这个  LCD_ShowString(60,50,"Mini STM32");  
              放到 do...while循环的               Pen_Point.X0>30&&Pen_Point.X0<150&&Pen_Point.Y0<16     中的话,那么就会显示正常。     
          我又试了下,如果按下清除这个区域的话, LCD_ShowString(60,50,"Mini STM32");   这个语句会无缘无故显示出来。
     但是在  do....while  语句里面   清除区域的程序里面  Flag是赋值为0的啊,怎么可能在松开笔的时候会无缘无故让Flag为1,从而进入
     if(Flag==1) 这条语句的?   
 
           感觉这个程序怪的不行了。请原子和各位大神帮忙解释一下 
    

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

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-11-16 08:55:55 | 显示全部楼层
有个地方弄错了,上面这个程序,如果按 清除区域 的话,LCD_ShowString(60,50,"Mini STM32");  这个不会执行。但是别的问题还在,按下  Flag  那个区域的话,依然不会执行 LCD_ShowString(60,50,"Mini STM32");  这个语句
   
      下面这种格式的,按下  清除区域的话 LCD_ShowString(60,50,"Mini STM32");   这个才会执行。但是按下别的区域的话,却不会执行。

    
       if(Pen_Point.Key_Sta==Key_Down)    //笔按下了
  {
   en_Int_Set(0);//关闭中断
   do
   {
    Convert_Pos();
    en_Point.Key_Sta=Key_Up;
    if(Pen_Point.X0>216&&Pen_Point.Y0<16)
    {
         Flag=0;
         Load_Drow_Dialog();//清除 
    }
    else if(Pen_Point.X0>30&&Pen_Point.X0<150&&Pen_Point.Y0<16) 
    {
         Flag=1;  //显示标志
    }
    else
    {      Flag=0;
          Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0);  //画图
          GPIOC->ODR|=1<<1;    //PC1 上拉    
    } 
   }while(PEN==0);  //如果PEN一直有效,则一直执行    
    LCD_ShowString(60,50,"Mini STM32"); 
  

   en_Int_Set(1);//开启中断
  }

            这种情况是:  按下别的区域 LCD_ShowString(60,50,"Mini STM32"); 都不会执行。
                      如果按下  清除区域   LCD_ShowString(60,50,"Mini STM32");   这个才会执行。


      

回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-11-16 09:08:47 | 显示全部楼层
      else if(Pen_Point.X0>30&&en_Point.X0<150&&en_Point.Y0<16)  
        { 
                 Flag=1;  //显示标志 
       } 
 我在这个程序里面  改成下面这个模式,那MINI STM32 字符串又可以显示了
      else if(Pen_Point.X0>30&&en_Point.X0<150&&en_Point.Y0<16)  
        { 
                 Flag=1;  //显示标志 
                  Load_Drow_Dialog();
       }  

  
  这是为什么呢?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 22:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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