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) 这条语句的?
感觉这个程序怪的不行了。请原子和各位大神帮忙解释一下
|