找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3542|回復: 9
收起左側

C語言switch語句問題,請單片機大蝦門幫忙看看代碼

  [復制鏈接]
回帖獎勵 20 黑幣 回復本帖可獲得 20 黑幣獎勵! 每人限 1 次
ID:295535 發(fā)表于 2019-3-1 09:58 | 顯示全部樓層 |閱讀模式
#include "reg52.h"
  typedef unsigned char u8 ;  //定義變量參//
  typedef unsigned int u16  ;
  sbit    RED_A=P0^2; //A方向紅燈
  sbit    YELLOW_A=P0^3;//A方向黃燈
  sbit    GREEN_A=P0^4;//A方向綠燈
  sbit     REDC_A=P0^0;  //A方向人行道紅燈
  sbit     GREENC_A=P0^1;  //A方向人行道綠燈
  sbit    RED_B=P0^5;
  sbit    YELLOW_B=P0^6;
  sbit    GREEN_B=P0^7;
  sbit     REDC_B=P2^0;
  sbit     GREENC_B=P2^1;
void delay5s(void)   //誤差 0us
{
    unsigned char a,b,c;
    for(c=165;c>0;c--)
        for(b=100;b>0;b--)
            for(a=150;a>0;a--);
}
void delay30s(void)   //誤差 0us
{
    unsigned char a,b,c,n;
    for(c=254;c>0;c--)
        for(b=232;b>0;b--)
            for(a=253;a>0;a--);
    for(n=2440;n>0;n--);
}
  void jiaotongdeng()
  {
   switch()
{
  case1      RED_A=1;GREEN_B=1;GREENC_B=1;REDC_A=0;
       //A方向紅燈    B向綠燈 B向人行道綠燈 A向行道紅燈 亮燈
        RED_B=0;YELLOW_B=0;REDC_B=0;GREEN_A=0;GREENC_A=0; YELLOW_A=0  ;
      //B向紅燈 B黃燈 B向行道紅燈  A向綠燈 A向黃燈 A向行道綠燈    熄燈
        delay30s;
        RED_A=~RED_A;GREEN_B=~GREEN_B;GREENC_B=~GREENC_B;REDC_A=~REDC_A
     //A方向紅燈 B向綠燈 B向人行道綠燈 A向行道綠燈 閃亮燈
      YELLOW_A=0;GREEN_A=0;GREENC_A= 0;RED_B=0;YELLOW_B=0;REDC_B=0
      //A方向黃燈 綠燈 行道綠燈   B方向紅燈 黃燈  行道紅燈 熄燈
     delay5s;
        break;
    case2  RED_B=1;GREEN_A=1;GREENC_A=1;REDC_B=0; //B向紅燈亮燈
       RED_A=0;YELLOW_B=0;REDC_A=0;GREEN_B=0;GREENC_B=0; YELLOW_B=0  ;  //熄燈
       delay30s;
        RED_B=~RED_B;GREEN_A=~GREEN_A;GREENC_A=~GREENC_A;REDC_B=~REDC_B;
     //A方向紅燈 B向綠燈 B向人行道綠燈 A向行道綠燈 閃亮燈
      YELLOW_B=0;GREEN_B=0;GREENC_B= 0;RED_A=0;YELLOW_A=0;REDC_A=0
      //A方向黃燈 綠燈 行道綠燈   B方向紅燈 黃燈  行道紅燈 熄燈
     delay5s;
     break;
   
}
  }
void main()
{
  while(1)
  {
   jiaotongdeng();
  }
}





這個是簡單交通燈實驗  在開發(fā)板上沒有現(xiàn)象  請大蝦們指點指點不勝感激

回復

使用道具 舉報

ID:94031 發(fā)表于 2019-3-1 11:33 | 顯示全部樓層
switch()括號里要有判斷的變量名。
回復

使用道具 舉報

ID:96682 發(fā)表于 2019-3-1 11:52 | 顯示全部樓層
沒電路圖怎么知道哪錯
回復

使用道具 舉報

ID:91114 發(fā)表于 2019-3-1 11:57 | 顯示全部樓層
switch(表達式) case 值
回復

使用道具 舉報

ID:473159 發(fā)表于 2019-3-1 14:10 | 顯示全部樓層

評分

參與人數(shù) 1黑幣 +10 收起 理由
zhengchong60 + 10 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:370231 發(fā)表于 2019-3-1 14:28 | 顯示全部樓層
switch的一般形式如下:
switch (表達式)
{
    case 常量表達式1:    語句1
    case 常量表達式2:    語句2
       ┇
    case 常量表達式n:    語句n
    default:        語句n+1
}
說明:
1) switch 后面括號內(nèi)的“表達式”必須是整數(shù)類型。也就是說可以是 int 型變量、char 型變量,也可以直接是整數(shù)或字符常量,哪怕是負數(shù)都可以。但絕對不可以是實數(shù),float 型變量、double 型變量、小數(shù)常量通通不行,全部都是語法錯誤。

2) switch 下的 case 和 default 必須用一對大括號{}括起來。

3) 當switch后面括號內(nèi)“表達式”的值與某個case后面的“常量表達式”的值相等時,就執(zhí)行此case后面的語句。執(zhí)行完一個case后面的語句后,流程控制轉移到下一個case繼續(xù)執(zhí)行。如果你只想執(zhí)行這一個case語句,不想執(zhí)行其他case,那么就需要在這個case語句后面加上break,跳出switch語句。

再重申一下:switch是“選擇”語句,不是“循環(huán)”語句。很多新手看到break就以為是循環(huán)語句,因為break一般給我們的印象都是跳出“循環(huán)”,但break還有一個用法,就是跳出switch。

