打印

按键松手检测方法求

[复制链接]
7768|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xieshenkui|  楼主 | 2010-9-21 09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我常用while(!KEY);来做松手检测,对于有些程序可以,但有些考虑到按下按键但不放手,程序就停在这条语句了,那么,进入中断函数后的一些变量改变了但希望在主函数中处理这些变量相应的操作,(如写液晶),那程序就执行不到相关的操作,因为停止在按键检测语句,这样会造成时间段错乱的情况,请教高手指点其它的按键检测方法!
以下是一段例程
void MODE_key()
{
if(MODE == 0)
{
  delay(5);
  if(MODE == 0)
  {
   buzzer();
   mode ++;
   if(mode == 5)
    mode = 0;
   Write_1621(7,Mode7[mode]);//MODE显示函数
   Write_1621(8,Mode8[mode]);
   while( ! MODE);
  }
}
}

相关帖子

沙发
new1988| | 2010-9-21 09:59 | 只看该作者
在松手检测延时的时候,让CPU去干别的事不就得了。不需要在那里死等,等时间到了,再回来判断按键是否按下。这样就不会耽误CPU干其他的事了。要学会分时复用

使用特权

评论回复
板凳
ayb_ice| | 2010-9-21 10:01 | 只看该作者
while(!KEY);这样的程序只适合单任务情况,或其它任务由中断执行
解决的办法是间隔查询按键是否松开,一般要状态机配合...

使用特权

评论回复
地板
xixihaha0| | 2010-9-22 08:47 | 只看该作者
楼主新手,没有理解状态机的精髓,哈哈

使用特权

评论回复
5
NE5532| | 2010-9-22 10:27 | 只看该作者
状态机呀状态机。

学PC键盘,用KeyOn和KeyOFF来做,你爱按多久按多久。

使用特权

评论回复
6
mcu_lover| | 2010-9-22 11:59 | 只看该作者
在判定按下之后,再定时检测是否松开即可。

使用特权

评论回复
7
singleywy| | 2010-9-22 12:14 | 只看该作者
LS正解,这样就可以做其他事了,也可以设立标志暂时不操作,运行到这里时再进行检测,可用状态机思想

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

56

帖子

2

粉丝