按键松手检测方法求

[复制链接]
8738|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 | 显示全部楼层
楼主新手,没有理解状态机的精髓,哈哈
NE5532 发表于 2010-9-22 10:27 | 显示全部楼层
状态机呀状态机。

学PC键盘,用KeyOn和KeyOFF来做,你爱按多久按多久。
mcu_lover 发表于 2010-9-22 11:59 | 显示全部楼层
在判定按下之后,再定时检测是否松开即可。
singleywy 发表于 2010-9-22 12:14 | 显示全部楼层
LS正解,这样就可以做其他事了,也可以设立标志暂时不操作,运行到这里时再进行检测,可用状态机思想
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

56

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部