[5] STM32CUBE w przykładach (obsługa monochromatycznego wyświetlacza graficznego LCD)

Operacje logiczne w C

W kodzie funkcji wysyłających do wyświetlacza polecenia sterujące, wykorzystana została operacja logicznej sumy – „LICZBA_NR_1 | LICZBA_NR_2”. Co powoduje wykonanie takiego kodu? Po „zamianie” obu liczb na postać binarną, operacja ta wykonywana jest osobno na każdej parze bitów, pochodzących z obu liczb i będących na tych samych pozycjach, licząc od prawej. Jeśli choć jeden z nich jest jedynką, w wyniku, na tej samej pozycji, zapiana zostanie jedynka. Istnieje również podobna operacja logicznej koniunkcji – jeśli oba bity będą takie same (zero i zero lub jedynka i jedynka), wynik przyjmie wartość jedynki. Definiujemy ją symbolem „LICZBA_NR_1 & LICZBA_NR_1”. Możemy także zanegować wszystkie bity w danej licznie tj. zamienić jedynki na zera i zera na jedynki, poprzedzając liczbę symbolem „~”.

Drugi projekt – wyświetlanie tekstu

Oprócz wyświetlania bitmap, bardzo często potrzebujemy prezentować na wyświetlaczu litery i cyfry. Rozbudujmy więc nasz projekt, aby to umożliwić. Musimy dodać czcionkę i funkcję wypisującą na wyświetlaczu kolejne znaki. Dodatkowo, wyposażymy mikrokontroler w bufor znaków i to do niego zapisywać będziemy tekst przed wyświetleniem.

Do plików „display.h” i „display.c” dopisujemy kod umieszczony w listingach 4 i 5. Plik „main.c” modyfikujemy zgodnie z listingiem 6.

List. 4. Zawartość pliku display.h

 

List. 5. Zawartość pliku display.c

 

List. 6. Zawartość pliku main.c

 

W pliku „display.h”, do definicji struktury display_config, dodajemy dwuwymiarową tablicę – bufor znaków. Umieszczamy tam także: tablicę map bitowych poszczególnych znaków – czcionkę oraz prototypy dodatkowych funkcji rysujących zawartość bufora znaków oraz poszczególne znaki. Do pliku „display.c”, dodajemy definicje tych funkcji. Modyfikujemy także sekcję „USER CODE 2”, dodając do niej wywołanie nowych funkcji. Od teraz, tekst który chcemy wyświetlić na wyświetlaczu umieszczamy w dwuwymiarowej tablicy „cfg.buffer[y][x]” – gdzie y i x to współrzędne, odpowiednio pionowe i poziome, znaku na wyświetlaczu. Najłatwiej zrobić to przy pomocy funkcji memcpy() – kopiującej fragmenty pamięci z podanego adresu, pod podany adres. Kolejne jej parametry to docelowy adres miejsca w pamięci, źródłowy adres oraz długość, w bajtach, kopiowanych danych. Aby wydobyć adres danej zmiennej lub komórki tablicy, z pamięci, poprzedzamy jej nazwę znakiem „&”.

Powyższy przykład możemy rozbudować i np., korzystając z funkcji sprintf() i snprintf(), zapisywać do bufora i wyświetlać na wyświetlaczu, odczytywane parametry stało i zmiennoprzecinkowe z różnych czujników, czy też zbudować proste menu obsługiwane przyciskami. Przydatnym może być umieszczenie wywoływania funkcji przerysowującej zawartość wyświetlacza, na podstawie bufora znaków, w funkcji obsługi przerwania zegara.

Aleksander Kurczyk

Autor: admin

Admin