如何通過循環更改對象名稱?如何通過C lang中的循環更改對象名稱?
我想創造一個像騎士一樣的燈光效果。與一個PIC
我認爲,而不是手動打開和關閉使用循環更改RB行號。
我想改變這個端口線路名的最後一個數字:像RB01 RB02這樣
我的代碼是這樣的
for(int i = 0; i>6 ; i++){
PORTB = 0X00;
RB+i = 1;
}
有什麼樣的方法做這樣的事情?謝謝
如何通過循環更改對象名稱?如何通過C lang中的循環更改對象名稱?
我想創造一個像騎士一樣的燈光效果。與一個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 */
}
不,沒有辦法以這種方式「生成」符號名稱。您可以使用位掩碼來操作相關端口的鎖存寄存器。
這不是很優雅,但一個辦法是做這樣的:
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的,那麼你可以是這樣做的:
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;
}
'RB0 *'幾乎可以肯定預處理器宏解決位域訪問表達式。沒辦法下標,拿一個指針等等 – Potatoswatter
沒錯,可能是這樣的。在這種情況下,人們必須明白它實際上是這樣做的,然後將某種形式存儲在表中 - 或者做一些其他的事情...... –
大多數MCU的I/O與位運算完成。你不能用C做這個。我對AVR Win32 C庫比較熟悉,但是我相信PIC是相似的。在一個頭文件中應該有#defines,你可以看看它。 – OldProgrammer
@LeorA這些陳述是真實的,但不協調。你可以通過按位操作來完成他所要求的。你不能通過在'for'循環中重命名標識符來實現,但這並不重要,因爲按位操作很容易。 (爲了爭辯,你可以通過在*預處理器*循環中重命名標識符來實現。) – Potatoswatter
Knight Rider的+1。簡單的工程,營銷天才。 – Potatoswatter