久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3072|回復: 7
收起左側

單片機C語言程序看似邏輯正確的代碼卻無法運行,百思不得其解

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

本人做一個帶按鍵設置和數碼管顯示的板子,現在想實現一個功能,就是在開機時,數碼管先顯示歡迎界面,如顯示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)循環?

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

使用道具 舉報

ID:625730 發表于 2022-1-15 22:43 | 顯示全部樓層
switch只執行了一次,main函數就結束了,next_step值變成1的時候,沒再調用switch函數了,因此沒有進入while(1)循環。
回復

使用道具 舉報

ID:8222 發表于 2022-1-15 22:53 | 顯示全部樓層
switch (next_step)沒有大循環,只執行到case 0就跳出來了,不會執行case 1 這部分代碼。
回復

使用道具 舉報

ID:213173 發表于 2022-1-16 10:35 | 顯示全部樓層
看似邏輯正確的代碼實則不然
無標題.jpg

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



回復

使用道具 舉報

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

使用道具 舉報

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

謝謝您提供的仿真程序!感謝
回復

使用道具 舉報

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

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

使用道具 舉報

ID:908826 發表于 2022-1-19 08:44 | 顯示全部樓層
我個人覺得case0的break刪除就能向后運行了,或者就按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
不會上傳圖片,就把敲得驗證程序直接粘過來了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色爱av | 日韩电影中文字幕在线观看 | 精品国产乱码久久久久久蜜柚 | 超碰导航 | 日本在线免费 | 国产真实乱全部视频 | 欧美在线观看一区 | 中文在线a在线 | 日韩精品在线观看视频 | 亚洲一区精品在线 | 免费a级毛片在线播放 | 亚洲一区二区在线播放 | 国产福利二区 | 久久国产精品久久久久 | 亚洲一卡二卡 | 久久久久久久久久久一区二区 | 久久精品日产第一区二区三区 | 国产精品高潮呻吟久久av野狼 | 久久91精品| 国产精品久久久久久久久 | 可以在线观看av的网站 | 久久国产亚洲 | 日本在线网站 | 亚洲精品美女视频 | 99久久婷婷国产综合精品电影 | 成人毛片视频免费 | 一级毛片观看 | 日韩精品久久久久 | 久久av一区二区三区 | 成人视屏在线观看 | 国产一二三视频在线观看 | 永久免费在线观看 | 一区二区三区视频 | 亚洲一区二区三区免费视频 | 成人亚洲性情网站www在线观看 | 免费a国产 | 羞羞午夜 | 久久国产精品视频 | 国产精品久久久乱弄 | 久久伊人亚洲 | 国产中文在线观看 |