标题:
单片机按键程序有时候触发不了是为什么?
[打印本页]
作者:
Nupo
时间:
2023-6-20 08:55
标题:
单片机按键程序有时候触发不了是为什么?
void Key_Scan(void)
{
if(S1 == 0)
{
Old_flag = S1;
gKeyCnt++;
}
else
{
if(Old_flag == 0)
{
Old_flag = S1;
if(gKeyCnt>3&&gKeyCnt<1000)
{
if(gKeyValue < 10)
{
gKeyValue++;
}
else
{
gKeyValue = 0;
}
}
//--------处理键值-------------------------
switch(gKeyValue)
{
case 0:
{
Sleep_Flag = 0;
break;
}
case 1:
{
Red = 0;
break;
}
case 2:
{
Green = 0;
break;
}
case 3:
{
Red = 1;
break;
}
case 4:
{
Blue = 0;
break;
}
case 5:
{
Green = 1;
break;
}
case 6:
{
Red = 0;
break;
}
case 7:
{
Green = 0;
break;
}
case 8:
{
Auto_Flag = 1;
Red = 1;
Green = 1;
Blue = 1;
break;
}
case 9:
{
Auto_Flag = 0;
Breath_Flag = 1;
break;
}
case 10:
{
Breath_Flag = 0;
Sleep_Flag = 0;
break;
}
}
Delay_Off();
}
else
{
gKeyCnt = 0;
}
}
}
复制代码
有没有大佬帮我看一下啊,按键有时候会触发不了,呼吸灯和自动流水,都是在delay里加了keyscan,检测到标志位就break,拜求各位大佬了!!!
作者:
lkc8210
时间:
2023-6-20 11:05
呼吸灯和自动流水都不要用delay
作者:
clzs19
时间:
2023-6-21 11:03
因为单片机执行的速度过快,也由于程序的复杂程度使程序走到部分代码阶段会出不去,出不去就一直执行.在你按按键和执行中断的时候刚好走进这个循环里,程序判断当然是进入中断,然后中断完了回来这个循环造成这个循环变死循环了.也就是你中断改变了一些因子使程序原本那个循环的因子突然遭到改变而出不去.然后死循环了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1