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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2911|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产丝袜一区二区三区免费视频 | 久久美女视频 | 日本久久久久久 | 国产精品久久久久久模特 | 国产精品一区二区日韩 | 欧美在线激情 | 99精品免费久久久久久日本 | 久免费视频 | 18gay男同69亚洲网站 | 久久久久久高潮国产精品视 | 熟女毛片 | 视频一区二区在线观看 | 久久久久久久久久久成人 | 亚洲精品视频一区 | 成人免费视频在线观看 | 一区二区免费视频 | 毛片免费观看 | 久久久久久成人 | 自拍偷拍欧美 | 91人人澡人人爽 | 日韩综合在线 | 国产精品色 | 91私密视频 | 国产精品久久久久久久久久久久冷 | 亚洲免费人成在线视频观看 | av香蕉 | 日韩毛片在线视频 | 久久久久国产精品 | 亚洲香蕉在线视频 | 国产日韩精品在线 | 99久久婷婷国产综合精品首页 | 婷婷综合色| 伊人久久免费 | 亚洲精品在线国产 | 国产东北一级毛片 | 日韩一区二区三区在线视频 | 在线日韩 | 精品国产一区二区三区久久影院 | 欧美日韩淫片 | 亚洲视频在线看 | 一区二区精品电影 |