|
大家好!
本人做一個帶按鍵設(shè)置和數(shù)碼管顯示的板子,現(xiàn)在想實現(xiàn)一個功能,就是在開機(jī)時,數(shù)碼管先顯示歡迎界面,如顯示HELLO,顯示3秒后自動進(jìn)入按鍵設(shè)置界。HELLO界面只在開機(jī)時顯示一次,后面就一直顯示按鍵設(shè)置界面。
這部分程序如下:
uint8_t number_cnt=3;
uint8_t next_step=0;
int main(void)
{
switch (next_step)
{
case 0:
do
{
WELCOME_DISPLAY(); // HELLO顯示函數(shù),開機(jī)后執(zhí)行該函數(shù)數(shù)碼管顯示HELLO
} while (number_cnt !=0) //number_cnt初值為3,在定時器中斷中自減直到0跳出循環(huán)
if (number_cnt==0)
{
next_step=1; //跳轉(zhuǎn)到case 1, 執(zhí)行case 1中的程序
}
break;
case 1:
while(1)
{
KEY_SET_DISPLAY(); //按鍵設(shè)置程序
}
break;
}
}
ISR(TIMER1_vect) //定時器中斷服務(wù)程序,1s進(jìn)一次中斷
{
if (number_cnt !=0)
{
number_cnt --;
}
else
{
next_step=1;
}
}
上述程序從邏輯上看,看不出什么問題(也可能是我的能力有限,看不出問題),應(yīng)該是能實現(xiàn)上述功能,但是實際情況是,我把代碼燒錄進(jìn)板子后,開機(jī)后HELLO確實顯示出來了,但是過了大概3秒多,HELLO消失后,數(shù)碼管就黑屏了。感覺是沒有進(jìn)入到case 1中去,沒有執(zhí)行KEY_SET_DISPLAY();,不太理解為啥沒有跳轉(zhuǎn)到case 1中去,因為我在case 0中有設(shè)置跳轉(zhuǎn)條件,當(dāng)number_cnt=0的時候,就跳轉(zhuǎn)到next_step=1, number_cnt
在中斷中自減,肯定會最終減到0.
還是因為switch case中不能有while(1)循環(huán)?
百思不得其解,希望各位大佬賜教!感謝!
|
|