簡體   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