Hallo Johannes,
hoffentlich habe ich Deine Frage richtig verstanden.
Du hast dein Problem doch so beschrieben:
3 unterschiedliche Funktionen:
Der bietet sich ein Aufzählungstyp an (enum)
Der ist auf FUNKTION_LCD gesetzt.
in main wird ein switch mit den möglichen funktionen durchlaufen.
Solange Du nichts anderes auswählst halt Deine LCD.
Die Funktion LCD läuft solange, bis eine Taste gedrückt wird.
Bei diesem Tastendruck wird die globale Variable neue_funktion mit dem
wert der Funktion beschrieben und die LCD-Funktion wird verlassen.
Beim Durchlauf der switches in main wird nun die neue Funktion
aufgerufen.
Der Programmablauf verkompliziert sich noch etwas, wenn Du tatsächlich
mit der gleichen Taste aud der Funktion herausspringen wie
hineinspringen möchtest. Dann must Du noch eine Sperre gegen das
sofortige herausspringen einbauen. Ich mache in C++, also evtl. bool
usw. umschreiben.
Der nachstehende Code ist nicht compiliert oder gar getestet worden.
Nur als Anregung und Stichwortlieferant zu verstehen.
enum welche_funktion
{
FUNKTION_LCD,
FUNKTION_A,
FUNKTION_B
};
welche_funktion neue_funktion;
bool tastenabfrage(void)
{
bool retval = false;
if (taste1 || taste2)
{
retval = true;
if (taste1)
{
neue_funktion = FUNKTION_A;
}else
{
if (taste2)
{
neue_funktion = FUNKTION_B;
}
}
}
return retval;
}
void lcd(void)
{
while (!tastenabfrage())
{
// halt das Display verarbeiten
}
}
void a_funktion(void)
{
while (!tastenabfrage())
{
// halt Deine Funktion a ausführen
}
neue_funktion = FUNKTION_LCD;
}
// Die Funktion B genauso aufbauen
int main(void)
{
for(;;)
{
switch (neue_funktion)
{
case FUNKTION_A:
a_funktion();
break;
case FUNKTION_B:
b_funktion();
break;
default:
lcd();
break;
}
}
}
Viel Spass
Oryx