STM32Butterfly2: obsługa klawiatury matrycowej i graficznego LCD

W przypadku nie spełnienia warunku if(!check_col) program realizuje odczyt wartości na liniach kolumn, odpowiada za to funkcja int col = io_get_mask(KEYSCAN_PORT, KEYSCAN_COL_PINS).  Mamy tu jednoczesne zadeklarowanie zmiennej col oraz przypisanie do niej zwracanej wartości przez funkcję. Funkcja odczytująca wymaga podania dwóch parametrów: pierwszy z nich określa port GPIO, drugi parametr stanowi maskę ograniczającą odczyt tylko do wskazanych linii.

Wartość odczytana inna niż 0 oznacza, że został wciśnięty został któryś z przycisków. W takim przypadku następuje konwersja wartości zmiennych row oraz col do postaci kodu klawisza i przypisanie do zmiennej key. Za konwersję odpowiada funkcja key_translate(row, col), wnętrze jej ogranicza się do sprawdzania warunków porównujących zmienne i zwrócenia kodu klawisza, zostało to zrealizowane przy użyciu polecenia case.

Ostatnim krokiem jest zaktualizowanie wartości zmiennej row, operacja realizowana jest przez wykonanie przesunięcia wartości o jeden w lewo, w przypadku przekroczenia maksymalnej wartości zmienna przyjmuje wartość początkową.

Na zakończenie należy zauważyć, iż w programie głównym nie ma zdefiniowanych poleceń odpowiedzialnych za inicjalizację mikrokontrolera (zegary RCC). Jak wiadomo mikrokontroler po uruchomieniu w pierwszej kolei przechodzi do obsługi odpowiedniego przerwania – reset_handler. Właśnie powyższe przerwanie odpowiada za wstępną konfigurację mikrokontrolera oraz konfigurację części peryferii, przerwanie to powoduje także przejście do wykonywania poleceń zamieszczonych w funkcji main().

O autorze