如何通过循环更改对象名称?
我想创造一个像骑士一样的灯光效果。有 PIC
我想而不是手动打开和关闭使用循环来更改 RB 行号。
我想更改此端口行名称的最后一个数字:like RB01 RB02 like this
我的代码是这样的
for(int i = 0; i>6 ; i++ ){
PORTB = 0X00;
RB+i = 1;
}
有什么方法可以做这样的事情吗?谢谢
如何通过循环更改对象名称?
我想创造一个像骑士一样的灯光效果。有 PIC
我想而不是手动打开和关闭使用循环来更改 RB 行号。
我想更改此端口行名称的最后一个数字:like RB01 RB02 like this
我的代码是这样的
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 时保持之前的 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;
}