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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5716|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

switch case 疊加while 循環(huán)問題求教

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

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

主程序如下:
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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:105425 發(fā)表于 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的余數(shù)
         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)   
}
回復(fù)

使用道具 舉報

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

多謝,多謝,我試試啊
回復(fù)

使用道具 舉報

地板
ID:72781 發(fā)表于 2016-2-14 20:23 | 只看該作者
試試這個,
主程序如下:
void main(void)
{
          P3M0=0x08;
        TMOD=0x11;
        IE=0x88;
        PWM=0;
        OUT=0;
        i=1;
      while(1)//單片機程序要有一個死循環(huán)
     {
        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,直接寫成三個子函數(shù),按順序?qū)懺趙hile(1)死循環(huán)里就可以了
回復(fù)

使用道具 舉報

5#
ID:72781 發(fā)表于 2016-2-14 20:27 | 只看該作者
還有這個
主程序如下:
void main(void)
{
          P3M0=0x08;
        TMOD=0x11;
        IE=0x88;
        PWM=0;
        OUT=0;
        i=1;
      while(1)//單片機程序要有一個死循環(huán)
     {
        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
}
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

好的,多謝~
回復(fù)

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

10#
ID:74145 發(fā)表于 2016-2-19 12:13 | 只看該作者
暗光 發(fā)表于 2016-2-17 13:22
有一句話說:編譯水平與使用goto語句的次數(shù)成反比,goto語句的確很靈活方便,但是他會破壞程序嚴(yán)謹(jǐn)?shù)慕Y(jié)構(gòu) ...

學(xué)習(xí)了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久成人动漫 | 欧美精品第一页 | 成人一区av| 秋霞av国产精品一区 | 亚洲欧美日韩国产综合 | 成人欧美一区二区三区在线播放 | 2018中文字幕第一页 | 精品综合| 欧美国产精品一区二区三区 | 狠狠干夜夜草 | 成人亚洲片 | 亚洲一区二区免费视频 | 日韩精品在线一区 | 国产在视频一区二区三区吞精 | 日韩av在线免费 | 99在线精品视频 | 亚洲高清在线观看 | 国产美女永久免费无遮挡 | 激情影院久久 | 中文字幕 亚洲一区 | 午夜av在线 | 亚洲免费在线视频 | 大乳boobs巨大吃奶挤奶 | 国产精品伦一区二区三级视频 | 91超碰在线 | 日日爱av | 久久三级av | 欧产日产国产精品99 | 国产精品久久国产精品 | 成人午夜网站 | 国产xxx在线观看 | 狠狠爱免费视频 | 亚洲中午字幕 | 久久精品一级 | 日韩精品久久 | 亚洲精品免费在线 | a免费视频 | 日本不卡一区 | 成人三区| 成人99 | 国产欧美二区 |