Brauche Hilfe bei LCD-Menü (AVR Butterfly)

OP #809163
Lesenswert?

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 #809188
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren