- Zašto nam treba 4x4 tipkovnica:
- Kako 4x4 matrična tipkovnica radi:
- Potreban materijal:
- Kružni dijagram:
- Objašnjenje programiranja:
Tipkovnice su široko korišteni ulazni uređaji koji se koriste u raznim elektroničkim i ugrađenim projektima. Koriste se za unos podataka u obliku brojeva i abeceda i isti unose u sustav za daljnju obradu. U ovom uputstvu sučelit ćemo 4x4 matričnu tipkovnicu s PIC16F877A.
Prije nego što uđemo u logiku detalja i naučimo koristiti tipkovnicu, morat ćemo znati nekoliko stvari.
Zašto nam treba 4x4 tipkovnica:
Uobičajeno koristimo jedan I / O pin mikrokontrolera za čitanje digitalnog signala, poput ulaza prekidača. U nekoliko aplikacija gdje je za unos potrebno 9, 12, 16 tipki, ako dodamo svaki ključ u priključak mikrokontrolera, na kraju ćemo koristiti 16 I / O priključaka. Ovih 16 I / O priključaka nisu samo za čitanje I / O signala, već se mogu koristiti i kao periferne veze, poput ADC potpora, I2C, SPI veze također podržavaju ti I / O pinovi. Kako su ti pinovi povezani prekidačima / tipkama, ne možemo ih koristiti već samo kao I / O priključke. To uopće nema smisla. Pa, kako smanjiti broj pinova? Odgovor je pomoću šesterostrane tipkovnice ili matrične tipkovnice; možemo smanjiti broj pinova, koji povezuju 4x4 matrične tipke. Upotrijebit će 8 pinova, od kojih 4 spojena u redove i 4 spojena u stupce, čime se štedi 8 pinova mikrokontrolera.
Kako 4x4 matrična tipkovnica radi:

Na gornjoj je slici modul matrične tipkovnice prikazan lijevo. S desne strane prikazana je interna veza, kao i priključna veza. Ako vidimo priključak ima 8 pinova, prva 4 slijeva udesno su X1, X2, X3 i X4 su redovi, a posljednja 4 slijeva udesno su Y1, Y2, Y3, Y4 su četiri stupca. Ako napravimo 4 reda ili X stranu kao izlaz i učiniti ih logički nizak ili 0, a čine 4 stupaca kao input i pročitati ključeve ćemo pročitati prekidač pritisnite dok dopisnik Y dobiva 0.
Ista stvar će se dogoditi u nxn matrici gdje je n broj. To može biti 3x3, 6x6 itd.
Sad samo pomislite da je pritisnuta 1. Tada se 1 nalazi u X1 retku i Y1 stupcu. Ako je X1 0, tada će Y1 biti 0. Na isti način možemo osjetiti svaku tipku u retku X1, osjetom stupaca Y1, Y2, Y3 i Y4. To se događa za svaki prekidač i očitat ćemo položaj prekidača u matrici.
Svaki zeleni krug je prekidač i oboje su povezani na isti način.
U ovom ćemo tutorijalu spojiti ploču sa sljedećim specifikacijama -
- Koristit ćemo unutarnje povlačenje
- Dodati ćemo opciju odbijanja tipke
Ali kada sklopke nisu pritisnute, moramo Y1, Y2, Y3 i Y4 podići u visinu ili 1. Inače ne možemo otkriti logičke promjene kad se prekidač pritisne. Ali nismo uspjeli kodovima ili programom jer se te igle koriste kao ulaz, a ne kao izlaz. Dakle, koristit ćemo interni registar rada u mikrokontroleru i upravljati tim pinovima kao način slabog izvlačenja. Korištenjem ovoga, postojat će logički način visokog omogućavanja kada je u zadanom stanju.
Također, kada pritisnemo tipku, javljaju se skokovi ili se stvara kontakt s kontaktima prekidača, a zbog ovog višestrukog prekidača dolazi do pritiska što se ne očekuje. Dakle, prvo ćemo otkriti prekidač, pričekati nekoliko milisekundi, ponovno provjeriti je li prekidač i dalje pritisnut ili ne, a ako je prekidač i dalje pritisnut, prihvatit ćemo prekidač pritiska napokon, inače ne. To se naziva odbacivanje sklopki.
Sve ćemo to implementirati u naš kôd i uspostaviti vezu na ploči.
Također provjerite kako povezati 4x4 tipkovnicu s drugim mikrokontrolerom:
- Povezivanje tipkovnice s Arduino Uno
- 4x4 matrično povezivanje tipkovnice s mikrokontrolerom 8051
- 4x4 povezivanje tipkovnice s ATmega32 mikrokontrolerom
- Zaključavanje digitalnog koda Raspberry Pi na kruhu
Potreban materijal:
- Breadboard
- Pic-kit 3 i razvojno okruženje na vašem računalu, tj. MPLABX
- Žice i konektori
- LCD s karakterom 16x2
- Kristal od 20 MHz
- 2 kom. 33pF keramička kapa za disk.
- Otpor 4.7k
- 10k unaprijed postavljeno (promjenjivi otpornik)
- 4x4 matrična tipkovnica
- Adapter od 5 V
Kružni dijagram:


