Programování klávesnice
Klávesnici si můžete zakoupit v různém provedení – vždy je to ale určitý počet řádků a určitý počet sloupců. Každý sloupec nebo řádek se musí ovládat jedním bitem, takže pro náš 8 bitový port můžeme ovládat maximálně 4 x 4 znaků.
Klávesnice, na které si vysvětlíme princip programu, má 3 sloupce a 4 řádky – každý sloupec a každý řádek je připojen na jeden pin portu. Vycházíme ze zadaného schématu.
Obr. 1: Schéma maticové klávesnice
Dle hardwarového zapojení vidíme, že je nutno postupně poslat na jednotlivé sloupce 0 a pak programem testovat řádek po řádku, jestli se tato nula nedostala na pin příslušného řádku. Při zmáčknutí klávesy se propojí sloupec s řádkem.
Na pinu 10 je napájení Ucc, na pinu 1 je zem.
Zkusíme nejdříve program, kde po zmáčknutí klávesy 1 (na portu P1) se zobrazí na sedmisegmentovce (na portu P3) číslo 1 a po 100 ms zhasne.
ZAC: MOV P1,#11011111b
; inicializace levého sloupce(na sloupec, kde je ; klávesa 1 pošleme „0“)
SKOK: JB P1.3, SKOK
; test zmáčknutí klávesy -po zmáčknutí dochází ke ; zkratu – přenesení 0
MOV P3, #11111001b
; je - li kláv 1 zmáčknuta, dojde k zobrazení čísla
CALL MS100 ; čas rozsvícení 100 ms
MOV P3, #11111111b ; zhasnutí všech segmentů
JMP ZAC ; znovu čekej na zmáčknutí
Nová je instrukce JB bit, hop - tato instrukce testuje, na co je nastaven daný bit. Pokud je roven „1“, skáče na návěstí hop, pokud je roven „0“, jde dál a provede se další instrukce. Opakem je instrukce JNB.
Pro lepší pochopení si vybereme 3 klávesy v různých sloupcích a zadání by mohlo vypadat třeba takto:
Po zmáčknutí klav 1 se zobrazí číslo 1, po zmáčknutí klav 5 se zobrazí číslo 5, po zmáčknutí kláv 9 se zobrazí číslo 9.
Všechny 3 klávesy jsou umístěny v rozdílných sloupcích, proto musíme každý sloupec nejdřív inicializovat – tedy pošleme na něho 0 a na ostatní piny jedničky.
Program může být řešen třeba takto:
ZAC: MOV P1,#11011111b
; inicializace levého sloupce (na; sloupec klav 1 pošleme „0“)
JB P1.3,KL5
; test zmáčknutí klávesy - po zmáčknutí; zkrat – přenesení 0
MOV P3,#11111001b ; při zmáčknutí klav 1 se zobrazí č 1
KL5: MOV P1,#10111111b
; zapnutí prostředního sloupce –; posíláme „0“ na bit P1.6
JB P1.2,KL9 ; test, jestli se nula nedostala na P1.2
MOV P3,#10010010b
; pokud byla zmáčknuta klav 5, zobrazí ; se číslo 5 na P3
KL9: MOV P1,#01111111b
; zapnutí pravého sloupce – posíláme ; „0“ na bit P1.7
JB P1.1,ZAC ; test, jestli se nula nedostala na P1.1
MOV P3,#10010000b
; při zmáčknutí klav 9, zobrazí se číslo 9 na ; portu P3
JMP ZAC
; program nezapomeň správně zacyklit
Lehce si můžete dodělat zobrazení znaků po zmáčknutí všech kláves.
Na stejném programu si můžeme ukázat jednoduchou kombinaci klávesnice zvuk. Necháme v akci stejné klávesy, jen po jejich zmáčknutí se nebudou zobrazovat znaky, ale na portu P3 bude připojen reproduktor a budou se z něho ozývat různé tóny.
Pro přehlednost budou tóny vyřešeny podprogramy.
ZAC: MOV P1,#11011111b ; inicializace levého sloupce
JB P1.3,KL5 ; test zmáčknutí klávesy
CALL ZVUK1
; je-li kláv 1 dojde k vygenerování tónu 1
KL5: MOV P1,#10111111b ; zapnutí prostředního sloupce
JB P1.2,KL9 ; test, jestli se nula nedostala na P1.2
CALL ZVUK2 ; klav5, dojde k vygenerování tónu 2
KL9: MOV P1,#01111111b ; zapnutí prostředního sloupce
JB P1.1,ZAC ; test, jestli se nula nedostala na P1.1
CALL ZVUK3 ; při zmáčknutí klav9, tón 3
JMP ZAC ; program správně zacyklit
Tímto jednoduchým způsobem si můžete vytvořit malý zvukový klavír. Každá klávesa bude vydávat jiný tón.