大家好!
本人做一個帶按鍵設置和數碼管顯示的板子,現在想實現一個功能,就是在開機時,數碼管先顯示歡迎界面,如顯示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)循環?
百思不得其解,希望各位大佬賜教!感謝!
|