这是我自己编的一个单片机程序,是关于独立按键控制LED灯的。
现在这个程序只能实现按键按下去的时候,灯亮;按键弹起的时候,灯灭。我知道要加一个松手检测(如while(!key);),但我加的位置却不能实现(位置在红色箭头标记处)想知...
现在这个程序只能实现按键按下去的时候,灯亮;按键弹起的时候,灯灭。我知道要加一个松手检测(如 while(!key); ),但我加的位置却不能实现(位置在红色箭头标记处)想知道怎么解决。。。
展开
1个回答
展开全部
你“知道”的是错的。没有规定,松手检测用while(!key),那都是不懂设计的商家瞎扯出来的。要不就是刚毕业的新手凭感觉瞎搞的。
真正的松手检测是这样的:
发现按键按下→记录按键值,记录按键按下;
发现没有按键,且已记录按下(这就是松手)→根据记录的键值处理按键,清除2个记录。
真正的松手检测是这样的:
发现按键按下→记录按键值,记录按键按下;
发现没有按键,且已记录按下(这就是松手)→根据记录的键值处理按键,清除2个记录。
追问
能不能麻烦你写一下这个程序,我想了半天了,也没成功。。。
谢谢
追答
#define TRUE 1
#define FALSE 0
void KeyResp()
{
static bit key_down_flag=FALSE,key_ready=FALSE;
if(!key)
{
key_down_flag=TRUE;
key_ready=TRUE;
}
else key_down_flag=FALSE;
if(!key_down_flag && key_ready)
{
LED=~LED;
key_ready=FALSE;
}
}
使用这种高效执行能力的程序,最好的按键消抖是用定时器,不过看你估计还没学定时器,就暂不写消抖了。如果非要使用delay 加消抖也行,在if(!key)里面。不过,我不同意这种方式,所以,想要delay 就靠自己
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询