Image223 (4)

Image223 (4)



■ Programowanie

Podmenu oraz wywoływanie funkcji

Nasze menu aktualnie się wyświetla, ale jeszcze nic ciekawego nie jest w stanie zrobić. Dodamy teraz fragmenty kodów, które umożliwią wywołanie podmenu albo funkcji skojarzonej z pozycją.


Listing 136 - rysowanie widocziych pozycji menu

static VOld system menuDrawltems(

MENUITEM_P* pmenu, uint8 t index)

{

uint8_t a;

pm©rtu +- indexj

for(a-0 5 a<LCD_SYJ a-H-)

{
// wczytuję Informacje z FLASH do RAM MENUITEM menu;

menc?y_?(&mer.u, pmenu. sizeof (menu)) I

1fOmanu.typ* -■ MBNUT_END) break;

lcd_GoTo(l, e)5

ir,enu.DrewPi;oc(lc:d_Get:FileO , irenu. ldName) \

-H-pmenu;
ł

Listing 138- lwurzenie tablicy opisującej menu

MENUITEM_P app_mainmenu [] =

{

{MENUT_FUNC, IDS_Pcsl, sysrem_mPn\«Ras©Draw, jNULL}}, {NEN[IT_FtlNC , TDS_Pcs2, sys t©m_jnenu3aseDraw, jNULL}], {MEHUT_FUNC, IDS_Pcs3, oyatcnTirenuBaseDraw, jNULL)J, {HENUT_FUNC, 3DS_Pcs4, sys tem_rr.enu3aseD: aw, jNULL)), {nehut_func, lDS_Pus5, system_rr.enu3aseDraw, {nul...}] , {KENUT_END, 0, NULL, jNULL)}

};


Listing 139- podstawowa funkcja rysująca pozycję menu

void system menuEaseDraw(FILE* stream, uintl6 t idNanie) {

fpuis_P(lanqsys_GetText(idName), stream);

>


Listing 140 - wyświetlenie menu

systemjneri- ((menuitem_?*) app_mainmenu) ;


Do funkcji system menu, w miejscu gdzie interpretowane są komunikaty, dodajemy obsługę dwóch nowych przypadków widocznych na listingu 141.

Teraz mamy możliwość stworzenia i obsłużenia bardziej skompilowanego menu widocznego na listingu 142. Z poziomu tego menu wywoływane są funkcje, których zarys pokazuje listing 143 jedna z odrysowywa-nych pozycji to nie sam tekst, ale tekst z wartością i wymaga specjalnej funkcji rysującej.

W tej chwili nie ma znaczenia, co wspomniane funkcje dokładnie robią. Funkcja zaznaczona na czerwono nie została jeszcze omówiona. Są to proste działania, które nie wnoszą do naszego programu nic nowego, dlatego postanowiłem ich opis przenieść na stronę kursu znajdującą się na mojej stronie autorskiej. Znajdziesz tam omówienie fragmentów', które uznałem za mniej ważne i nie zmieściły się w tym artykule.

Podsumowanie

Dziś wyjątkowo w artykule me znalazły się pełne kody - brakujące fragmenty, wraz


Lhilng 137 - przejście na pozycję niżej w menu

Static uint8 t system_menuDowr.(

MENUITEP._P* pmenj,uint8 t* pindex, uin-.8 r* perrpos)

(

uint8_t aj

uir.t8_t curpoo - *pcurposJ uir.t8 t index - *pindexj // Zmiana pozycji kursora if(curoos — LCD_SY-1)

1
// Przesuwanie całeqo menu
// Badanie czy nie pokaże się wtedy koniec
for(a»0; h<*lcd_sy; a++)
{

IfCp ęm_read_byte (Apmer.u [i:idex+d] . type)    MENUT_END)

return T; // nic nie zmieniam

}

++(*pindex);

return 0;

)

else

ł

// Przesunięcie kursora jeśli docelowa pozycja to nie koniec if(pgm read_byte (Aurnenu [iudejct-curpos+l] • type) I* MENUT_END) -t-t-C*pcurpos); return 0;

I

Idea rozwiązania Obsługa menu

Przewijalne menu jest wygodnym rozwiązaniem tam, gdzie musimy manipulować większą ilością paiamcl-rów. Często zdarza się, ze menu jest główną częścią jakiegoś programu.

Menu będzie przesuwane zgodnie /. rysunkiem A. Będziemy mieli swobodę przy tworzeniu struktury menu, jednak zawsze będzie cno obsługiwane w ten sposób.

Ełomcrrty oplw pozycji menu

Opis menu

W oktualnym rozwiązaniu proponuję, aby menu było opisane w postaci tabiicy określającej poszczególne pozycje. Tabiica ta będzie umieszczona w panięci programu Każdy element naszej tablicy będzie składni się ze struktury zawierającej pola opisane w obrazku w ramce.

Tworzenie menu oraz podmenu

Z punktu widzenia aplikacji menu będzie tworzone poprzez wywołania jednej funkcji przyjmującej jako parametr wskaźnik na strukturę menu. Daje to jednocześnie bardzo wygodne narzędzie do tworzenia podmenu - wystarczy wywołać rckurcncyjnic funkcję tworzącą menu. Sprawi to dodatkowo, że po powrocie

do wyższego poziomu menu pozycja kursora będzie pamiętana.

Obsługa za pomocą tylko dwóch przycisków

Pewnym utrudnieniem naszego układu piololypowcgo jest to, że mamy w nim tylko dwa przyciski. Potraktujmy to jednak jako wyzwanie - stworzenie wygodnego interfejsu przy ich wykorzystaniu. Moja propo życia jest taka:

Przycisk. SW2: zmiana wartosciprzesuwanie się po ment. Aby bez problemu można było przemieszczać się w obu kierunkach, kierunek zrniar. jest odwracany, jeśli minie ls od ostatniego naciśnięcia. Daje to efekt, że gdy naciskamy przycisk szybko (minimum raz na sekundę) lub go trzymamy, zmiana następuje przykładowo w górę. Jeśli teraz odczekamy sekundę -następne naciśnięcie spowoduje zmianę w dół. W menu kierunek zmian będzie odwracany także po dojściu do skrajnej pozycji.

Przycisk SW1: krótkie naciśnięcie - potwierdze-nie/wybór; długie naciśnięcie - wycofanie się / anulowanie.

46 Sierpień 2006 Elektronika dla Wszystkich


Wyszukiwarka

Podobne podstrony:
Image222 (3) Programowanie ■ indeksu. Normalnie funkcje te powinny zwracać wartość 0. Jeśli jednak z
Image212 Programowanie ■ W C parametry do funkcji przekazywane są przez wartość. Oznacza to, że
img006 (4) i tak dalej, i uk dalej. On dokładnie opowie ci, czego możesz się spodziewać. Ale młodzi
w10 32 OPOWIADANIA ZEBRANE A szofer się zbudził, ale jeszcze niezupełnie był przytomny, bo mnie tak
Nasz pierwszy występ przed całą szkołą. Piosenka bardzo się podobała. Ale jeszcze musimy dużo
15722 Image221 (3) Programowanie Zauważ, że pojawiają się tutaj dwa nowe napisy IDSjCnt oraz IDS Hul
może być funkcja S kodująca obroty wrzeciona obrabiarki. Zapisuje się ją na początku programu oraz w
Ćwiczenie 2. Otwórz program Notatnik oraz folder Dokumenty, który znajduje się w Menu Start. Rozmieś

więcej podobnych podstron