C - 闪烁其他指示灯时无法保持某些 LED 的 : 亮起



我使用 AVR 作为微控制器,ATMEGA8 作为处理器(在 micr 控制器内部)。具有微控制器的电路板有 4 个 LED。我能够刻录程序并点亮 LEDS。但我无法实现特定的事情。

L1 L2  L3 L4

这些是 4 个 LED。在第一轮中,每个 LED 在间隔 3 秒后亮起。最后一个 LED (L4) 在第一轮后保持亮起。当第三轮开始时,每个 LED 以 3 秒的间隔点亮,当 L4 也点亮并继续点亮时,L3 继续点亮......直到L1。

L1 L2 L3 L4
         On
      On On
   On On On
On On On On

但我无法做到这一点。因为当我设置一个 LED 时,另一个 LED 会熄灭。我什至尝试添加 10 毫秒的小时间间隔。我该怎么做?这是我到目前为止所拥有的:

    #include<avr/io.h>
    #include<util/delay.h>
    DDRB = 0xFF; // input
 //PORTB = 0xFF;
    // ob00011110 --> on all --> binary
    int i=0;
    while(i<1) {
      PORTB = 0b00010000; // first led on
      _delay_ms(3000);
      PORTB = 0b00001000; // second led on
      _delay_ms(3000);
      PORTB = 0b00000100; // third on
      _delay_ms(3000);
      PORTB = 0b00000010; // fourth on
      _delay_ms(3000);
      i += 1;
    }
    PORTB = 0b00000010; // keep the 4th on and start all over again and reach til 3rd LED

看起来你的序列是错误的。当您打开第二个 LED 时,您将关闭第一个 LED。顺序应为:

  PORTB = 0b00010000; // first led only
  _delay_ms(3000);
  PORTB = 0b00011000; // first and second led on
  _delay_ms(3000);
  PORTB = 0b00011100; // first, second, and third on
  _delay_ms(3000);
  PORTB = 0b00011110; // first, second, third, and fourth on
  _delay_ms(3000);
<</div> div class="one_answers">

你可以使用这样的东西:

while (1){
  PORTB = 0b00010000;
  _delay_ms(3000);
  PORTB |= 0b00001000;
  _delay_ms(3000);
  PORTB |= 0b00000100;
  _delay_ms(3000);
  PORTB |= 0b0000010;
  _delay_ms(3000);

它将关闭每个循环开始时的所有 LED,然后一个接一个地打开......

最新更新