Proszę Jacku, zaznaczyłem odpowiedzialną za to część czerwoną elipsą:
[
attachment=4583]
To będzie lekcja 8 :
Nasz programik potrafi wyswietlać na LCD tylko pojedyńcze znaki - korzystamy w tym celu oczywiście z funkcji
bajt_lcd()
Przydałaby się funkcja wyświetlająca całe wyrazy ... żeby to zrobić musicie poznać
Tablice ... Przykłady zapisu deklaracji tablicy:
Kod:
char tablica[10];
int liczby[];
Pierwsze to tablica o nazwie "tablica" składająca sie z 10 elementów char (czyli 8 bitowych),
Drugie to tablica, o któej nic nie wiadomo z ilu elementów sie składa, wiadomo natomiast że składa się z wartości int (czyli 16 bitowych).
Przy zapisie wyrazów(a nawet zdań) będziemy korzystać z tablic, które składają się ze znaków czyli char.
Kod:
char tab[]="jakis_wyraz"
tworzy tablicę o nazwie tab 12 elementową, bo jest 11 znaków + ostatni dodawany automatycznie - znacznik końca tablicy "\0" - specjalnie napisałem
\0 to nie pomyłka.
0 (samo zero) potraktowane zostanie jako kolejny element tablicy - czyli znak ASCII o kodzie 48 (jeśli nie wiecie co to tablica znaków ASCII to poszukajcie w necie - przyda sie wam).
Wracamy do naszego ostatniego przykładu tablicy ... Jesli w kodzie swojego programu umieścicie definicje tej tablicy a po niej
to wyświetli wam czwarty znak tablicy (bo numeracja zaczyna sie od "0" ) - czyli literę
i.
Jeśli umieścicie w kodzie
Kod:
bajt_lcd(tab[0]);
bajt_lcd(tab[7]);
to Atmega prześle do wyświetlacza pierwszy znak tablicy (czyli "j"), a następnie ósmy znak z tablicy (czyli "y").
Czyli już wiecie że liczba w nawiasie kwadratowym określa nam który znak z tablicy będzie brany pod uwagę.
Co zrobic by wyświetlały się całe tablice znaków (czyli całe napisy). Wklejcie na samym końcu kodu progrramu (przed ostatnim nawiasem klamrowym) to :
Kod:
char tab[]="to jest napis";
int i=0;
while(tab[i]!=0)
{
bajt_lcd(tab[i]);
i=i+1;
}
skompilujcie i uruchomcie, a zobaczycie efekt. Tłumaczę linijka po linijce co to znaczy:
1. definiujemy tablice znaków o nazwie
tab i treści
to jest napis (+ znacznik końca tablicy czyli zero, którego tu nie widzimy - ale zawsze na końcu każdej tablicy jest)
2. deklarujemy, że będziemy używac zmiennej
i która początkowa wartość będzie równa
0
3. pętla while będzie wykonnywać polecenia pomiędzy nawiasami klamrowymi do momentu kiedy i-ty element tablicy będzie zerem - czyli znacznikiem końca tablicy. Dokładnie zappis ten oznacza "wykonaj jesli i-ty element tab jest
różny od zera.
!= oznacza "różny" (nierówny)
5. wyślij do lcd i-ty element tablicy (pamiętamy że przy deklaracji ustawiliśmy wartość
i na
0, więc zacznie wyświetlać od pierwszego (zerowego dla Atmegi) elementu tablicy
6. zwiększ wartość
i o
1.
Potem pętla wraca do ponownego sprawdzenia warunku czy i-ty (następny) element tablicy nie jest już zerem czyli znacznikiem końca tablicy. Mam nadzieję że to zrozumiecie ... Spróbujcie to uruchomic u siebie a ja jutro wstawie nowa wersję obsługi wyświetlacza. Jesli wstawicie zamiast
i=i+1; to:
i=i+2; to wyświetli Wam oczywiście co drugi znak tablicy ... jednak może przeoczyć znacznik końca tablicy !