2016-10-08 12 views
0

スイッチ構成でどのように状態を増やすことができますか?私はカウントを必要とする+ +?私は[(button_in & 0x0040)!= 0)]式をスイッチ(expr)に置いた。これは、私が最初に望んでいた2つの州を私に与えました。 (1)ボタン1を押すと0001が出力されます。(2)ボタン2を押すと0010が出力されます。 プログラミング方法がわかりません0010を返すためにボタン2を押します。whileループ内にカウントを実装しますか? while式をカウントとして使用できますか?私はカスケードで別のループを配置する必要がありますか?私は自分の州を増やしたいと思う。 0000、0001(5セント)、0010(10セント)、0011(15セント)、0100(20セント)、1000(25セント)、0111(変更)の7つの州があります。 質問とコードを更新して、私の意図を明確に反映させました。 私はプログラマーではなく、私の友人は私がボタンを押すと言いました。私は現在の状態を確認する必要があります。そのために私のコードをプログラムしてください。彼はまたバイナリ計算機についても言及した。どの方法が最も効率的ですか?あなたがより一般的で読みやすくなります簡単なif文でそれを置き換えることができますようおかげCスイッチ数を増やす場合

int main() 
{ 
    char A; //placed for switch expression... (not needed?) 
    int button_in = 0; // button is set for 0 (not-engaged) 
    DeviceInit(); //set LED1 thru LED4 as digital output 
    DelayInit(); //Initialize timer for delay 
    int count; //maybe required for 5 button pushes. Requesting help with this 

    while (1) //Can I initiate a count? for a second button push? 
    { 
    button_in = PORTReadBits(IOPORT_A, BIT_6 | BIT_7); //Button 1 and button 2 defined 
    if (button_in != 0) //if button is engaged utilize switch statement 
    { 
     switch ((button_in & 0x0040) != 0) //if button1 is engaged 
     { 
     case 0: 
     ((button_in & 0x0080) != 0); //Statement: Button2 engages case0 
     PORTWrite(IOPORT_B, BIT_11); //State goes to 010 (BIT_11 lights up). 
     break; 

     default: ((button_in & 0x0040) != 0); //Statement: Button1 engages default. 
     PORTWrite(IOPORT_B, BIT_10); //This is state 0001 (BIT_10) lights up. 
     break; 
     } 

     DelayMs(100); //100millisecond delay for light shine 
     PORTClearBits(IOPORT_B, BIT_10 | BIT_11 | BIT_12 | BIT_13); //ClearLEDs 
    } 
    } 
} 
+0

私は何が必要だと思うが、ステートマシン – Mobius

答えて

0

まず、私の意見では、switch ((button_in & 0x0040) != 0)を行うことは避けるべきです。その後

、それはあなたの状態マシンが遷移がボタン1が押されるたびに発生するように見えます、あなたは、単にインクリメント可能な

(o)-->(s1)-->(s2)-->(s3)-->(s4)-->(s5)-->(s6)-->((s7)) 

あり、この特定のケースでは、あなたの状態に問題になりますあなたが現在入っている状態を示しています(端末1からの初期状態に戻るには8を法とします)。 IOPORT_Bに書き込む正しい値([1]のベロー)は、カウンタのバイナリ値を調べた後、またはループに入り、arr[state]で検索する前に配列に格納できます。選択はアプリケーションと値によって異なります。

int main() 
{ 
    int state = 0; 
    while(1) 
    { 
     if (button 1 is pressed) 
     { 
     state = (state >= 7) ? 7 : (state + 1); 
     PORTWrite(IOPORT_B, ...);  // [1] 
     DelayMs(100);     // wait 
     PORTClearBits(IOPORT_B, ...); // Clear what you want to clear 
     } 
    } 
} 
+0

である私は、最初からif文を実行しようとしたが、それは私にとってあまりにもスムーズに動作しませんでした。 – Jeremiah

+0

私はそれ以上の情報なしにはるかに助けることができません。 'PORTReadBits'が返すものによって異なります。しかし間違いなく、コード内で奇妙なことをしています。 'case 0:'と 'default'の直後のステートメントと同様です。単に比較して、結果を使用しないので意味がありません。たぶんあなたは 'switch'ステートメントを本当に理解していないかもしれません。 –

+0

それを考え出した。あなたのご意見ありがとうございます。 – Jeremiah

関連する問題