SW1 (ONで0がマイコンに入力)
SW2 (ONで0がマイコンに入力)
LED1
LED2
[プログラムの内容]
SW1 & SW2 OFFの状態: LED1とLED2が点灯・消灯を繰り返す
この状態から、
SW1がON
又は
SW2がON
又は
SW1,SW2の両方がON した場合には、次の処理を行う。(1つでもSWがONしたら、次の★★処理をずっと繰り返す。
★★★★★★★★★★★★★★★★★★★★★★★★★★
SW1,SW2の両方がONのとき、LED1,2の両方が点灯
SW1がONのとき、LED1点灯
SW2がONのとき、LED2点灯
SW1,SW2の両方がOFFのときは、直前のSWの状態の動作
★★★★★★★★★★★★★★★★★★★★★★★★★★
[不具合の内容]
LED1とLED2が点灯・消灯を繰り返す状態から、いずれかのSWをONしても、LED1とLED2が点灯・消灯を繰り返す状態が続いてしまう。
int st,left,right;
int sw;
st=0;
left=0;
right=0;
delay_ms(100);
while(1){
sw = PORTB & 0x03;
while (sw=0x03) {
LATCbits.LATC4 = 1;
LATCbits.LATC5 = 1;
delay_ms(100);
LATCbits.LATC4 = 0;
LATCbits.LATC5 = 0;
delay_ms(100);
LATCbits.LATC4 = 1;
LATCbits.LATC5 = 1;
}
switch(sw){
case 0: LATCbits.LATC4 = 1;
LATCbits.LATC5 = 1;
st=1;
left=0;
right=0;
delay_ms(30);
break;
case 1: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 1;
left=1;
delay_ms(30);
break;
case 2: LATCbits.LATC4 = 1;
LATCbits.LATC5 = 0;
right=1;
delay_ms(30);
break;
case 3:
if (st==1){
LATCbits.LATC4 = 1;
LATCbits.LATC5 = 1;
st=0;
}
else if (left==1){
LATCbits.LATC4 = 0;
LATCbits.LATC5 = 1;
left=0;
}
else if (right==1){
LATCbits.LATC4 = 1;
LATCbits.LATC5 = 0;
right=0;
}
break;
default:break;
}
}
}