找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3015|回復(fù): 7
收起左側(cè)

單片機(jī)C語(yǔ)言程序看似邏輯正確的代碼卻無(wú)法運(yùn)行,百思不得其解

[復(fù)制鏈接]
ID:997026 發(fā)表于 2022-1-15 19:54 | 顯示全部樓層 |閱讀模式
大家好!

本人做一個(gè)帶按鍵設(shè)置和數(shù)碼管顯示的板子,現(xiàn)在想實(shí)現(xiàn)一個(gè)功能,就是在開(kāi)機(jī)時(shí),數(shù)碼管先顯示歡迎界面,如顯示HELLO,顯示3秒后自動(dòng)進(jìn)入按鍵設(shè)置界。HELLO界面只在開(kāi)機(jī)時(shí)顯示一次,后面就一直顯示按鍵設(shè)置界面。

這部分程序如下:

uint8_t    number_cnt=3;
uint8_t    next_step=0;


int main(void)
{

   switch (next_step)
   {

     case 0:

      do
       {
          WELCOME_DISPLAY();  // HELLO顯示函數(shù),開(kāi)機(jī)后執(zhí)行該函數(shù)數(shù)碼管顯示HELLO
       } while (number_cnt !=0)  //number_cnt初值為3,在定時(shí)器中斷中自減直到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)    //定時(shí)器中斷服務(wù)程序,1s進(jìn)一次中斷
{

      if (number_cnt !=0)
        {
           number_cnt --;
        }

     else
       {
          next_step=1;
       }

}

上述程序從邏輯上看,看不出什么問(wèn)題(也可能是我的能力有限,看不出問(wèn)題),應(yīng)該是能實(shí)現(xiàn)上述功能,但是實(shí)際情況是,我把代碼燒錄進(jìn)板子后,開(kāi)機(jī)后HELLO確實(shí)顯示出來(lái)了,但是過(guò)了大概3秒多,HELLO消失后,數(shù)碼管就黑屏了。感覺(jué)是沒(méi)有進(jìn)入到case 1中去,沒(méi)有執(zhí)行KEY_SET_DISPLAY();,不太理解為啥沒(méi)有跳轉(zhuǎn)到case 1中去,因?yàn)槲以赾ase 0中有設(shè)置跳轉(zhuǎn)條件,當(dāng)number_cnt=0的時(shí)候,就跳轉(zhuǎn)到next_step=1, number_cnt
在中斷中自減,肯定會(huì)最終減到0.

還是因?yàn)閟witch case中不能有while(1)循環(huán)?

百思不得其解,希望各位大佬賜教!感謝!
回復(fù)

使用道具 舉報(bào)

ID:625730 發(fā)表于 2022-1-15 22:43 | 顯示全部樓層
switch只執(zhí)行了一次,main函數(shù)就結(jié)束了,next_step值變成1的時(shí)候,沒(méi)再調(diào)用switch函數(shù)了,因此沒(méi)有進(jìn)入while(1)循環(huán)。
回復(fù)

使用道具 舉報(bào)

ID:8222 發(fā)表于 2022-1-15 22:53 | 顯示全部樓層
switch (next_step)沒(méi)有大循環(huán),只執(zhí)行到case 0就跳出來(lái)了,不會(huì)執(zhí)行case 1 這部分代碼。
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2022-1-16 10:35 | 顯示全部樓層
看似邏輯正確的代碼實(shí)則不然
無(wú)標(biāo)題.jpg

測(cè)試程序 仿真.rar (82.88 KB, 下載次數(shù): 6)



回復(fù)

使用道具 舉報(bào)

ID:301968 發(fā)表于 2022-1-17 08:52 | 顯示全部樓層
改一下循環(huán)條件,其它都按圖刪除
51hei圖片_20220117085056.png
回復(fù)

使用道具 舉報(bào)

ID:997026 發(fā)表于 2022-1-18 20:53 | 顯示全部樓層
wulin 發(fā)表于 2022-1-16 10:35
看似邏輯正確的代碼實(shí)則不然

謝謝您提供的仿真程序!感謝
回復(fù)

使用道具 舉報(bào)

ID:997026 發(fā)表于 2022-1-18 20:56 | 顯示全部樓層
鄧文雄ABC 發(fā)表于 2022-1-17 08:52
改一下循環(huán)條件,其它都按圖刪除

感謝!我最后就用了個(gè)while(number_cnt>0), 其他都刪除了,看來(lái)我的代碼能力還是比較欠缺啊,寫(xiě)了一堆無(wú)用的東西!
回復(fù)

使用道具 舉報(bào)

ID:908826 發(fā)表于 2022-1-19 08:44 | 顯示全部樓層
我個(gè)人覺(jué)得case0的break刪除就能向后運(yùn)行了,或者就按5樓的改法。
#include <iostream>
using namespace std;
int main()
{
   int m = 1;
        switch (m)
        {
                case 1:
                        cout<<1<<endl;
                case 2:
                        cout<<2<<endl;
                        break;
                case 3:
                        cout<<3<<endl;
                        break;
                default:
                        cout<<5<<endl;
                        break;
        }
   return 0;
}

answer:1,2
不會(huì)上傳圖片,就把敲得驗(yàn)證程序直接粘過(guò)來(lái)了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表