Brauche Hilfe bei LCD-Menü (AVR Butterfly)

OP #809163
Hallo Leute,
ich versuche grade auf dem AVR Butterfly ein Menü zu erstellen. Mein 
bisheriger Code:

menu.h
1
/*
2
Menütexte erstellen
3
*/
4
static const char menu_string0[] PROGMEM = "Anfang";
5
static const char menu_string1[] PROGMEM = "Test1";
6
static const char menu_string2[] PROGMEM = "Ende";
7

8

9
/*
10
*/
11
typedef struct MENU{
12
const char *text;
13

14
unsigned char next;
15
unsigned char prev;
16

17
} MENU_ENTRY;
18

19
const MENU_ENTRY menue[] PROGMEM = {
20

21
{menu_string0, 1, 2},
22
{menu_string1, 2, 0},
23
{menu_string2, 0, 2},
24

25
};

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

7
  
8
  Initialization();
9
  sei(); 
10
  
11
  for (;;)            // Main loop
12
    {
13
    if (run)
14
    {
15
      LCD_puts_f((char *)pgm_read_word (&menue[MENU_COUNT].text), 1); //get current menu entry
16
      LCD_Colon(0);
17
      run = NULL; //only update lcd when key is up-to-date  
18
    }
19
    
20
    key = getkey();
21
    
22
    if (key==KEY_PLUS)
23
    { 
24
      MENU_COUNT=GetPost(MENU_COUNT, TRUE); //get next menu entry
25
      run = TRUE; //update lcd
26
    }
27
      
28
    if (key==KEY_MINUS)
29
    {
30
      MENU_COUNT=GetPost(MENU_COUNT, FALSE); //get previous menu entry
31
      run = TRUE;
32
    }  
33
    
34
        
35
    
36
    } //End Main loop
37
  
38
  return 0;
39
}
40

41
/*********************************************************
42
*
43
*  Function name  :   GetPost
44
*
45
*  Returns  :      POST
46
*
47
*  Parameters  :    CURRENT, MODE
48
*
49
*  Purpose:       Get Next/Previous menu entry
50
*
51
**********************************************************/
52

53
unsigned char GetPost (unsigned char CURRENT, BOOL MODE)
54
{
55
  unsigned char POST;
56
  
57
  if (MODE==TRUE) //get next entry
58
  {  
59
    POST = menue[CURRENT].next;
60
  }
61
  
62
  else      //get previous entry
63
  {
64
    POST = menue[CURRENT].prev;
65
  }
66
  
67
  return POST;
68
}

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?
OP
Hab meinen Fehler jetzt selbst gefunden:
1
unsigned char GetPost (unsigned char CURRENT, BOOL MODE)
2
{
3
  unsigned char POST;
4
  
5
  if (MODE==TRUE) //get next entry
6
  {  
7
    POST = pgm_read_byte(&menue[CURRENT].next);
8
  }
9
  
10
  else      //get previous entry
11
  {
12
    POST = pgm_read_byte(&menue[CURRENT].prev);
13
  }
14
  
15
  return POST;
16
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.