这是我自己编的一个单片机程序,是关于独立按键控制LED灯的。

现在这个程序只能实现按键按下去的时候,灯亮;按键弹起的时候,灯灭。我知道要加一个松手检测(如while(!key);),但我加的位置却不能实现(位置在红色箭头标记处)想知... 现在这个程序只能实现按键按下去的时候,灯亮;按键弹起的时候,灯灭。我知道要加一个松手检测(如 while(!key); ),但我加的位置却不能实现(位置在红色箭头标记处)想知道怎么解决。。。 展开
 我来答
烟火夜空
2017-01-17 · TA获得超过6623个赞
知道大有可为答主
回答量:1678
采纳率:93%
帮助的人:569万
展开全部
你“知道”的是错的。没有规定,松手检测用while(!key),那都是不懂设计的商家瞎扯出来的。要不就是刚毕业的新手凭感觉瞎搞的。
真正的松手检测是这样的:
发现按键按下→记录按键值,记录按键按下;
发现没有按键,且已记录按下(这就是松手)→根据记录的键值处理按键,清除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 就靠自己
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式