Bascom: Obsługa klawiatury matrycowej 4×4

4x4Klawiatura jest pierwszym urządzeniem, które pozwoliło na wprowadzenie danych do komputera. Dzisiejsze klawiatury potrafią mieć nawet po 200 przycisków, jednak dzisiaj nie skupimy się nad takimi klawiaturami lecz „nieco” mniejszą- klawiaturą matrycową 4×4, posiadającą 4 kolumny i 4 rzędy przycisków. Zapraszam do zapoznania się z jej obsługą.

 

 

 

 


Aby przeprowadzić dzisiejszy poradnik będziemy potrzebować:

  • Mikrokontroler Atmega32 (ćwiczenie nie będzie działać z mikrokontrolerami z rodziny Attiny)
  • Klawiaturę matrycową 4×4 (wersja THT : wersja SMD)
  • przewody połączeniowe
  • 4x diody LED wraz z rezystorami
  • przejściówkę UART -> COM albo UART -> USB

Jak działa klawiatura matrycowa ?



KBD
Zasada działania klawiatury matrycowej

Jak popatrzymy na powyższe zdjęcie to możemy zauważyć że tego typu klawiatura ma połączone przyciski w rzędy i kolumny, w taki sposób że przyciśnięcie jednego przycisku spowoduje zwarcie dwóch linii- pionowej (kolumny) i poziomowej (rzędy). Od razu narzuca nam się wada takiej klawiatury- nie można wcisnąć w jednym momencie więcej niż jednego przycisku ponieważ program nie rozpozna które dokładnie zostały wciśnięte.
Każdy przycisk ma swój unikalny numer. Dla klawiatury 4×4 ich zakres mieści się w 0-15. Oznacza to że jak wciśniemy np. górny lewy przycisk, to wtedy zostają zwarte linie pierwszej kolumny i pierwszego rzędu przez co mikrokontroler otrzymuje wartość zwrotną równą 15, jeżeli nie zostanie wciśnięty żaden przycisk to mikrokontroler interpretuje to jako 16.  Skoro teorię mamy już za sobą to teraz możemy przejść do praktyki ;)

numer
Mapowanie przycisków klawiatury

Programowanie klawiatury

Na samym początku łączymy części jak to jest przedstawione na schemacie niżej:

 

scheamy
Schemat blokowy połączenia

Jak już mamy wszystko połączone to włączamy Bascoma i określamy na samym początku nasz mikrokontroler:

Następnie ustawiamy prędkość transmisji danych wyrażonych w bodach, która będzie potrzebna do transmisji danych UART:

 

teraz przyszedł moment na zdefiniowanie klawiatury:

 

Config Kbd = Portc oznacza do którego portu klawiatura została podłączona

Debounce = 10 oznacza czas pomiędzy odczytami stanu klawiszy, wyrażony w milisekundach

Delay = 10 oznacza czas opóźnienia, który zostanie wprowadzony w momencie wykrycia przycisku, wyrażony w milisekundach

Nie możemy również zapomnieć o zdefiniowaniu portu, do którego podłączone są diody LED:

 

Teraz musimy kierować otrzymane informację z klawiatury na zmienną, w naszym przypadku jest to zmienna K:

 

W tym momencie nasz poradnik rozbije się na parę części:

1.1 Sprawdzenie klawiatury po UART:

 

Wgrywamy ten program:

 

Funkcja Getkbd() pobiera wartość klawiatury, aby nie powtarzać cały czas tej funkcji to przyrównujemy jej zmienną K. Następnie każemy czekać 100ms programowi, po czym ma wysłać tą zmienną K.

W Bacomie wywołujemy Terminal Emulator (Ctrl + T) i wchodzimy w Settings i zakładkę Communication, tam ustawiamy port COM, w moim wypadku jest to COM3 i baudrate na 1200 i zamykamy. Teraz powinny nam się terminalu wyświetlać same liczby 16, co oznacza że nie został wciśnięty żaden klawisz. Natomiast jak wciśniemy jakiś przycisk to pojawi się jego liczba.

 

16
Żaden przycisk nie został wciśnięty

Teraz możemy lekko zmodyfikować program usuwając Print K i dopisując warunek:

 

Jeżeli zmienna K = 16 to wyślij Nie wcisnieto przycisku. Program powinien dać nam taki efekt:

 

niewci
Nie wciśnięto przycisku

Teraz jak wiemy jak już w praktyce działa taka klawiatura to możemy pójść o krok dalej i przypisać jakiemuś klawiszowi funkcję do spełnienia.

1.2 Klawiatura matrycowa w zastosowaniu:
Na potrzeby tego poradnika, przyciski rzędu 3. będą odpowiadać za zapalanie diod LED.  Przedstawię teraz program odpowiadający za te funkcję. Program ten jak widzimy jest zbudowany z warunków, główny warunek to jeżeli zmienna K=16 to mikrokontroler ma wysłać: Nie wcisnieto przycisku!. Następnie dochodzą „podwarunki” że jeżeli zmienna K =13 (1. przycisk 3. rzędu) zostanie wywołana to ma na 0,5 sekundy zaświecić diodę LED podpiętą do portu Porta.3 i takie same funkcje przypisane są dla wszystkich klawiszy 3. rzędu z tym, że dla każdego przycisku zapalana jest inna dioda LED.

 


Jeżeli chcesz być informowany na bieżąco o nowych częściach kursu to kliknij „Lubię to!” bądź subskrybuj naszą stronę, aby otrzymywać na adres e-mail nowości ze strony. Jeżeli masz jakieś pytania to śmiało zadawaj je na forum ; )