- Zakaj potrebujemo 4x4 tipkovnico:
- Kako deluje 4x4 matrična tipkovnica:
- Potreben material:
- Shema vezja:
- Pojasnilo programiranja:
Tipkovnice so široko uporabljene vhodne naprave, ki se uporabljajo v različnih elektronikih in vdelanih projektih. Uporabljajo se za sprejemanje vhodov v obliki števil in abeced ter njihovo vnašanje v sistem za nadaljnjo obdelavo. V tej vadnici bomo povezali matrično tipkovnico 4x4 s PIC16F877A.
Preden se spustimo v podrobno logiko in se naučimo uporabljati tipkovnico, bomo morali vedeti nekaj stvari.
Zakaj potrebujemo 4x4 tipkovnico:
Običajno za branje digitalnega signala uporabljamo en sam V / I zatič mikrokrmilniške enote, kot je vhod stikala. V nekaj aplikacijah, kjer je za vnos potrebno 9, 12, 16 ključev, če dodamo vsak ključ v vrata mikrokrmilnika, bomo na koncu uporabili 16 V / I vrat. Teh 16 vhodno / izhodnih vrat ni namenjenih samo za branje vhodno-izhodnih signalov, ampak jih je mogoče uporabiti tudi kot zunanje povezave, kot so podpore ADC, I2C, SPI povezave podpirajo tudi ti I / O zatiči. Ker so ti zatiči povezani s stikali / tipkami, jih ne moremo uporabljati, temveč le kot vhodno / izhodna vrata. To sploh ni smiselno. Torej, kako zmanjšati število pinov? Odgovor je z uporabo šestnajstiške tipkovnice ali matrične tipkovnice; lahko zmanjšamo število pinov, ki povezujejo matrične tipke 4x4. Uporabil bo 8 nožic, od tega 4 v vrstice in 4 v stolpce, s čimer prihrani 8 nožic mikrokrmilnika.
Kako deluje 4x4 matrična tipkovnica:
Na zgornji sliki je modul matrične tipkovnice prikazan na levi. Na desni je prikazana notranja povezava in vrata. Če vidimo vrata, je 8 nožic, so najprej 4 od leve proti desni X1, X2, X3 in X4 so vrstice, zadnji 4 od leve proti desni pa Y1, Y2, Y3, Y4 so štirje stolpci. Če naredimo 4 vrstice ali X stran kot izhod in bi jim logika nizko ali 0, in da v 4 stolpce kot vhod in branje tipk bomo prebrali stikalo pritisnite, ko dopisnik Y dobi 0.
Enako se bo zgodilo v matriki nxn, kjer je n število. To je lahko 3x3, 6x6 itd.
Zdaj samo pomislite, da je pritisnjeno 1. Nato se 1 nahaja v vrstici X1 in stolpcu Y1. Če je X1 0, potem bo Y1 0. Na enak način lahko zaznamo vsak ključ v vrstici X1, tako da zaznamo stolpce Y1, Y2, Y3 in Y4. To se zgodi pri vsakem stikalu in odčitali bomo položaj stikal v matriki.
Vsak zeleni krog je stikalo in oba sta povezana na enak način.
V tej vadnici bomo tipkovnico povezali z naslednjimi specifikacijami -
- Uporabili bomo notranji pull up
- Dodali bomo možnost odklopa ključa
Ko pa stikal ne pritisnemo, moramo Y1, Y2, Y3 in Y4 dvigniti na najvišjo ali 1. V nasprotnem primeru ne moremo zaznati logičnih sprememb, ko pritisnemo stikalo. Toda s kodami ali programi nismo mogli, ker se ti zatiči uporabljajo kot vhod in ne kot izhod. Torej, uporabili bomo notranji register delovanja v mikrokrmilniku in upravljali te nožice kot način šibkega vlečenja. Z njegovo uporabo bo v privzetem stanju logični način visoke omogočenosti.
Tudi ko pritisnemo tipko, se pri stikalnih kontaktih ustvarijo konice ali se ustvari šum, zaradi česar se večkrat pritisne stikalo, kar ni pričakovati. Torej, najprej bomo zaznali pritisk stikala, počakali nekaj milisekund, znova preverili, ali je stikalo še vedno pritisnjeno ali ne, in če je stikalo še vedno pritisnjeno, bomo končno sprejeli stikalo, sicer ne. To se imenuje odbijanje stikal.
Vse to bomo implementirali v našo kodo in povezavo naredili na plošči.
Preverite tudi, kako povežete tipkovnico 4x4 z drugimi mikrokrmilniki:
- Povezava tipkovnice z Arduino Uno
- Vmesnik matrične tipkovnice 4x4 z mikrokrmilnikom 8051
- Vmesnik 4x4 tipkovnice z mikrokrmilnikom ATmega32
- Zaklepanje digitalne kode Raspberry Pi na tabli
Potreben material:
- Breadboard
- Pic-kit 3 in razvojno okolje v vašem računalniku, tj. MPLABX
- Žice in konektorji
- Znak LCD 16x2
- Kristal 20 MHz
- 2 kos 33pF keramični pokrovček za disk.
- 4.7k upor
- 10k prednastavitev (spremenljivi upor)
- 4x4 matrična tipkovnica
- 5 V adapter
Shema vezja:
Kristale in upor bomo povezali v pripadajoče nožice. Prav tako bomo LCD v 4-bitnem načinu povezali prek PORTD. Preko vrat RB4 smo povezali šestnajstiško ali matrično tipkovnico.
Če PIC ne poznate, začnite z Uvod v mikrokrmilnik PIC: Uvod v PIC in MPLABX
Pojasnilo programiranja:
Na koncu je podana celotna koda za povezovanje matrične tipkovnice z mikrokrmilnikom PIC. Koda je enostavna in samoumevna. Knjižnica tipkovnice je edina stvar, ki jo je treba razumeti v kodi. Tu smo za povezavo tipkovnice in LCD-ja 16x2 uporabili knjižnico keypad.h in lcd.h. Torej, poglejmo, kaj se dogaja znotraj tega.
V notranjosti tipkovnice.h bomo videli, da smo uporabili glavo xc.h, ki je privzeta knjižnica registra, frekvenca kristala je določena za uporabo pri uporabi zakasnitve, uporabljene v datoteki kepad.c Vrata tipkovnice smo določili v registru PORTRB in posamezne nožice opredelili kot vrstico (X) in stolpce (Y).
Uporabili smo tudi dve funkciji, eno za inicializacijo tipkovnice, ki bo vrata preusmerila kot izhod in vhod, in pregled pritiska na stikalo, ki bo ob klicu vrnil stanje stikala.
#include
V keypad.c bomo videli, da bo spodnja funkcija vrnila pritisk tipke, ko funkcija optičnega bralnika tipkovnice ne bo vrnila 'n'.
char switch_press_scan (void) // Pridobi ključ od uporabnika { char key = 'n'; // Predpostavimo, da nobena tipka ni pritisnjena (key == 'n') // Počakajte, da pritisnete tipko. // Ključe znova preglejte in znova vrnite ključ; // ob pritisku tipke vrnemo njeno vrednost }
Spodaj je funkcija branja s tipkovnice. V vsakem koraku bomo vrstice X1, X2, X3 in X4 postavili kot 0 in odčitali stanje Y1, Y2, Y3 in Y4. Zakasnitev se uporablja za učinek razveljavitve, ko je stikalo še vedno pritisnjeno, bomo vrnili z njim povezano vrednost. Ko ne pritisnemo nobenega stikala, vrnemo 'n'.
char tipkovnica_skener (void) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; če (Y_1 == 0) {__delay_ms (100); medtem ko (Y_1 == 0); vrnitev '1'; } če (Y_2 == 0) {__zakasnitev_ms (100); medtem ko (Y_2 == 0); vrnitev '2'; } if (Y_3 == 0) {__delay_ms (100); medtem ko (Y_3 == 0); vrnitev '3'; } če (Y_4 == 0) {__zakasnitev_ms (100); medtem ko (Y_4 == 0); vrnitev 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; če (Y_1 == 0) {__delay_ms (100); medtem ko (Y_1 == 0); vrnitev '4'; } če (Y_2 == 0) {__zakasnitev_ms (100); medtem ko (Y_2 == 0); vrnitev '5'; } if (Y_3 == 0) {__delay_ms (100); medtem ko (Y_3 == 0); vrnitev '6'; } če (Y_4 == 0) {__zakasnitev_ms (100); medtem ko (Y_4 == 0); vrnitev 'B'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; če (Y_1 == 0) {__delay_ms (100); medtem ko (Y_1 == 0); vrnitev '7'; } če (Y_2 == 0) {__zakasnitev_ms (100); medtem ko (Y_2 == 0); vrnitev '8'; } if (Y_3 == 0) {__delay_ms (100); medtem ko (Y_3 == 0); vrnitev '9'; } če (Y_4 == 0) {__zakasnitev_ms (100); medtem ko (Y_4 == 0); vrnitev 'C'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; če (Y_1 == 0) {__delay_ms (100); medtem ko (Y_1 == 0); vrnitev '*'; } če (Y_2 == 0) {__zakasnitev_ms (100); medtem ko (Y_2 == 0); vrni '0'; } if (Y_3 == 0) {__delay_ms (100); medtem ko (Y_3 == 0); vrni '#'; } če (Y_4 == 0) {__zakasnitev_ms (100); medtem ko (Y_4 == 0); vrnitev 'D'; } vrni 'n'; }
Na zadnjih štirih bitih bomo nastavili tudi šibko vleko navzgor, smer vrat pa nastavimo kot zadnja 4 vhoda in prva 4 kot izhod. OPTION_REG & = 0x7F; se uporablja za nastavitev načina šibkega dvigovanja na zadnjih nožicah.
void InitKeypad (void) { Keypad_PORT = 0x00; // Nastavitev vrednosti zatičev vrat na tipkovnici nič Keypad_PORT_Direction = 0xF0; // Zadnji 4 zatiči vhod, prvi 4 zatiči izhod OPTION_REG & = 0x7F; }
V glavnem programu PIC (podanem spodaj) smo najprej nastavili konfiguracijske bite in vključili nekaj potrebnih knjižnic. Nato v void funkcijah system_init inicializiramo tipkovnico in LCD. In končno v glavni funkciji smo prebrali tipkovnico s klicem switch_press_scan () funkcijo in se vrne vrednost na lcd.
Celotno kodo z zaglavnimi datotekami prenesite od tukaj in si oglejte spodnji predstavitveni video.