连接方式

+V 连接 LED0, LED1 的正极以及开关的正极;尾分别连接向 ATmega 2560 的 PD2, PD1, PD0。ATmega 2560 接地

代码解析

假设 DDRC 已经被初始化,开关是接通的

int val = 0;
PORTD |= 0x06;
while(1)
{
  PORTD &= ~(1 << val);
  if (PIND & 0x01)
  {
    val += 1;
    if (val > 2)
    {
      val = 2;
    }
  }
  else
  {
    val = 1;
  }
}

代码说明

  • PORTD |= 0x06; 初始化 PORTD,设置 PD2 和 PD1 为输出,并使 LED0 和 LED1 初始状态为亮。
  • PORTD &= ~(1 << val); 控制 LED 亮灭,当 val 为 0 时 LED0 亮,当 val 为 1 时 LED1 亮,当 val 为 2 时 LED0 和 LED1 都灭。
  • if (PIND & 0x01) 判断开关的状态,当开关按下时,val 自增,当开关松开时,val 设置为 1。

LED 状态分析

根据代码逻辑,由于开关接通,PIND & 0x01 为真,val 会自增,最终 val 会等于 2,导致 LED0 和 LED1 都灭。

结论

LED0 亮,LED1 灭 的状态是不正确的,在该代码逻辑下,LED0 和 LED1 都会灭。

ATmega 2560 控制LED亮灭:代码解析及LED状态

原文地址: https://www.cveoy.top/t/topic/ojUY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录