ループでオブジェクト名を変更するにはどうすればよいですか?
ナイトライダーのような光のエフェクトを作りたいです。PIC付き
手動でオン/オフする代わりに、ループを使用して RB ライン番号を変更することを考えました。
このポート行名の最後の番号を変更したい: RB01 RB02 のように
私のコードはこのようなものです
for(int i = 0; i>6 ; i++ ){
PORTB = 0X00;
RB+i = 1;
}
このようなことを行う方法はありますか?ありがとう
ループでオブジェクト名を変更するにはどうすればよいですか?
ナイトライダーのような光のエフェクトを作りたいです。PIC付き
手動でオン/オフする代わりに、ループを使用して RB ライン番号を変更することを考えました。
このポート行名の最後の番号を変更したい: RB01 RB02 のように
私のコードはこのようなものです
for(int i = 0; i>6 ; i++ ){
PORTB = 0X00;
RB+i = 1;
}
このようなことを行う方法はありますか?ありがとう
RB01、RB02などは#defineのビットにアクセスするのに便利な s であると仮定すると、PORTBループをビットごとの算術演算で記述し、まったく使用RB0*しないことができます。
for ( int i = 0; i != 6; ++ i ) {
PORTB = 1 << i; /* one light at a time */
/* or */
PORTB = ( 1 << i + 1 ) - 1; /* light all in sequence */
}
あまりエレガントではありませんが、1つの方法は次のようにすることです。
PORTB = 0x00;
for (i = 0; i < 6; ++i)
{
RB00 = (i == 0);
RB01 = (i == 1);
RB02 = (i == 2);
RB03 = (i == 3);
RB04 = (i == 4);
RB05 = (i == 5);
// note: you probably want to put a delay in here, e.g. 200 ms
}
新しいLEDをオンにするたびに以前のLEDをオンのままにしておきたい場合は、次のように行うことができます。
PORTB = 0x00;
for (i = 0; i < 6; ++i)
{
RB00 = (i >= 0);
RB01 = (i >= 1);
RB02 = (i >= 2);
RB03 = (i >= 3);
RB04 = (i >= 4);
RB05 = (i >= 5);
// note: you probably want to put a delay in here, e.g. 200 ms
}
いいえ、その方法でシンボル名を「生成」する方法はありません。問題のポートのラッチレジスタを操作するためにビットマスクを使用できます。
私はおそらくテーブルを使用します:
struct portbits
{
sometype bit; // Not quite sure what "RB0..RB5" actually translate to.
};
struct portbits bits[] =
{
RB00,
RB01,
RB02,
RB03,
RB04,
RB05,
RB06,
RB07,
};
for(i = 0; i < 7; i++)
{
bits[i] = 1;
}