仅按下一个按钮时 MSP432 Launchpad 无法识别

问题描述

我正在尝试在 msp432 Launchpad 上创建一个程序,当两个板载按钮(P1.4 和 P1.1)都没有被按下时,该程序将打开绿色 LED 并在仅按下 P1 时打开红色 LED .4 按钮被按下。使用下面的代码,当没有按下任何按钮时,Launchpad 会正确打开绿色 LED,但当我只按下 P1.4 按钮时不会打开红色 LED。我的代码或引脚配置有问题吗?

#include "msp.h"
#include "clock.h"
#include "TExaS.h"
void main()
{
    Clock_Init48MHz();

     /* Configuration of MSP42 */
     P2->SEL0 &= ~0x03;             // configure P2.0 and 2.1 as GPIO
     P2->SEL1 &= ~0x03;             // configure P2.0 and 2.1 as GPIO
     P2->DIR  |= 0x03;              // configure P2.0 and P2.1 as output


     //configure buttons on P1.1 and P1.4 as GPIO pull up inputs
      P1->SEL0 &= ~0x12;
      P1->SEL1 &= ~0x12;
      P1->DIR &= ~0x12;
      P1->REN |= 0x12;
      P1->OUT |= 0x12;


     //Application
     while(1){

         Clock_Delay1ms(100);

         //if P1.4 and P1.1 are both not being pressed
         if(P1->IN & 0x12){
             P2->OUT |= 0x02;  //turn on green light
             P2->OUT &= ~0x01; //turn off red light
         }

         //if only P1.4 is pressed
         else if(P1->IN & 0x10){
             P2->OUT |= 0x01;  //turn on red light
             P2->OUT &= ~0x02; //turn off green light
         }

     }

}

解决方法

你的 if 语句不同意上面的评论。

如果你的开关是低电平有效(这意味着打开上拉),那么第一个 if 语句测试是否有一个按钮未被按下,而不是两个,并且你的 else-if 检查 P1.4 是否未被按下,而不管 P1.1 (永远不会是这种情况,因为它已经匹配了 if - 也就是说,除非值在读取之间发生变化)。

我认为您可能需要考虑 if ((x & m) == m)if (x & m) 之间的区别。