Cześć
Dopiero zaczynam działać z AVR'ami i chciałem poddać pod ocenę procedurę obsługi klawiatury matrycowej 4x4.
Wiedzę zaczerpnąłem z artykułu dotyczącego obsługi klawiszy:
http://mirekk36.blogspot.com/2012/10/ob ... a-cd3.htmlWykorzystałem część rozwiązań jak możliwość przekazywania funkcji do procedury bazowanie na timerach programowych oraz nazewnictwo części zmiennych. Całkowicie nowa jest struktura procedury z poniższymi właściwościami:
- Eliminacja drgań styków przy naciśnięciu i zwolnieniu klawisza
- Nie reagowanie w przypadku wystąpienia szpilkowych zakłóceń na pinach klawiatury
- Niezależny przydział każdej linii klawiatury do dowolnego pinu w dowolnym porcie
- Auto powtarzanie znaków przy długim naciśnięciu - ustalanie zwłoki do powtarzania oraz okresu pomiędzy powtórzeniami.
- Procedura nieblokująca oparta na znaczniku "klock" i poleceniu Switch symulująca automat stanowy.
- Przekazywanie znaku do bufora. W przypadku nie odczytania z bufora znaku procedura nie nadpisuje go blokując odczyt kolejnych znaków.
- Zabezpieczenie kontrolera przed zwarciem pinów przy jednoczesnym naciśnięciu kilku klawiszy przez odłączanie nieskanowanych kolumn poprzez Hi-Z
Wymaga podciągnięcia 4 linii wejściowych do Vcc poprzez rezystory - w moim przypadku 33kOhm do linii PD4-PD7.
Wyeksportowana procedura z Eclipsa:
Załącznik:
KeyPad4x4_MultiPort.zip
i listing głównej procedury:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.