按钮未关闭的 MSP430 问题

MSP430 issue with button not switching off

我正在为 msp430 编写程序。

增量在第一次点击按钮时消失。松开按钮不停止

如何将递增限制为每次点击一次递增?

#include <msp430.h>

int main(void)
{
   int i; //delay variable
   int dimeRead=0;
   int desired=1000;
   volatile int total=0;

   P1OUT=0;                  //Supposed to get rid of it hanging at the top
   WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

   while(total<desired)
   {
      if((P1IN&0x16)!=0x16) // check if switch is pressed or not
      {
         dimeRead=dimeRead+1;
         total=total + 10;
      }

      //Goal is to flip an out put on to turn on light when desired number is hit.
   }

   return 0;  
}

我没有获得评论的授权,所以我正在写作为答案。如果没记错的话,每次按下按钮时,您都在尝试增加 if。这就是为什么它应该是这样的。

if((P1IN&0x16) == 0x16)

但我还想提一下:

if((P1IN&0x16) == 0x16)

通过编写此语句,您期望 P1.1、P1.2 和 P1.4 较高。

  if((P1IN&0x16)!=0x16)  , 

当按钮没有被按下时,这个说法是正确的。你应该用等号改变它。

我也不确定0x16是从哪里来的,我想你也应该再看看它。

首先像这样通过掩码写你的按钮引脚 #define MASK PIN1 | PIN2(1 和 2 更改为您的引脚)它更适合视觉错误控制。 在第二条语句中检查所有按下的按钮 if ((P1IN&MASK)==MASK)

现在你的语句 if((P1IN&0x16)!=0x16) 检查 3 个引脚(PIN1、PIN2、PIN4)是否处于 Hi 状态,如果为假,则生成代码

{
         dimeRead=dimeRead+1;
         total=total + 10;
}

如果你想在按下一个或两个按钮时递增语句必须像这样if((P1IN&MASK)!=0)

对于按下时向上推(HI 状态)的按钮,所有这些都是正确的,对于向下推(LOW 状态)是 if((P1IN&MASK)!=MASK)

在 debounse 按钮​​增加后添加一些延迟。 如果您的按钮通过 PIN 和地连接,则必须为此引脚启用上拉/