【发布时间】:2017-06-06 12:00:02
【问题描述】:
当我执行此代码时,LED 默认为开启状态,而只有在按下开关时才应开启。当我按下开关时,它会关闭。谁能解释一下,我的代码做错了什么。
#include <lpc17xx.h>
#define SwitchPinNumber 11
#define LedPinNumber 6
void main()
{
uint32_t switchStatus;
SystemInit();
LPC_PINCON->PINSEL4 = 0x000000; // Configure the Pins for GPIO;
/* Configure the LED pin as output and SwitchPin as input */
LPC_GPIO2->FIODIR = ((1 << LedPinNumber) | (0 << SwitchPinNumber));
while (1)
{
/* Turn On all the leds and wait for one second */
switchStatus = (LPC_GPIO2->FIOPIN >> SwitchPinNumber) & 0x01; // Read switch status
if (switchStatus == 1)
{
LPC_GPIO2->FIOPIN = (1 << LedPinNumber);
}
else
{
LPC_GPIO2->FIOPIN = (0 << LedPinNumber);
}
}
}
【问题讨论】:
-
简单地反转位和值和逻辑?所以
0变成1和1变成0?这么简单的东西? -
你应该做一些调试。
-
有些芯片有反向逻辑。 1 关闭,0 开启。
-
1 是熄灭还是点亮 LED 完全取决于它的电子连接方式。简单地颠倒状态。这不是编程问题,而是电子问题。
-
极不可能这是一个芯片错误,在连接 LED 时很常见,因此您必须将其短路才能打开它,从历史上看,MCU 下沉的次数比它的来源多。从历史上看,如果一个零件不能驱动一个高高和一个低低并且需要反向逻辑,它就不会进入市场。这既是一个 EE stackexchange 问题,又是无数个问题。此外,OP 应该提前进行一些测试,例如在一个测试中点亮 LED,在另一个测试中点亮 LED,而无需涉及开关(看看我们在说什么)。同样,开关可以连接到上拉或下拉。