2016-11-24 32 views
0

我正在为msp430做一个程序。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; 
} 
+1

你确定关于'0x16' ....我想你需要'0x08'或类似的东西。我的意思是0x16是二进制'10110',你可能想测试一个位。用'0x08',你可以只检查位3,例如 – LPs

+0

告诉我们你有哪个MSP430型号,以及你如何将按钮连接到它。 –

+0

信号去弹跳在哪里?它是通过RC滤波器处理的吗?如果没有,你永远不会得到这个代码工作。你可能打算使用十进制掩码16而不是十六进制0x16。不要使用,使用一个常量'#定义掩码(1 << 4)// pin 4'。 – Lundin

回答

0

起初通过这样的面具来写你的按钮针脚 #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状态)按钮的按钮(低状态)为if((P1IN&MASK)!=MASK)

为debounse按钮增加一些延迟后。 如果你的按钮通过PIN和地连接,你必须启用这个引脚的上拉/

-1

我没有被授权的评论,所以我正在写一个答案。如果我没有弄错,你试图增加if,每次你按下按钮。这就是为什么它应该是这样的。

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

但我想提一提下面还有:

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

写这个说法你期待P1.1,P1.2和P1.4要高。

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

当按钮没有按这个声明是真实的。你应该用等号来改变它。

也im不知道0x16来自哪里,我想你也应该再看看它。