Har hittat en massa trådar om hur man får igång LCDer både i mjukvara och hårdvara, men jag har inte hittat någon tråd om hur man gör en meny till en LCD med en µC.
De två varianter jag har funderat på är switch/case och en array med data. Switch/case-varianten fungerar så att man helt enkelt kollar vilket mode man är i och utför det som står i den delen. Om man vill flytta upp eller ner i menyn så flyttas "pekaren" till nästa plats i menyn. Denna metod funkar ju och man har ganska bra översikt vad som händer, men det känns onödigt att skriva samma if-sats om och om igen.
Att använda en array av data borde i teorin vara lite kortare.Vad jag har förstått så använder samma rutiner för knapparna och flytta pekaren, sen flyttar man bara runt i en array som bestämmer vad som ska göras. Denna variant är ännu överskådligare eftersom man lägger hela menyn som endast innehåller menydata på ett ställe och funktionerna på en annan och ingen överflödig kod som ser precis likadan ut på 20 ställen.
Problemet för mig är att jag inte riktigt får dom att göra som jag vill, så fort jag vill göra lite extra i dom så strular det till sig.
Det finns säkert fler sätt att göra detta på och det är dom jag vill ha reda på. Hur gör ni när ni gör ett menysystem? Kom gärna med så många förslag som möjligt och lägg gärna upp kod. Jag programmerar för tillfället i Hitech C till PIC18 men det spelar ingen roll om det är i andra språk eller till andra kretsar.
Flernivå menysystem till µc
- EagleSpirit
- Inlägg: 1288
- Blev medlem: 27 maj 2003, 23:15:48
- Ort: Västerås
- Kontakt:
Jag använder menysystem mycket, du kan kolla på en Janfire NH pelletsbrännare (om du råkar ha en sån) samt en del av Safe Traffic's system.
Generellt gör jag såhär:
Har oftast 4 knappar ('+', '-', 'OK', 'Meny') där man väljer punkt med 'Meny', ändrar värden med '+'/'-' och sparar ändringen med 'OK'.
Jag brukar ha en variabel som kallas 'Menu-Index', initialiseras till 0.
Generellt gör jag såhär:
Har oftast 4 knappar ('+', '-', 'OK', 'Meny') där man väljer punkt med 'Meny', ändrar värden med '+'/'-' och sparar ändringen med 'OK'.
Jag brukar ha en variabel som kallas 'Menu-Index', initialiseras till 0.
Kod: Markera allt
char Got_Key;
Got_Key = Get_Key();
if(Got_Key) // Any key recieved?
{
if(Got_Key == Key_Menu) if(++Menu_Index > MAX_MENU) Menu_Index = 0;
switch(Menu_Index)
{
case 0:
switch(Got_Key)
{
case key_Plus: // Increase some value
break;
case key_Minus: // Decrease some value
break;
}
Print_LCD("Whatever needed at this point");
break;
case 1:
switch(Got_Key)
{
case key_Plus: // Increase some value
break;
case key_Minus: // Decrease some value
break;
}
Print_LCD("Whatever needed at that point");
break;
default: Menu_Index = 0; // Just to catch a lot of trouble
}
}
- EagleSpirit
- Inlägg: 1288
- Blev medlem: 27 maj 2003, 23:15:48
- Ort: Västerås
- Kontakt: