为什么MSP430上的按钮按下不点亮LED

时间:2019-10-07 16:35:30

标签: button led msp430

Pin 1.3step计数器:修改代码,以使每次按下按钮时LED都以二进制顺序步进。

我在微控制器上编程相对较新。所以以上就是我正在尝试做的事情。但是,在尝试使其按二进制顺序步进时,该按钮似乎停止工作,因此所有LED均未闪烁。我不确定发生了什么变化,因为以前无需按按钮即可运行良好。与朋友比较,看起来很一样,所以出了什么问题。

这是我的代码。

#include <msp430.h> 


/*
 * main.c
 */
int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer

  volatile unsigned int i;
  volatile unsigned int j;

  P1DIR |= 0x41;                            // Set P1.0 to output direction
  P1DIR &=~(BIT3);                          // Ensure P1.3 is an input
  P1REN |= BIT3;                            // Set pulling Resistor for P1.3
  P1OUT |= BIT3;                            // Make the pulling resistor for P1.3 a pull-UP resistor
  j=0;                                      // Button presses set to 0
  P1OUT &=~0x01;

  while (1)                                 // Test P1.3
  {
    if ((BIT3 & P1IN)) {                    // if P1.3 set, set P1.0 turning on the LED
        if (j == 0)
            P1OUT &= ~0x41;
        if (j == 1) {
            P1OUT |= 0x01;
            P1OUT &= ~0x40;
        }
        if (j == 2) {
            P1OUT &= ~0x01;
            P1OUT |= 0x40;
        }
       if (j == 3)
           P1OUT |= 0x41;
    else {
        for (i=3000; i>0; i--);
        if (j == 3)
            j++;
        else
            j = 0;
        }
       while ((BIT3 & P1IN));

  }
}
}

1 个答案:

答案 0 :(得分:0)

只有j才增加j == 3。因此,j始终保持为0,这意味着所有LED均熄灭。您还错过了其他项目之前的结尾括号。使用正确的缩进格式设置代码有助于发现此类错误。

  while (1)
  {
    if ((BIT3 & P1IN)) 
    {
      if (j == 0)
      {
        P1OUT &= ~0x41;
      } 

      if (j == 1) 
      {
        P1OUT |= 0x01;
        P1OUT &= ~0x40;
      }

      if (j == 2) 
      {
         P1OUT &= ~0x01;
         P1OUT |= 0x40;
      }

      if (j == 3)
      {
         P1OUT |= 0x41;
      }
    }
    else 
    {
       for (i=3000; i>0; i--);

       // here I exchanged the == with <
       if ( j < 3 ) 
       {
         j++;
       }
       else
       {
         j = 0;
       }
    }
    while ((BIT3 & P1IN));
 }