2016-11-24 60 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來自哪裏,我想你也應該再看看它。