大家好!
本人做一个带按键设置和数码管显示的板子,现在想实现一个功能,就是在开机时,数码管先显示欢迎界面,如显示HELLO,显示3秒后自动进入按键设置界。HELLO界面只在开机时显示一次,后面就一直显示按键设置界面。
这部分程序如下:
uint8_t number_cnt=3;
uint8_t next_step=0;
int main(void)
{
switch (next_step)
{
case 0:
do
{
WELCOME_DISPLAY(); // HELLO显示函数,开机后执行该函数数码管显示HELLO
} while (number_cnt !=0) //number_cnt初值为3,在定时器中断中自减直到0跳出循环
if (number_cnt==0)
{
next_step=1; //跳转到case 1, 执行case 1中的程序
}
break;
case 1:
while(1)
{
KEY_SET_DISPLAY(); //按键设置程序
}
break;
}
}
ISR(TIMER1_vect) //定时器中断服务程序,1s进一次中断
{
if (number_cnt !=0)
{
number_cnt --;
}
else
{
next_step=1;
}
}
上述程序从逻辑上看,看不出什么问题(也可能是我的能力有限,看不出问题),应该是能实现上述功能,但是实际情况是,我把代码烧录进板子后,开机后HELLO确实显示出来了,但是过了大概3秒多,HELLO消失后,数码管就黑屏了。感觉是没有进入到case 1中去,没有执行KEY_SET_DISPLAY();,不太理解为啥没有跳转到case 1中去,因为我在case 0中有设置跳转条件,当number_cnt=0的时候,就跳转到next_step=1, number_cnt
在中断中自减,肯定会最终减到0.
还是因为switch case中不能有while(1)循环?
百思不得其解,希望各位大佬赐教!感谢!
|