C 仅按下一个按钮时,MSP432启动板无法识别

C 仅按下一个按钮时,MSP432启动板无法识别,c,embedded,code-composer,launchpad,msp432,C,Embedded,Code Composer,Launchpad,Msp432,我试图在MSP432启动板上创建一个程序,当两个板载按钮(P1.4和P1.1)均未按下时,该程序将点亮绿色LED,如果仅按下P1.4按钮,该程序将点亮红色LED。根据下面的代码,当没有按下按钮时,启动板会正确地打开绿色LED,但当我只按下P1.4按钮时,启动板不会打开红色LED。我的代码或管脚的配置有问题吗 #include "msp.h" #include "clock.h" #include "TExaS.h" void main(

我试图在MSP432启动板上创建一个程序,当两个板载按钮(P1.4和P1.1)均未按下时,该程序将点亮绿色LED,如果仅按下P1.4按钮,该程序将点亮红色LED。根据下面的代码,当没有按下按钮时,启动板会正确地打开绿色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匹配-也就是说,除非在读取之间值发生变化)


我想你可能需要考虑<代码> >((x & m)=m)<代码> >代码>(x& m) < /p> @ Raffele24,如果这个答案解决了你的问题,请你在左边打勾好吗?