LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

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. 1. Wygląd modułu KAmodKB4x4

 

 

Fot. 2. Wygląd modułu KAmodLCD1

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”

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;
}