Kristale i otpornik spojit ćemo u povezane igle. Također, spojit ćemo LCD u 4-bitnom načinu rada preko PORTD-a. Spojili smo heksadecimalnu ili matričnu tipkovnicu preko porta RB4.
Ako ste novi u PIC-u, krenite s Početak rada s PIC mikrokontrolerom: Uvod u PIC i MPLABX
Objašnjenje programiranja:
Na kraju je dan cjelovit kod za povezivanje matrične tipkovnice s PIC mikrokontrolerom. Kôd je jednostavan i samorazumljiv. Biblioteka tipkovnice jedina je stvar koju treba razumjeti u kodu. Ovdje smo koristili keypad.h i lcd.h Library za povezivanje tipkovnice i LCD-a 16x2. Pa da vidimo što se unutar toga događa.
Unutar tipkovnice.h vidjet ćemo da smo koristili zaglavlje xc.h, koje je zadana knjižnica registara, frekvencija kristala definirana je za uporabu odgode korištene u datoteci kepad.c. Definirali smo priključke tipkovnice na registru PORTRB i definirali pojedinačne igle kao red (X) i stupce (Y).
Također smo koristili dvije funkcije, jednu za inicijalizaciju tipkovnice koja će preusmjeriti port kao izlaz i ulaz i skeniranje prekidača koji će vratiti status prekidača pritiskom na poziv.
#include
Na tipkovnici.c vidjet ćemo da će donja funkcija vratiti pritisak tipke kada funkcija skenera tipkovnice ne vrati 'n'.
char switch_press_scan (void) // Dohvati ključ od korisnika { char key = 'n'; // Pretpostavimo da nije pritisnuta nijedna tipka dok je (key == 'n') // Pričekajte dok se ne pritisne tipka key = keypad_scanner (); // Ponovno skeniranje tipki i ponovno vraćanje ključa; // kada se pritisne tipka, zatim se vraća vrijednost }
Ispod je funkcija čitanja s tipkovnice. U svakom ćemo koraku red X1, X2, X3 i X4 učiniti 0 i očitat ćemo status Y1, Y2, Y3 i Y4. Kašnjenje se koristi za efekt debouncea, kad je prekidač i dalje pritisnut, vratit ćemo vrijednost povezanu s njim. Kad se ne pritisne nijedna sklopka, vratit ćemo 'n'.
char skandiranje tipkovnice (void) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; if (Y_1 == 0) {__zakašnjenje_ms (100); dok (Y_1 == 0); povratak '1'; } if (Y_2 == 0) {__zakasniti_ms (100); dok (Y_2 == 0); povratak '2'; } if (Y_3 == 0) {__zakasniti_ms (100); dok (Y_3 == 0); povratak '3'; } if (Y_4 == 0) {__zakasniti_ms (100); dok (Y_4 == 0); povratak 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; if (Y_1 == 0) {__zakašnjenje_ms (100); dok (Y_1 == 0); povratak '4'; } if (Y_2 == 0) {__zakasniti_ms (100); dok (Y_2 == 0); povratak '5'; } if (Y_3 == 0) {__zakasniti_ms (100); dok (Y_3 == 0); povratak '6'; } if (Y_4 == 0) {__zakasniti_ms (100); dok (Y_4 == 0); povratak 'B'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; if (Y_1 == 0) {__zakašnjenje_ms (100); dok (Y_1 == 0); povratak '7'; } if (Y_2 == 0) {__zakasniti_ms (100); dok (Y_2 == 0); povratak '8'; } if (Y_3 == 0) {__zakasniti_ms (100); dok (Y_3 == 0); povratak '9'; } if (Y_4 == 0) {__zakasniti_ms (100); dok (Y_4 == 0); povratak 'C'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; if (Y_1 == 0) {__zakašnjenje_ms (100); dok (Y_1 == 0); povratak '*'; } if (Y_2 == 0) {__zakasniti_ms (100); dok (Y_2 == 0); povratak '0'; } if (Y_3 == 0) {__zakasniti_ms (100); dok (Y_3 == 0); povratak '#'; } if (Y_4 == 0) {__zakasniti_ms (100); dok (Y_4 == 0); povratak 'D'; } povratak 'n'; }
Također ćemo postaviti slaba povlačenja na posljednja četiri bita, a također ćemo postaviti smjer priključaka kao zadnja 4 ulaza i prva 4 kao izlaz. OPTION_REG & = 0x7F; koristi se za postavljanje slabog načina povlačenja na posljednjim pinovima.
void InitKeypad (void) { Tipkovnica_PORT = 0x00; // Postavljanje vrijednosti pinova priključka tipkovnice na nulu Keypad_PORT_Direction = 0xF0; // Posljednja 4 pina ulaza, prva 4 pina izlaza OPTION_REG & = 0x7F; }
U glavnom PIC programu (dan u nastavku) prvo smo postavili konfiguracijske bitove i uključili nekoliko potrebnih knjižnica. Tada u praznim funkcijama system_init inicijaliziramo tipkovnicu i LCD. I na kraju u u glavnom funkcijom smo pročitali tipkovnice pozivom switch_press_scan () funkciju i vraća vrijednost na LCD.
Preuzmite cijeli kod s datotekama zaglavlja odavde i pogledajte demonstracijski video u nastavku.
