Forum: Mikrocontroller und Digitale Elektronik MSP430f2012 LED+TASTEN


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.