- Prečo potrebujeme klávesnicu 4x4:
- Ako funguje maticová klávesnica 4x4:
- Potrebný materiál:
- Schéma zapojenia:
- Vysvetlenie programovania:
Klávesnice sú široko používané vstupné zariadenia používané v rôznych elektronických a zabudovaných projektoch. Používajú sa na prijímanie vstupov vo forme čísel a abecedy a ich vkladanie do systému na ďalšie spracovanie. V tomto výučbe sa chystáme prepojiť maticovú klávesnicu 4x4 s PIC16F877A.
Predtým, ako sa pustíme do podrobnej logiky a naučíme sa, ako používať klávesnicu, budeme musieť vedieť niekoľko vecí.
Prečo potrebujeme klávesnicu 4x4:
Na čítanie digitálneho signálu typicky používame jeden I / O pin jednotky mikrokontroléra, ako je prepínací vstup. V niekoľkých aplikáciách, kde je na vstup potrebných 9, 12, 16 klávesov, ak pridáme každý kľúč do portu mikrokontroléra, nakoniec použijeme 16 I / O portov. Týchto 16 I / O portov slúži nielen na čítanie vstupno-výstupných signálov, ale je možné ich použiť aj ako periférne pripojenie. Tieto I / O piny podporujú aj pripojenia ADC, I2C a SPI. Pretože sú tieto piny spojené s prepínačmi / klávesmi, nemôžeme ich použiť, ale iba ako I / O porty. To nemá vôbec zmysel. Ako teda znížiť počet pinov? Odpoveď je pomocou hexadecimálnej klávesnice alebo maticovej klávesnice; môžeme znížiť počet pinov, ktoré združujú maticové kľúče 4x4. Bude používať 8 pinov, z ktorých 4 sú zapojené do riadkov a 4 zapojené do stĺpcov, a teda šetria 8 pinov mikrokontroléra.
Ako funguje maticová klávesnica 4x4:
Na hornom obrázku je maticový modul klávesnice zobrazený vľavo. Vpravo je zobrazené interné pripojenie a tiež portové pripojenie. Ak vidíme port, je tu 8 pinov, prvé 4 zľava doprava sú X1, X2, X3 a X4 sú riadky a posledné 4 zľava doprava sú Y1, Y2, Y3, Y4 sú štyri stĺpce. Ak urobíme 4 riadky alebo stranu X ako výstup a urobíme ich logicky nízkymi alebo 0, urobíme 4 stĺpce ako vstupné a prečítame si klávesy, ktoré prečítame prepínač, keď korešpondent Y dostane 0.
To isté sa stane v matici nxn, kde n je číslo. To môže byť 3x3, 6x6 atď.
Teraz si len myslite, že je stlačená 1. Potom sa 1 nachádza v riadku X1 a stĺpci Y1. Ak je X1 0, potom Y1 bude 0. Rovnakým spôsobom môžeme snímať každý kľúč v riadku X1 snímaním stĺpcov Y1, Y2, Y3 a Y4. Táto vec sa stane pri každom prepínači a my si prečítame polohu prepínačov v matici.
Každý zelený kruh je prepínačom a obidva sú navzájom spojené rovnakým spôsobom.
V tomto výučbe prepojíme klávesnicu s nasledujúcimi špecifikáciami -
- Použijeme vnútorné vytiahnutie
- Pridáme kľúčovú možnosť de-bounce
Ale keď spínače nie sú stlačené, musíme urobiť Y1, Y2, Y3 a Y4 tak vysoko alebo 1. Inak nemôžeme detekovať logické zmeny, keď je spínač stlačený. Nemohli sme to však urobiť pomocou kódov alebo programu, pretože tieto piny sa používajú ako vstup, nie ako výstup. Použijeme teda interný prevádzkový register v mikrokontroléri a tieto piny budeme prevádzkovať ako aktivovaný režim slabého vyťahovania. Ak použijete toto, dôjde k režimu vysokej logickej aktivácie, keď je v predvolenom stave.
Tiež, keď stlačíme kláves, dôjde k hrotom alebo šumu generovaným kontaktmi spínača a v dôsledku toho dôjde k stlačeniu viacerých spínačov, čo sa neočakáva. Najprv teda detekujeme stlačenie spínača, počkáme niekoľko milisekúnd, znova skontrolujeme, či je spínač stále stlačený alebo nie, a ak je spínač stále stlačený, spínač tlače nakoniec prijmeme, inak nie. Tomu sa hovorí ako odblokovanie spínačov.
Toto všetko implementujeme do nášho kódu a vytvoríme spojenie na prkénku.
Skontrolujte tiež, ako prepojiť klávesnicu 4x4 s inými mikrokontrolérmi:
- Rozhranie klávesnice s Arduino Uno
- Rozhranie maticovej klávesnice 4x4 s mikrokontrolérom 8051
- Rozhranie klávesnice 4x4 s mikrokontrolérom ATmega32
- Digitálny kódový zámok Raspberry Pi na nepájivom poli
Potrebný materiál:
- Nepál
- Pic-kit 3 a vývojové prostredie vo vašom PC, tj MPLABX
- Drôty a konektory
- Znakový LCD 16x2
- 20MHz kryštál
- 2 ks 33pF keramický kryt disku.
- 4,7k rezistor
- 10k predvoľba (variabilný rezistor)
- Maticová klávesnica 4x4
- 5 V adaptér
Schéma zapojenia:
Spojíme kryštály a odpor v združených kolíkoch. Taktiež pripojíme LCD v 4-bitovom režime cez PORTD. Cez port RB4 sme pripojili hexadecimálnu alebo maticovú klávesnicu.
Ak ste v PIC nováčikom, začnite kapitolou Začíname s mikrokontrolérom PIC: Úvod do PIC a MPLABX
Vysvetlenie programovania:
Na konci je uvedený kompletný kód na prepojenie maticovej klávesnice s mikrokontrolérom PIC. Kód je jednoduchý a zrozumiteľný. Knižnici klávesnice je potrebné rozumieť iba v kóde. Tu sme použili keypad.h a lcd.h knižnicu k rozhraniu klávesnice a 16x2 LCD. Poďme sa teda pozrieť, čo sa v ňom deje.
Vo vnútri keypad.h uvidíme, že sme použili hlavičku xc.h, ktorá je predvolenou knižnicou registrov, frekvencia kryštálu je definovaná pre použitie pre použitie oneskorenia použitého v súbore kepad.c. Porty klávesnice sme definovali v registri PORTRB a jednotlivé piny sme definovali ako riadok (X) a stĺpce (Y).
Použili sme tiež dve funkcie, jednu na inicializáciu klávesnice, ktorá presmeruje port na výstup a vstup, a skenovanie stlačeného spínača, ktoré po vyvolaní vráti stav stlačeného spínača.
#include
V keypad.c uvidíme, že nižšie uvedená funkcia vráti stlačenie klávesu, keď funkcia skenera klávesnice nevráti „n“.
char switch_press_scan (void) // Získanie kľúča od používateľa { char key = 'n'; // Predpokladajme, že počas (key == 'n') nie je stlačené žiadne tlačidlo // Počkajte, kým nebude stlačené tlačidlo key = keypad_scanner (); // Skenovanie kláves znova a znova kláves návrat; // po stlačení klávesu potom vrátiť jeho hodnotu }
Ďalej je uvedená funkcia čítania z klávesnice. V každom kroku urobíme riadok X1, X2, X3 a X4 ako 0 a načítame stav Y1, Y2, Y3 a Y4. Oneskorenie sa používa na efekt debounce, keď je spínač stále stlačený, vráti hodnotu, ktorá je s ním spojená. Ak nestlačíte žiadny spínač, vrátime sa „n“.
char key_scanner (void) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); while (Y_1 == 0); návrat '1'; } if (Y_2 == 0) {__delay_ms (100); while (Y_2 == 0); návrat '2'; } if (Y_3 == 0) {__delay_ms (100); while (Y_3 == 0); návrat '3'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); návrat 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); while (Y_1 == 0); návrat '4'; } if (Y_2 == 0) {__delay_ms (100); while (Y_2 == 0); návrat '5'; } if (Y_3 == 0) {__delay_ms (100); while (Y_3 == 0); návrat '6'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); návrat 'B'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); while (Y_1 == 0); návrat '7'; } if (Y_2 == 0) {__delay_ms (100); while (Y_2 == 0); návrat '8'; } if (Y_3 == 0) {__delay_ms (100); while (Y_3 == 0); návrat '9'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); návrat 'C'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; if (Y_1 == 0) {__delay_ms (100); while (Y_1 == 0); návrat '*'; } if (Y_2 == 0) {__delay_ms (100); while (Y_2 == 0); návrat '0'; } if (Y_3 == 0) {__delay_ms (100); while (Y_3 == 0); návrat '#'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); návrat 'D'; } návrat 'n'; }
Nastavíme tiež slabé vytiahnutie na posledné štyri bity a tiež nastavíme smer portov ako posledné 4 vstupy a prvé 4 ako výstup. OPTION_REG & = 0x7F; sa používa na nastavenie režimu slabého vyťahovania na posledných kolíkoch.
void InitKeypad (void) { Keypad_PORT = 0x00; // Nastaviť hodnoty pinov portu klávesnice na nulu Keypad_PORT_Direction = 0xF0; // Vstup posledných 4 pinov, výstup prvých 4 pinov OPTION_REG & = 0x7F; }
V hlavnom programe PIC (uvedenom nižšie) sme najskôr nastavili konfiguračné bity a zahrnuli niekoľko potrebných knižníc. Potom vo funkciách void system_init inicializujeme klávesnicu a LCD. A konečne v roku v hlavnej funkcii sme čítali klávesnice volaním switch_press_scan () funkciu a vracia hodnotu LCD.
Stiahnite si odtiaľto kompletný kód so súbormi hlavičiek a pozrite si ukážkové video nižšie.