ATmega 2560 控制 LED 灯亮灭:开关断开时两个灯亮的原因分析

假设 +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;
    }
}

问题:开关什么情况下,两个灯都亮?

答案:当开关连接的头和尾都没有接通时,也就是开关处于断开状态时,两个灯都亮。

原因分析:

  1. val = 0 时,执行 PORTD &= ~(1 << val) 语句,相当于将 PD0 引脚电平拉低,LED0 亮;同时 PD1、PD2 引脚电平为高,LED1 不亮。

  2. 随后,如果 PIND & 0x01 判断结果为 0,即开关未接通,则 val 被赋值为 1,再执行 PORTD &= ~(1 << val) 语句,相当于将 PD1 引脚电平拉低,LED1 亮;同时 PD0、PD2 引脚电平为高,LED0 不亮。

  3. 此时 val = 1,继续执行 if 语句,由于开关未接通,val 被赋值为 1,再次执行 PORTD &= ~(1 << val) 语句,相当于将 PD1 引脚电平拉低,LED1 仍然亮着,同时 PD0、PD2 引脚电平为高,LED0 还是不亮。

因此,当开关未接通时,两个灯都亮。

ATmega 2560 控制 LED 灯亮灭:开关断开时两个灯亮的原因分析

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

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