Académique Documents
Professionnel Documents
Culture Documents
B A S C O M O W Y
Pojedyncze przyciski
88
skiem. Diody LED D1 i D2 zastosowane zostay jako elementy sygnalizujce dziaanie przycisku S1. Mikrokontroler powinien reagowa na nacinicie przycisku S1, czyli na stan
niski na jego linii PB0. Aby przycisk
poprawnie pracowa linia ta musi zosta skonfigurowana jako wejciowa z
wczonym rezystorem podcigajcym.
Mona take zastosowa zewntrzny
rezystor podcigajcy. W przypadku
gdyby na wejcie mikrokontrolera
po przyciniciu przycisku by podawany stan wysoki (druga kocwka
przycisku doczana do linii zasilajcej, a nie do masy) naley lini
mikrokontrolera PB0 ustawi jako
wejciow, przy czym naley zastosowa zewntrzny rezystor cigajcy
do masy. Nie naley wcza wewntrznego rezystora podcigajcego.
W Bascom AVR do obsugi pojedynczych przyciskw mona wykorzysta
dedykowan instrukcj Debounce. Na
list. 1 przedstawiono przykadowy
program, ktry po kadym naciniciu przycisku S1 gasi i zapala diod
D1. Pierwszym parametrem instrukcji
Debounce jest linia portu wejciowego, do ktrej podczony zosta
przycisk. Aliasowi S1 w programie
przypisano bit 0 rejestru wejciowego Pinb. Poprzez ustawienie bitu 0
rejestru Portb wczony zosta rezystor podcigajcy do linii PB0. linii
sterujcej diod LED D1 take zosta
przypisany alias Led1. Aliasy niewtpliwie upraszczaj odwoywanie si
np. do rejestrw mikrokontrolera oraz
uatwiaj analiz programu. Drugi
parametr instrukcji Debounce okrela
na jaki stan przycisku ma odbywa
si reakcja. W przykadzie po naciniciu przycisku podawany jest stan
0, czyli drugim parametrem jest warto 0. W wymienionym przypadku z
przyciskiem podczonym do linii za-
Rys. 1.
Rys. 2.
K C I K
Fot. 3.
koniec programu
podprogram Obs_s1
Klawiatury matrycowe
B A S C O M O W Y
List. 2.
koniec programu
Obs_s1:
Opozn = 0
opoznienia
Do
Waitms 10
Incr Opozn
podprogram Obs_s1
zerowanie zmiennej liczacej
poczatek petli Do-loop
opoznienie 10 ms
89
K C I K
B A S C O M O W Y
Rys. 4.
Rys. 5.
90
S6, ktre okrelaj linie portu dodatkowych dwch wierszy klawiatury przy
obsudze klawiatur 4x6. W przykadzie
funkcja Getkbd(), gdy nie zosta naciniety aden przycisk zwraca warto
16 (przy matrycy 4x6 byaby to warto 24). Po kadym odebraniu kodu
klawisza jest on przekodowywany na
podstawie tablicy Tab_klw. Po odebraniu kodu klawisza okrela on pozycje
staej, ktra zostaje pobrana z tablicy
i jest nowym kodem nacinietego przycisku. Nowy kod klawisza jest pobierany za pomoc funkcji Lookup i zapisywany w zmiennej Konw_klaw. Dla
przykadu po naciniciu przycisku
1 zostanie odebrany kod 6, czyli z
tablicy zostanie odczytana warto 1,
ktra nastpnie zostaje wywietlona na
LCD jako kod nacinitego klawisza.
W przypadku wikszej matrycy przyciskw, jeli wartoci odczytach klawiszy
bd z przedziau od 0 do 255, tego
typu tablica, moe by nieekonomiczna
ze wzgldu na to, e odczytany kod
klawisza reprezentuje pozycje nowego
kodu w tablicy. Inny sposb przekodowania kodw przyciskw zostanie
przedstawiony w nastpnym przykadzie i polega na znalezieniu w tablicy danego kodu (czyli tablica kodw
bdzie wielkoci odpowiadajcej iloci
przyciskw matrycy). Odczyt przyciskw za pomoc funkcji Getkbd()
mona take umieci w przerwaniu
zgaszanym co pewien czas od timera.
K C I K
wiersza klawiatury. W przypadku braku nacinicia przycisku zwracana jest
warto 15. Kod nacinitego przycisku
jest zapisywany w zmiennej Przycisk.
Jak wida na schemacie przyciskom
klawiatury zostay przypisane wartoci
od 1 do 32. Aby uzyska tego typu
kody nacinitych przyciskw, take
wykorzystano do przekodowania tablice
staych Tab_kod. Ale przekodowywanie
dziaa inaczej ni w poprzednim przykadzie. W tablicy zostay zamieszczone
kody klawiszy zwracanych w przerwaniu Timer0. Za porednictwem funkcji
Lookdown zwracana jest pozycja w tablicy odczytanego kodu klawisza, ktra
bdzie jego nowym kodem. Nowy kod
przycisku zostaje zapisany do zmiennej
Kod_p typu integer. Po przekodowaniu
przy braku nacinitego przycisku bdzie zwracana warto 33. Przykadowo
po przyciniciu przycisku oznaczonego
2 zostanie w przerwaniu odebrany
kod 11. W tablicy ma on pozycje 2
wiec zostanie do zmiennej Kod_p zapiList. 3.
sana warto 2, ktra jest nowym kodem nacinitego przycisku. Przy takim
odczycie danych z tablicy wystarczy w
niej jedynie zapisa wartoci kodw
klawiszy na odpowiednich pozycjach,
czyli bdzie ona miaa warto zblion do liczby przyciskw klawiatury.
Przekodowany kod nacinitego jest
wywietlany na wywietlaczu LCD. Bez
problemw procedur obsugi matrycy
w przedstawionym programie mona
przystosowa do obsugi wikszych
lub mniejszy matryc klawiatur. Gdy w
systemie mikroprocesorowym wystpuj multipleksowane wywietlacze LED,
mona obsug klawiatur matrycowych
zrealizowa przy okazji ich obsugi.
Podczas multipleksowania wywietlaczy
moe si przy okazji odbywa odczyt
klawiatury, ktrej wiersze lub kolumny
s zaczane poprzez tranzystory zaczajce wywietlacze. Mona w ten
sposb zredukowa jeszcze bardziej
liczb linii mikrokontrolera potrzebnych
do obsugi klawiatury matrycowej.
Marcin Wizania, EP
marcin.wiazania@ep.com.pl
List. 4.
czysci LCD
Lcd Przycisk:
Wyswietlenie na LCD napisu
mikrokontrolera, do ktorych
dolaczono LCD
Cong Timer0 = Timer , Prescale = 1024
kongurowanie Timer0 jako timer z podzialem
preskalera przez 1024
Do
On Timer0 Mult_kl
Cls
wylaczenie kursora
Tab_klw:
kongurowanie przerwania
od przepelnienia Timer0, skok do podprogramu
Mult_kl
Portb = 255
B A S C O M O W Y
List. 4. cd
Portd = 254
, 41
52 ,
, 44
58 ,
, 51 , 61 , 71 , 2
62 , 72
, 54 , 64 , 74 , 8
68
91