2016-10-06 1 views
0

皆の助けを借りて私のコードを再編集しました。私は私の質問を更新しました:どのようにスイッチの構造を使って状態を増やすことができますか?スイッチ(expr)の[(button_in & 0x0040)!= 0)]式を入れました。これは、私が最初に望んでいた2つの州を私に与えました。 (1)ボタン1を押すと0001が得られます。(2)ボタン2を押すと0010が得られます。プログラムの仕方がわかりません0010を得るためにボタン2を押してください。ヒントや正しい方向のポイントを使用できます。私は一日中この作業を続けており、問題はスイッチの表現に関連していると感じています。Cでif elseをスイッチに変換する

int main() 
{ 
char state; 
char A; 
int button_in = 0; 
DeviceInit(); //set LED1 thru LED4 as digital output 
DelayInit(); //Initialize timer for delay 

while(1) 
{ 
button_in = PORTReadBits (IOPORT_A, BIT_6 | BIT_7); 
if (button_in != 0) 
{ 
    switch ((button_in & 0x0040) != 0) 
    { 
    case 0: ((button_in & 0x0040) != 0); //1. Press button1. State goes to 001. 
       PORTWrite (IOPORT_B, BIT_11); 
       break; 

    default: //((button_in & 0x0080) != 0); //2. Press button2. State goes to 010 
       PORTWrite (IOPORT_B, BIT_10); 
       break; 
    } 

    DelayMs(100); 
    PORTClearBits(IOPORT_B, BIT_10 | BIT_11 | BIT_12 | BIT_13); 
    //Add Breakpoint here 
} 
} 
} 
+3

デバッグの助けを求める質問望ましい行動を含める必要があり、特定の問題やエラーや問題自体でそれを再現するために必要な最短コード(「なぜこのコードは動作しないの?」):それはこのように書きます。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:最小、完全、および検証可能な例を作成する方法。 – Olaf

+1

'switch()'と最初の 'case'の間のステートメントは実行されません。なぜなら、' switch'が一致する 'case'ステートメントに直接ジャンプするからです。 – Barmar

+0

したがって、 'button_in'を設定しません。 – Barmar

答えて

-1

if/caseが一緒に行かない、ありがとうございました。

switchcaseとなり、ifelseとなります。

言語の基本を読み上げてください。

2

まず、実際には「状態」に値を割り当てないので、それをテストしても意味のある結果は得られません。

第2に、「if」ブロックの真ん中にジャンプしています。この種のことをする正当な理由があります(Duffのデバイスを参照)が、通常は間違いです。 "場合"が "それ"の代わりに "if"の内部にあることを意味しましたか?

1

次の行は完全にバイパスされている:

button_in = PORTReadBits (IOPORT_A, BIT_6 | BIT_7); 
if (button_in != 0) {        

switchステートメント直ちに分岐は、最初に一致した場合に、最初の一致するケースラベルの前のコードはスキップされます。

PORTReadBitsコールをswitchステートメントの外に移動する必要があります。

6

コードに不適切なswitch文があります。

int main() 
{ 
    char state; 
    int button_in = 0; 
    DeviceInit(); 
    DelayInit(); 

    button_in = PORTReadBits (IOPORT_A, BIT_6 | BIT_7); 
    if (button_in != 0) 
    { 
     switch (state) 
     { 
     case 'A': if ((button_in & 0x0040) != 0) //1. Press button1. State goes to 001. 
        PORTWrite(IOPORT_B, BIT_10); 
        break; 
     case 'B': if ((button_in & 0x0080) != 0) //1aaab. Press button2. State goes to 1000 
        PORTWrite (IOPORT_B, BIT_13); 
        break; 
     } 

     DelayMs(100); 
     PORTCLearBits(IOPORT_B, BIT_10 | BIT_11 | BIT_12 | BIT_13); 
     //Add Breakpoint here 
    } 
} 
+3

'state(スイッチ)(状態)'で使用する前に 'state'は初期化も割り当てもされていません。 – chux

+0

@chux:はい。私は、OPがそれを実行しようとすると、それ自体を世話するだろうと思います。 – wallyk

+0

OP_should_が最終的にそれに気づくことは真実です。これは、この素晴らしい答えを損なうよりも、OPへのメモのほうが多かった。 – chux

関連する問題