www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Menü mit switch case


Autor: Jabber Wock (jabber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich wollte eigentlich nur schnell ein kleines Menü erstelle aber 
jetzt macht mich das Ding fertig.

Im Grunde geht es, nur wenn ich Taster DOWN drücke dann saust das ganze 
Menü durch, von unten nach oben das gleiche. Manchmal geht es 
allerdings! Warum???
Der obere testcode läuft einwandfrei.

Die Taster werden mit Timer0 alle 10ms abgefragt.
Also ist "tast" ja 10ms lang z.b. UP und er läuft das Menü nach oben 
durch. Deshalb wollte ich "tast" wieder auf 0 setzen aber das juckt ihn 
überhaupt nicht.
volatile uint8_t tast = 0;
volatile uint8_t menutap = 1;


void menu(void)
{   
  
  
/*
  if(tast == RIGHT)
    {LCD_puts("right",1);
      menutap = 10;
    }
  else if(tast == LEFT)
    {LCD_puts("Left",1);
    menutap = 5;
    }
  else if(tast == DOWN)
    {LCD_puts("DOWN",1);
    menutap = 50;
    }
  else if(tast == UP)
    {LCD_puts("UP",1);
      menutap = 6;
    }
  else if(tast == ENTER)
    {LCD_puts("enter",1);
      menutap = 8;
    }
  else if(tast == FALSE)
    {LCD_puts("false",1);
          
    }
  
  */
  
  
  
    switch (menutap)
    {
    
    case 1: if(tast==DOWN)
          {menutap = 2;
          tast = 0; 
          }
        LCD_puts("TAP 1",1);
        break;
        
    case 2: if(tast==UP)
          {
          menutap = 1;
          tast =0;
          }
        else if(tast==DOWN)
          {menutap = 3;
          tast = 0;
          }
        
          LCD_puts("TAP 2",1);
          
          break;
    
    case 3: if(tast == UP)
          {menutap = 2;
          tast = 0;
          }
        LCD_puts("TAP 3",1);
        break;
        
    }
}  
 

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Jabber Wock (jabber)

>Im Grunde geht es, nur wenn ich Taster DOWN drücke dann saust das ganze
>Menü durch, von unten nach oben das gleiche. Manchmal geht es
>allerdings! Warum???

Du musst die Flanke der Tastendrücke erkennen und in tast speichern

>Der obere testcode läuft einwandfrei.

Liegt wharschienlich am umgebenden Programm.

>durch. Deshalb wollte ich "tast" wieder auf 0 setzen aber das juckt ihn
>überhaupt nicht.

Wahrscheinlich weil deine Routine den vom Interrupt aus wieder 
überschreibt.

MFG
Falk

Autor: Jabber Wock (jabber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, also ich werte die Taster hiermit aus. Ist das nicht ok? Ist 
eigentlich aus dem Tutorial nur halt im timer.
Wie müsste es denn aussehen?
ISR(TIMER0_OVF_vect)
{
  
if  (!(PINB & (1 << PB4)) ) 
  { tast = ENTER;
    
  }
else if (!(PINB & (1 << PB6)) ) 
  { tast = UP;
    
  }
else if (!(PINB & (1 << PB7)) )
  { tast = DOWN;
    
  }
else if (!(PINE & (1 << PE2))) 
  { tast = LEFT;
    
  }
else if (!(PINE & (1 << PE3))) 
  { tast = RIGHT;
    
  }
else 
  {
    tast= FALSE;
  }

TCNT0 = 0x64;  


Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tu dir selbst einen Gefallen und benutzte diese
Tastaturroutinen. Sie sind full prove, unterstützen
die Unterscheidung von langen und kurzen Tastendrücken
und können auch einen Autorepeat.

Wenn du diese Funktionen im Einsatz hast, wirst du für
Tastenabfragen nie wieder was anderes verwenden wollen.

http://www.mikrocontroller.net/articles/Entprellun...

Autor: Ich hab's! (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Tastaturroutinen. Sie sind full prove, unterstützen

http://dict.leo.org/ende?search=fully%20proven ?

Jetzt hab ich's:

http://dict.leo.org/ende?search=fool-proof

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.