SWの状態に応じて、LEDが点灯するプログラムを作成しています。
SWの状態が0x00の時の状態をカウントし、
カウントした値(変数count)に応じて、0x01の時の動作を変更したいと考えています。
次のプログラムで試してみましたが、
当たり前ですが、0x00の状態に一度入ると、その間はループが続くので、カウントアップも繰り返されてしまいます。
その状態(0x00)に入ったら、1つだけカウントアップさせたいのですが、どのようにすれば良いのでしょうか?
while(1){
char use_r = 0, use_g = 0, use_b = 0; /* 各関数を使うか */
char is_valid = 1; /* 定義があるか */
int count=0;
sw = PORTA & 0xFF;
switch(sw){
case 0x00:
use_r = 1;
use_b = 1;
count++;
break;
case 0x01:
if(count==3){
use_b = 1;
}
else{
use_g = 1;
}
break;
case 0x30:
use_g = 1;
use_b = 1;
break;
default:
is_valid = 0; /* 定義が無かった */
break;
}
/* 定義がある場合のみ処理する */
if(is_valid) {
if(prev_sw != sw) {
Reset(); //初期化
delay_ms(1); //delay
}
if (use_r) LED_R();
if (use_g) LED_G();
if (use_b) LED_B();
}
prev_sw = sw;
}