gpt4 book ai didi

c - MSP430FR6989 按钮和 LED 切换

转载 作者:行者123 更新时间:2023-11-30 19:28:15 26 4
gpt4 key购买 nike

正在做一个学校项目,我陷入了最后一段代码。假设 S1 被按下并且红色 LED 亮起。如果同时按下 S2,绿色 LED 保持熄灭,红色 LED 继续亮起。该状态一直持续到 S1 被释放为止。现在,S2 有机会打开绿色 LED。同样,如果在绿色 LED 亮起时按住 S2,则按下 S1 时将被忽略,直到释放 S2。

我目前陷入了无限循环。我无法让我的代码按照上一段所述进行操作。一旦 BUT1 和 BUT2 都被按下,绿色和红色 LED 灯就会关闭。

#include <msp430fr6989.h>
#define redLED BIT0 // Red LED at P1.0
#define greenLED BIT7 // Green LED at P9.7
#define BUT1 BIT1 // Button S1 at P1.1
#define BUT2 BIT2 // Button S2 at P1.2

void main(void) {

WDTCTL = WDTPW | WDTHOLD; // Stop the Watchdog timer
PM5CTL0 &= ~LOCKLPM5; // Enable the GPIO pins


// Configure and initialize LEDs
P1DIR |= redLED; // Direct pin as output
P9DIR |= greenLED; // Direct pin as output
P1OUT &= ~redLED; // Turn LED Off
P9OUT &= ~greenLED; // Turn LED Off



// Configure buttons1
P1DIR &= ~(BUT1 | BUT2); // Direct pin as input
P1REN |= (BUT1 | BUT2); // Enable built-in resistor
P1OUT |= (BUT1 | BUT2); // Set resistor as pull-up






// Polling the button in an infinite loop
for(;;) {

if((P1IN & (BUT1|BUT2))==BUT2){
P1OUT |= redLED; // Turn red LED on
}

if((P1IN & (BUT1|BUT2))==BUT1){
P9OUT |= greenLED; // Turn green LED on
}
if (P1IN & (BUT1 | BUT2) == (BUT1|BUT2))
P1OUT &= ~redLED;
P9OUT &= ~greenLED;

}
}

最佳答案

你的方括号和大括号有点不一致。在最后一部分尝试这个:

if ((P1IN & (BUT1 | BUT2)) == (BUT1|BUT2)) {
P1OUT &= ~redLED;
P9OUT &= ~greenLED;
}

请注意 P1IN & (BUT1 | BUT2) 周围的括号,以便首先对其求值。两条线周围的大括号也没有,因此它们都取决于条件,而不仅仅是第一行。本质上它现在与您的前两个匹配。

关于c - MSP430FR6989 按钮和 LED 切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54372866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com