Forum: Mikrocontroller und Digitale Elektronik MSP430f2012 LED+TASTEN


von IndigoGott (Gast)


Lesenswert?

Hallo!

Ich habe einen MSP430f2012 und möchte alle LEDs leuchten lassen, wenn 
eine Taste gedrückt wird.

#include <msp430x20x2.h>

// Pins on the MSP430 we're using
#define     LED1                  BIT1     // LED on P1.1
#define     LED2                  BIT2     // LED on P1.2
#define     LED3                  BIT3     // LED on P1.3
#define     LED4                  BIT4     // LED on P1.4
#define     BUTTON1               BIT5     // Button on P1.5
#define     BUTTON2               BIT6     // Button on P1.6
#define     BUTTON3               BIT7     // Button on P1.7
void main( void )
{

  WDTCTL = WDTPW + WDTHOLD;

  BCSCTL1 = CALBC1_1MHZ;
  DCOCTL = CALDCO_1MHZ;
  BCSCTL2 &= ~(DIVS_3);

  // Turn on the LED
if(BUTTON1 == ??)
{
  P1DIR |= (BIT1|BIT2|BIT3|BIT4);
  P1OUT |= BIT1;
  P1OUT &= ~BIT4;
}

}

Meine erste Frage wäre:
Wie kann der Programm wissen, dass die Taste am P1.5 gedrückt ist?
Sein Handbuch habe ich schon gelesen!

: Verschoben durch Moderator
von Max G. (l0wside) Benutzerseite


Lesenswert?

Das Handbuch hast Du gelesen? Welches denn? Datenblatt oder User´s 
Guide? Dafür sind Deine Fragen reichlich, ähem, anfängerhaft.

Auch Deine C-Kenntnisse sind eher überschaubar, wenn ich mir Deine 
Tastenabfrage so anschaue. Naja.

Dein Code sollte so aussehen:
1
P1DIR |= (BIT1|BIT2|BIT3|BIT4); // muss man nur einmal konfigurieren
2
3
while (1) {
4
  if (P1IN & BUTTON1) // P1.5 gesetzt
5
  {
6
    P1OUT |= (LED1 | LED2 | LED3 | LED4);
7
  } else {
8
    P1OUT &= ~(LED1 | LED2 | LED3 | LED4);
9
  }
10
}

Eine Tastenentprellung fehlt, ist für die Anwendung aber auch nicht 
nötig.

von IndigoGott (Gast)


Lesenswert?

Danke Max G.!


So, ich kann meine 4 LEDs schon blinken lassen, wenn man die Taste S1 
drückt und hier ist mein Programm:

#include <msp430x20x2.h>

//Pins on the MSP430 we're using
#define     D1                  BIT1     //LED on P1.1
#define     D2                  BIT2     //LED on P1.2
#define     D3                  BIT3     //LED on P1.3
#define     D4                  BIT4     //LED on P1.4
#define     S1                  BIT5     //Button on P1.5
#define     S2                  BIT6     //Button on P1.6
#define     S3                  BIT7     //Button on P1.7

void main(void)
{

  WDTCTL = WDTPW + WDTHOLD;

  P1DIR |= D1;
  P1DIR |= D2;
  P1DIR |= D3;
  P1DIR |= D4;

  for(;;)
  {
    if((P1IN & S1) == 0)
    {
      unsigned int x;

      P1OUT ^= D1;
      P1OUT ^= D2;
      P1OUT ^= D3;
      P1OUT ^= D4;

      x = 20000;
      do(x--);
      while(x != 0);
    }else
    {
      unsigned int y;

      P1OUT ^= D1;
      P1OUT ^= D2;
      P1OUT ^= D3;
      P1OUT ^= D4;

      y = 0;
      do(y--);
      while(y != 0);
    }
  }

}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.