C MSP430FR6989按钮和led开关
在学校的一个项目上工作,我被我的最后一点代码卡住了。假设S1按下,红色LED亮起。如果同时按下S2,则绿色LED保持熄灭,红色LED继续点亮。此状态持续到S1释放为止。现在,S2有机会打开绿色LED。同样,如果S2在绿色LED亮起的情况下按下,S1在按下时被忽略,直到S2被释放 我现在陷入了永远的循环。我无法让我的代码按照上面段落中描述的那样执行。按下BUT1和BUT2后,绿色和红色led灯将熄灭C MSP430FR6989按钮和led开关,c,embedded,msp430,C,Embedded,Msp430,在学校的一个项目上工作,我被我的最后一点代码卡住了。假设S1按下,红色LED亮起。如果同时按下S2,则绿色LED保持熄灭,红色LED继续点亮。此状态持续到S1释放为止。现在,S2有机会打开绿色LED。同样,如果S2在绿色LED亮起的情况下按下,S1在按下时被忽略,直到S2被释放 我现在陷入了永远的循环。我无法让我的代码按照上面段落中描述的那样执行。按下BUT1和BUT2后,绿色和红色led灯将熄灭 #include <msp430fr6989.h> #define redLED BI
#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;
}
}
#包括
#定义红色LED位0//P1.0处的红色LED
#定义绿色LED位7//P9.7处的绿色LED
#在P1.1处定义BUT1 BIT1//按钮S1
#在P1.2处定义BUT2位//按钮S2
真空总管(真空){
WDTCTL=WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0&=~LOCKLPM5;//启用GPIO引脚
//配置和初始化LED
P1DIR |=红色;//直接引脚作为输出
P9DIR |=绿色发光;//直接引脚作为输出
P1OUT&=~redLED;//关闭LED
P9OUT&=~greenLED;//关闭LED
//配置按钮1
P1DIR&=~(BUT1 | BUT2);//直接引脚作为输入
P1REN |=(BUT1 | BUT2);//启用内置电阻器
P1OUT |=(BUT1 | BUT2);//将电阻器设置为上拉电阻
//在无限循环中轮询按钮
对于(;;){
如果((P1IN&(BUT1 | BUT2))==BUT2){
P1OUT |=红色发光二极管;//打开红色发光二极管
}
如果((P1IN&(BUT1 | BUT2))==BUT1){
P9OUT |=绿色LED;//打开绿色LED
}
如果(P1IN&(BUT1 | BUT2)==(BUT1 | BUT2))
P1OUT&=~红色;
P9OUT&=~绿色发光;
}
}
您的括号和大括号有点不一致。请在最后一节中尝试以下内容:
if ((P1IN & (BUT1 | BUT2)) == (BUT1|BUT2)) {
P1OUT &= ~redLED;
P9OUT &= ~greenLED;
}
请注意,
P1IN&(BUT1 | BUT2)
周围的括号,以便首先对其求值。也不是围绕两条线的大括号,因此它们都取决于条件,而不仅仅是第一条线。基本上,它现在与前两个匹配。问题到底是什么?你的描述是对其工作原理的描述,还是对其当前行为的描述?通常最好至少用这样的方式描述当前和目标行为。一旦你明白了这一点,这个问题可能会在第一件事上被问到,要做的是在最后一个if语句体周围加上括号