C语言中,利用中断判断按键实现单击和长按,但是现在连续单击好几次也会导致开关机是代码哪里不对吗?

如题所述

第1个回答  2021-03-25

你按键抖动造成的。

你在等待按键松开(keyPorthIn==0)开始计时(key_std++)之前,写一个延时5~10ms,再判断一次keyPorthIn的值,确定key的值还是0,才说明键已经按下去了,再开始计时判断。

第2个回答  2021-03-26
利用中断判断按键的话,无需这样复杂;
如16mS中断一次。那么在中断例程里;
static uint key_status
if(key_x==0)key_status++;
else{
if(key_status<m && key_status>n) // n=40,m=200,根据调试效果设定
{........} //为单击事件
if(key_status>m)
{........} //为长按事件
key_status=0; //为下一次按键准备
}本回答被提问者采纳
相似回答