Ich mach meine Menüs immer zweigeteilt.

Im einen definier ich nen Array mit Structs für die Menüzustände, der im Flash abgespeichert wird. Die Einträge sehen dann z.B. so aus:
{ M_MENU1, KEY_ENTER, M_LCDSETTINGS }, also bin ich im Menüpunkt 1 und drücke die Taste Enter, wird in den Menüpunkt für die LCD-Einstellungen gewechselt. Dort könnte man dann z.B mit
{ M_LCDSETTINGS, KEY_ESC, M_MAIN } zurück zum Hauptbildschirm.

Die Texte für die Menüs liegen in einem _langen_ String im Flash, jeweils getrennt durch '\0'. Eine eigens erstellte Funktion "Menu_GetString(index, text)" sucht in diesem String den Eintrag Nr. 'index' und kopiert dessen Text nach 'text'. Untereinandergeschrieben sieht der String etwa so aus:
"Menu\0"
"Settings\0"
"LCD-Settings\0"
"Back\0"
"Cancel\0"

Mit der Funktion und Index = 3 steht in text dann 'Back' drin.