Stránka 1 z 1

Vytvoření menu v C pro ATmega16

Napsal: 15 bře 2011, 19:02
od raptor1811
Zdravím, potřeboval bych vytvořit jednoduché menu v Céčku se zobrazením na LCD. Hlavní menu by mělo tak přibližně 4 položky a u některých položek by bylo submenu s dalšími řekněme dva až třemi položkami. Po vybrání určité položky by se zavolala určená funkce, která by vykonala určené operace. U tlačítek pro rolování v menu můžu použít i přerušení (při stisknutí libovolného tlačítka se vyvolá přerušení a můžu číst klávesy). Už se mi to i povedlo nějak naprogramovat, ale je to strašně neefektivní a nepřehledné, jelikož neumím moc používat ukazatele. Poradí někdo jak to naprogramovat co možná nejefektivněji?

Napsal: 15 bře 2011, 21:28
od Bernard
Snad přes stavový automat. Možné stavy menu se očíslují (třeba 0..11 pro 4x3 položky). Po resetu se stav inicializuje, a při přerušení od tlačítka se zavolá funkce
switch (stav) {
case 0: ..........; break;
case 1: ..........; break;
case 2: ..........; break;
case 3: ..........; break;
..............
}

Pro každý "case" se podle stlačeného tlačítka změní dosavadni stav na nový, a případně se vykoná nějaká akce.

Asi to nebude nejefektivnější, ale přehledné.

Napsal: 16 bře 2011, 09:07
od Atlan
no ukazem ti ako sa to nema robit :D

switch (mode)
{
case 254: {if (!ok) {menu1();}
if (!c) {off251();}
if (!up) {tplus249();}
if (!down){tminus248();}
break;}

case 253: {if (!ok) {hodn247();}
if (!c) {menu254();}
if (!up) {prog246();}
if (!down){prog246();}
break;}
.................

case 247:{if (!ok) {nden243();}
if (!c) {time253();}
if (!up) {minp244();}
if (!down){hodp245();}
break;}
...............................

void off251 (void)
{mode=254;
if(!nzv).............


void tplus249 (void)
{
if (nzv)
{mode=254;............................

void hodn247 (void)
{mode=247;
ncasden();
return;
}

Napsal: 16 bře 2011, 09:18
od piitr

Napsal: 16 bře 2011, 11:10
od MrMarian
Zdravim,

Zrovna robim aj ja menu, a robim to cez switch a case ... Mam tam tri urovne menu

MENU1 - hlavne menu
MENU2 - vyber parametrov
MENU3 - nastavene parametrov / premnennej (cas, max. / min. teplota, limity, ON / OFF)

To Atlan: Ako je to spravne? Mozes sem dat kusok kodu?

Dakujem a prajem pekny den.

M.

Napsal: 16 bře 2011, 11:26
od mtajovsky
Pokud to budete resit jako stavovy automat tak radeji pres distribucni tabulku s pointry na funkce. Zapis pres case a if je neprehledny a spatne se modifikuje.

http://www.elektroworld.h51.eu/modules. ... highlight=

Napsal: 16 bře 2011, 13:02
od ZdenekHQ
MENU 2 a 3 jde sloučit - obslužnýmu podprogramu předáš jen ukazatel na tabulku s pojmenováním parametrů a nějaký registr naplníš patřičnými proměnnými (většinou jen aktuální hodnota, lze i definovat max a min hodnotu, popř. výpis on/off či numericky). Po návratu data z registru zase načteš zpět do proměnných, popř. uložíš do eeprom.