二进制计数器用于在Arduino中使用LED的环路

时间:2015-06-16 03:55:21

标签: c binary arduino counter led

我是使用Arduino的初学者,我正在尝试使用LED计算二进制数。

我的代码是:

int ledPins[] = {2,3,4,5,6,7,8,9};
{
  int delaytime = 500;
  int x;
  int mod;
  int index;
  int remain;
  for (x=0; x<512; x++)
  {
   if(x%2 == 1)
   {
    digitalWrite(2,HIGH);
   }
   else
   {
    digitalWrite(2,LOW);
   }
   for (index=1, mod=4, remain=1; index<8; index++, mod*=2, remain+=4)
    {
      if(x%mod>remain)
      { 
        digitalWrite(ledPins[index],HIGH);

      }
      else {
        digitalWrite(ledPins[index], LOW);
      }
    }
  delay(delaytime);
  }
}

我想要在x%mod&gt;保留时打开LED。 (例如,7%4> 1,因此LED 3将打开)

请有人帮帮我。非常感谢你。

2 个答案:

答案 0 :(得分:2)

您可以使用逐位运算,而不是使用模运算符'%'。例如,以下内容将x的当前值写入LED:

for(i=0; i<8; i++)
{
    digitalWrite(ledPins[i], (x >> i) & 0x01);
}

这里涉及两个操作,向右逐位移位(“&gt;&gt;”)和逐位AND(“&amp;”)。

例如,让我们想象一下我们想要获得数字170的第3位。以下显示如何以二进制操作数字:

(original value of x)   10101010
(after bitwise shift 3) 00010101
(after bitwise and 1)   00000001

有关详细信息,请搜索“按位运算符”或“位掩码”。

要弄清楚为什么你的方法不起作用,最好的方法是通过选择x的值来干燥运行它并像在上面那样处理纸上会发生的事情。乍一看,我觉得你总是在每个循环的剩余部分加4。

当引脚在端口上连续时,您只需将x的值直接分配给端口即可;这就是Bappi所得到的。这是有效的,因为引擎盖下的微控制器将多个引脚值存储在一个寄存器中。

答案 1 :(得分:0)

我假设pint 9是LSD而pin 2是MSD,请尝试以下代码。

LEDControlLoop(){

    int x = 0;
    int delaytime = 500;
    DDRD = B11111111; // sets port d as output

    while(1){ // infinte while loop,
        PORTD = x;
        delay(delaytime);
        x++;
        if(x>255){
            x = 0;
            //break; //optional
        }   
    }
}