4) 若所有的 case 中的常量表達式的值都沒有與 switch 后面括號內(nèi)“表達式”的值相等的,就執(zhí)行 default 后面的語句,default 是“默認”的意思。如果 default 是最后一條語句的話,那么其后就可以不加 break,因為既然已經(jīng)是最后一句了,則執(zhí)行完后自然就退出 switch 了。

5) 每個 case 后面“常量表達式”的值必須互不相同,否則就會出現(xiàn)互相矛盾的現(xiàn)象,而且這樣寫造成語法錯誤。

6) “case常量表達式”只是起語句標號的作用,并不是在該處進行判斷。在執(zhí)行 switch 語句時,根據(jù) switch 后面表達式的值找到匹配的入口標號,就從此標號開始執(zhí)行下去,不再進行判斷。

7) 各個 case 和 default 的出現(xiàn)次序不影響執(zhí)行結果。但從閱讀的角度最好是按字母或數(shù)字的順序?qū)憽?br />
8) 當然你也可以不要 default 語句,就跟 if…else 最后不要 else 語句一樣。但最好是加上,后面可以什么都不寫。這樣可以避免別人誤以為你忘了進行 default 處理,而且可以提醒別人 switch 到此結束了。

但是需要注意的是,default 后面可以什么都不寫,但是后面的冒號和分號千萬不能省略,省略了就是語法錯誤。很多新手在這個地方很容易出錯,要么忘了分號,要么忘了冒號,所以要注意!

評分

參與人數(shù) 1黑幣 +10 收起 理由
leng + 10 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:342197 發(fā)表于 2019-3-1 14:48 | 顯示全部樓層
你所用的switch()語句中并無具體參數(shù)變量,無法進行case判斷

評分

參與人數(shù) 1黑幣 +5 收起 理由
leng + 5 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:471066 發(fā)表于 2019-3-1 21:58 | 顯示全部樓層
這是調(diào)好的,拿去吧


#include "reg52.h"
typedef unsigned char u8 ;  //定義變量參//
typedef unsigned int  u16  ;
sbit     RED_A=P0^2; //A方向紅燈
sbit     YELLOW_A=P0^3;//A方向黃燈
sbit     GREEN_A=P0^4;//A方向綠燈
sbit     REDC_A=P0^0;  //A方向人行道紅燈
sbit     GREENC_A=P0^1;  //A方向人行道綠燈
sbit     RED_B=P0^5;
sbit     YELLOW_B=P0^6;
sbit     GREEN_B=P0^7;
sbit     REDC_B=P2^0;
sbit     GREENC_B=P2^1;
u8 i=1;
void delay5s(void)   //誤差 0us
{
        u8 a,b,c;
    for(c=165;c>0;c--)
        for(b=100;b>0;b--)
            for(a=150;a>0;a--);
}
void delay30s(void)   //誤差 0us
{
    u8 a,b,c;
    for(c=254;c>0;c--)
        for(b=232;b>0;b--)
            for(a=253;a>0;a--);
                       
}
void jiaotongdeng()
{
       
        switch(i)
        {
        case 1:      RED_A=1;GREEN_B=1;GREENC_B=1;REDC_A=0;
                //A方向紅燈    B向綠燈 B向人行道綠燈 A向行道紅燈 亮燈
        RED_B=0;YELLOW_B=0;REDC_B=0;GREEN_A=0;GREENC_A=0; YELLOW_A=0  ;
                //B向紅燈 B黃燈 B向行道紅燈  A向綠燈 A向黃燈 A向行道綠燈    熄燈
        delay30s();
        RED_A=~RED_A;GREEN_B=~GREEN_B;GREENC_B=~GREENC_B;REDC_A=~REDC_A;
                //A方向紅燈 B向綠燈 B向人行道綠燈 A向行道綠燈 閃亮燈
                YELLOW_A=0;GREEN_A=0;GREENC_A= 0;RED_B=0;YELLOW_B=0;REDC_B=0;
                //A方向黃燈 綠燈 行道綠燈   B方向紅燈 黃燈  行道紅燈 熄燈
                delay5s();
        break;
               
    case 2:  RED_B=1;GREEN_A=1;GREENC_A=1;REDC_B=0; //B向紅燈亮燈
                RED_A=0;YELLOW_B=0;REDC_A=0;GREEN_B=0;GREENC_B=0; YELLOW_B=0  ;  //熄燈
                delay30s();
        RED_B=~RED_B;GREEN_A=~GREEN_A;GREENC_A=~GREENC_A;REDC_B=~REDC_B;
                //A方向紅燈 B向綠燈 B向人行道綠燈 A向行道綠燈 閃亮燈
                YELLOW_B=0;GREEN_B=0;GREENC_B= 0;RED_A=0;YELLOW_A=0;REDC_A=0;
                //A方向黃燈 綠燈 行道綠燈   B方向紅燈 黃燈  行道紅燈 熄燈
                delay5s();
                break;
                if(i==2) i=0;
               
        }
}
void main()
{
        while(1)
        {
                jiaotongdeng();
                if(i==2)i=1;
                else  i++;
        }
}
回復

使用道具 舉報

ID:471066 發(fā)表于 2019-3-1 22:09 | 顯示全部樓層
        這里還改一下if(i==2)i=1;改為if(i==3)i=1;

評分

參與人數(shù) 1黑幣 +8 收起 理由
嘉立創(chuàng)AAA + 8 很給力!

查看全部評分

回復

使用道具 舉報

ID:472242 發(fā)表于 2019-3-2 11:24 | 顯示全部樓層
這個不是很難咯,怎么就迷糊了呢
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表