Hallo Forum,
in vielen Beiträgen zu Menus mit Funktionszeigern sind structs erwähnt,
die neben Texten und integer-Variablen nur eine einzige Funktion haben.
Ich muss ehrlich sagen, ich hab noch nicht kapiert, wie das
funktionieren soll. Ist es nicht so, dass Menus immer Parameter ändern?
Dann brauch ich nach meiner Meinung pro Parameter 4 Funktionen: Menu zum
Darstellen, Plus und Minus zum Ändern des Wertes und zum Darstellen des
neuen Wertes, und Enter zum Bestätigen und abspeichern des neuen Werts.
Der folgende Code-Ausschnitt zeigt das Vorgehen mit dem Parameter tv
1 | ...
|
2 | status = 0
|
3 |
|
4 | while(1)
|
5 | {
|
6 |
|
7 | if ( ( flag & 0x04 ) == 0x00 || ADC_Read(0) > 800) //keine Taste gedrückt
|
8 | {
|
9 |
|
10 | knopp = tastenhandler();
|
11 |
|
12 | if ( status == 5 )
|
13 | {
|
14 | switch(knopp)
|
15 | {
|
16 | case MENU :goto menuende;
|
17 | case PLUS :status = tvplus(status); goto menuende;
|
18 | case MINUS :status = tvminus(status); goto menuende;
|
19 | case ENTER :status = eepromparameter (status); goto menuende;
|
20 | }
|
21 | }
|
22 |
|
23 | if ( status == 4 )
|
24 | {
|
25 | switch(knopp)
|
26 | {
|
27 | case MENU :status = menu5(status);goto menuende;
|
28 | ...
|
5 Parameter hab ich schon, drei werde ich noch ergänzen, dann hab ich
aber auch alle Betriebsarten des Programms erschlagen. Die Frage ist
jetzt, ob das nicht alles viel zu kompliziert ist, und ich wirklich so
viele Funktionen brauche. Und ob es nicht sinnvoll ist, eine
Funktionstabelle vo0n 8*4 Funktionen anzulegen, z.B.
uint8_t menu[uint8_t status][uint8_t knopp]
um die switch-case-Geschichte zu umgehen.
Würde mich interessieren, wie Ihr das seht. Ach so, ich hab ein
zweizeiliges LCD, also viel Text kann ich gar nicht darstellen.
Vielen Dank für's lesen
Gruß Thomas