ISIX-RTOS – przykład 2 – kolejki FIFO i obsługa graficznego wyświetlacza LCD

Struktura ta pochodzi bezpośrednio z biblioteki graficznej SPGL (napisanej w „czystym” C) i przechowuje informację na temat bitmap zawartych w pamięci Flash mikrokontrolera. Wygenerowanie odpowiednich struktur umożliwia narzędzie konwertera umożliwiającego tworzenie na podstawie plików graficznych plików wynikowych *.c zawierających definicję obrazków. Wszystkie wygenerowane bitmapy zawarte w projekcie znajdują się w pliku images.cpp, natomiast ich definicje zawarte są w pliku images.hpp, i zostały zawarte w przestrzeni nazw images.
Klasa nokia_display, implementuje fizyczną obsługę wyświetlacza graficznego z telefonu NOKIA-3310. Deklaracja klasy zawarta jest w pliku nokia_display.hpp (list. 3).

List. 3. Deklaracja klasy nokia_display

Klasa zawiera metody zapewniające mechanizmy podstawowej obsługi wyświetlacza, takie jak wyświetlanie tekstu, wyświetlanie bitmap, czy ustawienie kursora wyświetlacza na zadanej pozycji. Konstruktor klasy (list. 4) jest odpowiedzialny za inicjalizację obiektu.

List. 4. Konstruktor klasy nokia_display odpowiedzialny za inicjalizację obiektu

Wywołuje on metodę prywatną hw_init(), która jest odpowiedzialna za inicjalizację układów peryferyjnych mikrokontrolera (portów GPIO, oraz układu SPI1). Następnie wywoływana jest metoda prywatna lcd_init(), która jest odpowiedzialna za fizyczną inicjalizację wyświetlacza, oraz zerowanie pamięci obrazu.
Metoda put_char() (list. 5) odpowiada za wypisanie pojedynczego znaku na wyświetlaczu LCD.

List. 5. Metoda put_char()odpowiada za wyświetlenie pojedynczego znaku na LCD

Kontroler wyświetlacza nie ma wbudowanego generatora znaków, dlatego tablica znaków została utworzone w kodzie programu, gdzie pojedynczy znak zajmuje 6 bajtów pamięci Flash. Na podstawie numeru porządkowego znaku wyznaczany jest początek znaku w tablicy znaków, a następnie poszczególne bajtu znaku przepisywane są do pamięci obrazu wyświetlacza. Wyświetlacz domyślnie skonfigurowany jest w trybie poziomym, więc zapisanie każdego bajtu powoduje zapalenie lub zgaszenie 8 pionowych pikseli. Ustawienie wyświetlania na zadanej pozycji umożliwia metoda set_position(unsigned x, unsigned y)list. 6.

List. 6. Metoda set_position(unsigned x, unsigned y) służy do ustawienia początku wyświetlania w określonym punkcie

Do pobrania

O autorze