1

ループでオブジェクト名を変更するにはどうすればよいですか?

ナイトライダーのような光のエフェクトを作りたいです。PIC付き

手動でオン/オフする代わりに、ループを使用して RB ライン番号を変更することを考えました。

このポート行名の最後の番号を変更したい: RB01 RB02 のように

私のコードはこのようなものです

for(int i = 0; i>6 ; i++ ){

PORTB = 0X00;
RB+i = 1;

}

このようなことを行う方法はありますか?ありがとう

4

4 に答える 4

4

RB01RB02などは#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 */
}
于 2013-01-24T12:55:38.060 に答える
2

あまりエレガントではありませんが、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
}
于 2013-01-24T12:46:15.677 に答える
0

いいえ、その方法でシンボル名を「生成」する方法はありません。問題のポートのラッチレジスタを操作するためにビットマスクを使用できます。

于 2013-01-24T12:46:02.723 に答える
0

私はおそらくテーブルを使用します:

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; 
}
于 2013-01-24T13:18:39.523 に答える