2016-11-24 3 views
0

Ich mache ein Programm für die MSP430.MSP430 Problem mit Taste nicht ausschalten

Die Inkrementierung läuft beim ersten Klick der Schaltfläche weg. Es hört nicht auf, wenn die Taste losgelassen wird.

Wie kann die Inkrementierung für jeden Schaltflächenklick auf eine Inkrementierung beschränkt werden?

#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

Sind Sie sicher über '0x16' .... Ich denke, Sie brauchen' 0x08' oder so ähnlich. Ich meine, dass 0x16 binär '10110' ist und Sie wahrscheinlich ein einzelnes Bit testen möchten. Mit '0x08' können Sie nur Bit 3 prüfen, zum Beispiel – LPs

+0

Sagen Sie uns, welches MSP430-Modell Sie haben und wie Sie den Button an ihn angeschlossen haben. –

+0

Wo kommt das Signal zurück? Wird es über einen RC-Filter gehandhabt? Wenn nicht, wird dieser Code nie funktionieren. Und Sie wollten wahrscheinlich die Dezimal-Maske 16 anstelle von hex 0x16 verwenden. Benutze auch keine, verwende eine konstante '#define Maske (1 << 4) // Pin 4'. – Lundin

Antwort

0

Zuerst schreiben Sie Ihre Knopfstifte durch Maske wie diese #define MASK PIN1 | PIN2 (1 und 2 zu Ihren Pins ändern) ist es besser für visuelle Fehlerkontrolle. Bei der zweiten Anweisung für die Überprüfung alle gedrückten Tasten if ((P1IN&MASK)==MASK).

Jetzt ist Ihre Aussage if((P1IN&0x16)!=0x16) prüfen, ob 3 Pins (PIN1, PIN2, PIN4) sind in Hallo Zustand und wenn es falsch machen Code

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

Wenn Sie Schritt wollen, wenn eine oder zwei Tasten Anweisung gedrückt werden muss wie diese if((P1IN&MASK)!=0)

das gilt für alle Tasten, die (HALLO Zustand) nach oben gedrückt wird, wenn sie gedrückt, für (LOW-Zustand) if((P1IN&MASK)!=MASK) ist nach unten gezogen.

Fügen Sie eine Verzögerung nach dem Inkrementieren für die Debounse-Schaltfläche hinzu. Wenn Ihre Tasten durch PIN und Masse verbunden sind, müssen Sie Pull-up für diese Pins aktivieren/

-1

Ich bin kein autorisierter Kommentar, also schreibe ich als Antwort. Wenn Sie sich nicht irren, versuchen Sie jedes Mal, wenn Sie den Knopf drücken, das if zu erhöhen. Deshalb sollte es so sein.

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

Aber ich möchte folgende erwähnen auch:

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

durch diese Aussage Schreiben Sie erwarten, P1.1, P1.2 und P1.4 hoch.

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

Wenn Tasten gedrückt werden, ist diese Aussage wahr. Sie sollten es mit Gleichheitszeichen ändern.

Auch ich bin mir nicht sicher, woher 0x16 kam, ich denke, Sie sollten auch einen zweiten Blick darauf werfen.