ATmega 2560 控制LED亮灭:代码解析及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;
}
}
代码说明
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 都会灭。
原文地址: https://www.cveoy.top/t/topic/ojUY 著作权归作者所有。请勿转载和采集!