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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5734|回復: 9
打印 上一主題 下一主題
收起左側

switch case 疊加while 循環問題求教

[復制鏈接]
跳轉到指定樓層
樓主
ID:85607 發表于 2016-2-12 23:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大神 求教問題。   我用if也試了,用goto也試了,就是不能順利跳轉

我的問題是我有三個case 我要怎么定義 i  才能在這個三個case中進行循環  就是第一次執行case1 第二次執行 case2 第三次執行case3  第四次執行case1 --- 如此循環。

主程序如下:
void main(void)
{
          P3M0=0x08;
        TMOD=0x11;
        IE=0x88;
        PWM=0;
        OUT=0;
        i=1
        switch(i)
        {
         case 1:                       
         { while(i==1)
         {
                          measure();
                if(time>1600)PWM=1;
                else PWM=0;
     }
      i=i+1;break;
         }
         case 2:
         { while(i==2)
         {
                 measure();
                if(time>1600)OUT=1;
                else OUT=0;
     }
     break;
         }
         case 3:
         { while(i==3)
         {
                 measure();
                if(time>1600)PWM=1,OUT=1;
                else PWM=0,OUT=0;
     }
     break;
         }
         default: break;
     }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:105425 發表于 2016-2-14 14:16 | 只看該作者
按照你的意圖,修改了下代碼,如下:
void main(void)
{
    P3M0=0x08;
    TMOD=0x11;
    IE=0x88;
    PWM=0;
    OUT=0;
    unsigned long i=0;
    while(1)
    {    i = i%3; //取3的余數
         switch(i)
         {
          case 0:  //case 1:                        
          {   //while(i==1)
                          {
                                 measure();
                                 if(time>1600)PWM=1;
                                 else PWM=0;
                          }
                           //i=i+1;
                           break;
                }
                  
                case 1:   //case 2:
                  { //while(i==2)
                          {
                                 measure();
                                 if(time>1600)OUT=1;
                                 else OUT=0;
                          }
                    break;
                  }
                  
               case 2: //case 3:
                  { //while(i==3)
                          {
                                 measure();
                                 if(time>1600)PWM=1,OUT=1;
                                 else PWM=0,OUT=0;
                          }
                    break;
                  }
               default: break;
         }
         i++; // 注意,i累加到2的32次后會溢出。需要處理下
     }//end while(1)   
}
回復

使用道具 舉報

板凳
ID:85607 發表于 2016-2-14 14:41 | 只看該作者
william_2016 發表于 2016-2-14 14:16
按照你的意圖,修改了下代碼,如下:
void main(void)
{

多謝,多謝,我試試啊
回復

使用道具 舉報

地板
ID:72781 發表于 2016-2-14 20:23 | 只看該作者
試試這個,
主程序如下:
void main(void)
{
          P3M0=0x08;
        TMOD=0x11;
        IE=0x88;
        PWM=0;
        OUT=0;
        i=1;
      while(1)//單片機程序要有一個死循環
     {
        switch(i)
        {
           case 1: measure();
                     if(time>1600) PWM=1;
                     else PWM=0;
                     i++;break;
           case 2: measure();
                    if(time>1600) OUT=1;
                    else OUT=0;
                    i++; break;
          case 3: measure();
                    if(time>1600 ) PWM=1; OUT=1;
                    else PWM=0;OUT=0;
                    i=1; break;
          default: i=1; break;
        }//switch
      //此處可以加一個延時,看需求了
     }//while
}
//PS我沒有看仔細看程序是干嘛的,也不知道對不對
//其實按照我寫的或者我理解的一次沒必要用switch,直接寫成三個子函數,按順序寫在while(1)死循環里就可以了
回復

使用道具 舉報

5#
ID:72781 發表于 2016-2-14 20:27 | 只看該作者
還有這個
主程序如下:
void main(void)
{
          P3M0=0x08;
        TMOD=0x11;
        IE=0x88;
        PWM=0;
        OUT=0;
        i=1;
      while(1)//單片機程序要有一個死循環
     {
        switch(i)
        {
           case 1: measure();
                     if(time>1600) PWM=1;
                     else PWM=0;
                     break;
           case 2: measure();
                    if(time>1600) OUT=1;
                    else OUT=0;
                    break;
          case 3: measure();
                    if(time>1600 ) PWM=1; OUT=1;
                    else PWM=0;OUT=0;
                     break;
          default: i=1; break;
        }//switch
       i++;
      if(i==4) i=1;
     }//while
}
回復

使用道具 舉報

6#
ID:72781 發表于 2016-2-14 20:29 | 只看該作者
對了,盡量不要用goto語句。
回復

使用道具 舉報

7#
ID:85607 發表于 2016-2-15 16:20 | 只看該作者
暗光 發表于 2016-2-14 20:29
對了,盡量不要用goto語句。

好的,多謝~
回復

使用道具 舉報

8#
ID:98591 發表于 2016-2-16 15:08 來自手機 | 只看該作者
暗光 發表于 2016-2-14 20:29
對了,盡量不要用goto語句。

為什么盡量不用goto啊,主函數里跳轉我覺得很方便啊,從一個while(1)跳到另一個模式的while(1)
回復

使用道具 舉報

9#
ID:72781 發表于 2016-2-17 13:22 | 只看該作者
小蜜蜂o 發表于 2016-2-16 15:08
為什么盡量不用goto啊,主函數里跳轉我覺得很方便啊,從一個while(1)跳到另一個模式的while(1)

有一句話說:編譯水平與使用goto語句的次數成反比,goto語句的確很靈活方便,但是他會破壞程序嚴謹的結構化,也就是順序結構和循環結構在加上單片機的中斷,如果編程這在使用的時候不注意使用,會跳過一些重要的語句,而編譯器不會發現,而且從一個模式的死循環到另一個死循環完全可以用其他方式代替,沒必要跳轉。比如while(i==1)跳到while(i==2),只需要改變變量i的值就可以
回復

使用道具 舉報

10#
ID:74145 發表于 2016-2-19 12:13 | 只看該作者
暗光 發表于 2016-2-17 13:22
有一句話說:編譯水平與使用goto語句的次數成反比,goto語句的確很靈活方便,但是他會破壞程序嚴謹的結構 ...

學習了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久成人 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 久久久久久免费看 | 99精品99久久久久久宅男 | 亚洲精品一区久久久久久 | 亚洲一区二区三区四区五区午夜 | 日韩一区二区三区精品 | 国产欧美日韩一区二区三区 | 欧美日韩国产一区二区 | 妞干网福利视频 | 中文字幕高清免费日韩视频在线 | 亚洲欧美视频 | 久久草在线视频 | 9久久婷婷国产综合精品性色 | 欧美xxxx网站 | 九九久久精品 | 在线国产视频观看 | 超碰97免费在线 | 精品国产欧美在线 | 亚洲成人精品一区二区 | 九热在线 | 不卡视频一区 | 在线免费看黄 | 午夜视频一区二区 | 午夜精品一区二区三区在线观看 | 色婷婷激情综合 | 中文字幕在线一区二区三区 | 国产亚洲网站 | 欧美精品一区二区在线观看 | 久久夜视频 | 欧美一区二区三区精品免费 | 国产精品久久国产精品 | 国产精品亚洲二区 | 亚洲精品一区二 | 亚洲国产精品成人 | 亚洲天堂日韩精品 | 久草资源在线 | 天天色综| 国产视频亚洲视频 | 欧美二区乱c黑人 | 日韩精品在线观看网站 |