繁体   English   中英

MSP430FR6989 按钮和 LED 拨动开关

[英]MSP430FR6989 button and led toggle

在学校项目上工作,我被困在我的最后一点代码上。 假设按住 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)周围的括号,以便它首先被评估。 也不是围绕两条线的大括号,因此它们都取决于条件,而不仅仅是第一行。 基本上它现在匹配你的前两个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM