STM32Butterfly2: obsługa klawiatury matrycowej i graficznego LCD
Większość typowych projektów mikrokontrolerowych wymaga współpracy systemu z użytkownikiem. Zwykle do tego celu stosowane są mechaniczne przyciski podłączane do poszczególnych linii, w wyniku czego każdy jeden przycisk zajmuje jedną linię. Niestety takie rozwiązanie posiada jedną znaczącą wadę – w przypadku konieczności zastosowania większej liczby przycisków powoduje zajmowanie cennych linii GPIO. Rozwiązaniem na to jest stosowanie klawiatur matrycowych, wykorzystanie tego obniża liczbę wykorzystanych linii GPIO kosztem nieznacznego skomplikowania kodu programu. Poniższy projekt przedstawia właśnie wykorzystanie klawiatury matrycowej. Projekt został przygotowany dla zestawów ewaluacyjnych: STM32Butterfly oraz STM32Butterfly2, na obu płytkach działa bez konieczności wprowadzania dodatkowych zmian czy odrębnej kompilacji.
Fot. 1. Wygląd modułu KAmodKB4x4
Fot. 2. Wygląd modułu KAmodLCD1
Do uruchomienia projektu wymagane, poza płytką uruchomieniową, są dwa dodatkowe moduły: KAmodKB4x4 (fotografia 1) oraz KAmodLCD1 (fotografia 2). Połączenie modułów z płytką przedstawiono na rysunku 3. Linie PE0 do PE7 oraz PD0 i PD1 są wyprowadzone na złączu szpilkowym, natomiast linie sygnałowe PA4, PA5 i PA7 są wyprowadzone na złączu przeznaczonym do transmisji SPI.
Rys. 3. Podłączenie modułów do „motyla”
Działanie projektu polega na przedstawianiu na wyświetlaczu modułu KAmodLCD1 kodu wciśniętego klawisza modułu klawiatury matrycowej – KAmodKB4x4. Listing głównej części programu został przedstawiony poniżej.
int main(void) { //Initialize system timer time_init(); //Initialize nokia display nlcd_init(); //Initialize the kbd matrix keyscan_init(); //Display welcome message nlcd_put_string( "www.boff.pl", 0, 0 ); nlcd_put_string( "Clicked key:", 0, 1 ); //Main loop for(;;) { key_t key = keyscan_get(); if(key>0) //Got key { nlcd_set_position(6,2); nlcd_put_char(key); } } return 0; }