Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C MSP430FR6989按钮和led开关_C_Embedded_Msp430 - Fatal编程技术网

C MSP430FR6989按钮和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

在学校的一个项目上工作,我被我的最后一点代码卡住了。假设S1按下,红色LED亮起。如果同时按下S2,则绿色LED保持熄灭,红色LED继续点亮。此状态持续到S1释放为止。现在,S2有机会打开绿色LED。同样,如果S2在绿色LED亮起的情况下按下,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;

    }
}
#包括
#定义红色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语句体周围加上括号