mikrocontroller.net

Forum: Compiler & IDEs Brauche Hilfe bei LCD-Menü (AVR Butterfly)


Autor: Tom Heinrich (dastoem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
ich versuche grade auf dem AVR Butterfly ein Menü zu erstellen. Mein 
bisheriger Code:

menu.h
/*
Menütexte erstellen
*/
static const char menu_string0[] PROGMEM = "Anfang";
static const char menu_string1[] PROGMEM = "Test1";
static const char menu_string2[] PROGMEM = "Ende";


/*
*/
typedef struct MENU{
const char *text;

unsigned char next;
unsigned char prev;

} MENU_ENTRY;

const MENU_ENTRY menue[] PROGMEM = {

{menu_string0, 1, 2},
{menu_string1, 2, 0},
{menu_string2, 0, 2},

};

Meine main.c
int main(void)
{    
  unsigned char MENU_COUNT=0; //menu entry
  char key; //pressed key
  char run=TRUE; //Hilfsvariable updatet das LCD-Display

  
  Initialization();
  sei(); 
  
  for (;;)            // Main loop
    {
    if (run)
    {
      LCD_puts_f((char *)pgm_read_word (&menue[MENU_COUNT].text), 1); //get current menu entry
      LCD_Colon(0);
      run = NULL; //only update lcd when key is up-to-date  
    }
    
    key = getkey();
    
    if (key==KEY_PLUS)
    { 
      MENU_COUNT=GetPost(MENU_COUNT, TRUE); //get next menu entry
      run = TRUE; //update lcd
    }
      
    if (key==KEY_MINUS)
    {
      MENU_COUNT=GetPost(MENU_COUNT, FALSE); //get previous menu entry
      run = TRUE;
    }  
    
        
    
    } //End Main loop
  
  return 0;
}

/*********************************************************
*
*  Function name  :   GetPost
*
*  Returns  :      POST
*
*  Parameters  :    CURRENT, MODE
*
*  Purpose:       Get Next/Previous menu entry
*
**********************************************************/

unsigned char GetPost (unsigned char CURRENT, BOOL MODE)
{
  unsigned char POST;
  
  if (MODE==TRUE) //get next entry
  {  
    POST = menue[CURRENT].next;
  }
  
  else      //get previous entry
  {
    POST = menue[CURRENT].prev;
  }
  
  return POST;
}

GCC kompiliert das ganze ohne Probleme, nur leider wird nur der erste 
String ('Anfang') auf dem LCD angezeigt. Bei Drücken des Joysticks ist 
nichts mehr auf dem Display zu sehen.

Hat jemand von euch ne Idee?

Autor: Tom Heinrich (dastoem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab meinen Fehler jetzt selbst gefunden:
unsigned char GetPost (unsigned char CURRENT, BOOL MODE)
{
  unsigned char POST;
  
  if (MODE==TRUE) //get next entry
  {  
    POST = pgm_read_byte(&menue[CURRENT].next);
  }
  
  else      //get previous entry
  {
    POST = pgm_read_byte(&menue[CURRENT].prev);
  }
  
  return POST;
}

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.