- Kodėl mums reikalinga 4x4 klaviatūra:
- Kaip veikia „4x4 Matrix“ klaviatūra:
- Reikalinga medžiaga:
- Grandinės schema:
- Programavimo paaiškinimas:
Klaviatūros yra plačiai naudojami įvesties įrenginiai, naudojami įvairioje elektronikoje ir įterptiniuose projektuose. Jie naudojami imti įvestis skaičių ir abėcėlių pavidalu ir juos tiekti į sistemą tolesniam apdorojimui. Šioje pamokoje ketiname susieti 4x4 matricos klaviatūrą su PIC16F877A.
Prieš pradėdami detalių logiką ir išmokdami naudotis klaviatūra, turėsime žinoti keletą dalykų.
Kodėl mums reikalinga 4x4 klaviatūra:
Paprastai skaitmeniniam signalui nuskaityti, pavyzdžiui, jungiklio įėjimui, mes naudojame vieną mikrovaldiklio bloko įvesties / išvesties kaištį. Kai kuriose programose, kur įvesties tikslais reikalingi 9, 12, 16 raktai, jei kiekvieną raktą pridėsime į mikrovaldiklio prievadą, galų gale naudosime 16 įvesties / išvesties prievadų. Šie 16 įvesties / išvesties prievadų yra skirti ne tik skaityti įvesties / išvesties signalus, bet ir juos galima naudoti kaip periferinius ryšius, pvz., ADC palaiko, I2C, SPI jungtys taip pat palaiko tuos įvesties / išvesties kaiščius. Kadangi šie kaiščiai yra sujungti su jungikliais / klavišais, negalime jų naudoti, bet tik kaip įvesties / išvesties prievadus. Tai visiškai neturi prasmės. Taigi, kaip sumažinti smeigtukų skaičių? Atsakymas yra naudojant šešiakampę arba matricos klaviatūrą; galime sumažinti kaiščių skaičių, kurie susieja 4x4 matricos raktus. Tam bus naudojami 8 kaiščiai, iš kurių 4 sujungiami eilėmis ir 4 sujungiami stulpeliuose, taigi bus sutaupyti 8 mikrovaldiklio kaiščiai.
Kaip veikia „4x4 Matrix“ klaviatūra:
Viršutiniame paveikslėlyje kairėje matomas matricos klaviatūros modulis. Dešinėje rodomas vidinis ryšys, taip pat prievado jungtis. Jei matome prievadą, yra 8 kaiščiai, pirmieji 4 iš kairės į dešinę yra X1, X2, X3 ir X4 yra eilutės, o paskutiniai 4 iš kairės į dešinę yra Y1, Y2, Y3, Y4 yra keturi stulpeliai. Jei padarysime 4 eilutes arba X pusę kaip išvestį ir padarysime logišką žemą arba 0, padarysime 4 stulpelius kaip įvestį ir perskaitysime raktus, mes perskaitysime jungiklio paspaudimą, kai korespondentas Y gaus 0.
Tas pats nutiks ir nxn matricoje, kur n yra skaičius. Tai gali būti 3x3, 6x6 ir kt.
Dabar tiesiog pagalvokite, kad 1 yra paspaustas. Tada 1 yra X1 eilutėje ir Y1 stulpelyje. Jei X1 yra 0, tada Y1 bus 0. Tuo pačiu būdu galime pajusti kiekvieną klavišą eilutėje X1, pajutę stulpelius Y1, Y2, Y3 ir Y4. Tai atsitinka kiekvienam jungikliui ir mes perskaitysime jungiklių padėtį matricoje.
Kiekvienas žalias apskritimas yra jungiklis, ir jie abu yra sujungti vienodai.
Šioje pamokoje mes sujungsime klaviatūros plokštę su šiomis specifikacijomis-
- Mes naudosime vidinį traukimą
- Pridėsime pagrindinį atšaukimo variantą
Bet kai jungikliai nėra paspaustas turime padaryti Y1, Y2, Y3 ir Y4, kaip didelės arba 1. Priešingu atveju mes negali aptikti logines pakeitimus, kai jungiklis yra spaudžiamas. Bet mes negalėjome to padaryti kodais ar programa, nes tie kaiščiai naudojami kaip įvestis, o ne išvestis. Taigi, mes naudosime vidinį operacijų registrą mikrovaldiklyje ir valdysime tuos kaiščius kaip silpną įjungimo režimą. Naudojant tai bus numatytas loginis aukšto įjungimo režimas, kai jis bus numatytojoje būsenoje.
Be to, kai paspaudžiame klavišą, yra smaigalių arba triukšmas kyla su jungiklio kontaktais ir dėl to įvyksta daugkartinis jungiklio paspaudimas, kurio nesitikima. Taigi, mes pirmiausia aptiksime jungiklio paspaudimą, palaukime kelias milisekundes, dar kartą patikrinsime, ar jungiklis vis dar paspaustas, ar ne, ir jei jungiklis vis dar nuspaustas, mes priimsime jungiklio paspaudimą, pagaliau ne. Tai vadinama de šoktelėti iš jungikliai.
Visa tai įgyvendinsime savo kode ir sujungsime duonos lentoje.
Taip pat patikrinkite, kaip susieti 4x4 klaviatūrą su kitais mikrovaldikliais:
- Klaviatūros sąsaja su „Arduino Uno“
- 4x4 „Matrix“ klaviatūros sąsaja su 8051 mikrovaldikliu
- 4x4 klaviatūros sąsaja su mikrovaldikliu „ATmega32“
- „Raspberry Pi“ skaitmeninis kodų užraktas ant duonos lentos
Reikalinga medžiaga:
- Bandomoji Lenta
- „Pic-kit 3“ ir kūrimo aplinka jūsų kompiuteryje, ty „MPLABX“
- Laidai ir jungtys
- Veikėjas LCD 16x2
- 20Mhz kristalas
- 2 vnt. Keraminio disko dangtelis 33pF.
- 4.7k rezistorius
- 10 k iš anksto nustatytas (kintamas rezistorius)
- 4x4 „Matrix“ klaviatūra
- 5 V adapteris
Grandinės schema:
Mes sujungsime kristalus ir rezistorių susijusiuose kaiščiuose. Be to, mes prijungsime LCD 4 bitų režimu per PORTD. Šešiakampę arba matricinę klaviatūrą sujungėme per RB4 prievadą.
Jei dar nesinaudojote PIC, pradėkite nuo „PIC“ mikrovaldiklio darbo pradžios: PIC ir MPLABX įvadas
Programavimo paaiškinimas:
Pabaigoje pateikiamas visas „ Matrix“ klaviatūros sąsajos su PIC mikrovaldikliu kodas. Kodas yra lengvas ir savaime suprantamas. Klaviatūros biblioteka yra vienintelis dalykas, kurį reikia suprasti kode. Čia mes naudojome keypad.h ir lcd.h Library, kad susietume klaviatūrą ir 16x2 LCD. Taigi galime pamatyti, kas vyksta to viduje.
Klaviatūros.h viduje pamatysime, kad naudojome xc.h antraštę, kuri yra numatytoji registrų biblioteka, krištolo dažnis yra apibrėžtas vėlavimui, naudojamam kepad.c faile, naudoti. Mes apibrėžėme klaviatūros prievadus PORTRB registre ir atskirus kaiščius nustatėme kaip eilutę (X) ir stulpelius (Y).
Mes taip pat naudojome dvi funkcijas, viena klaviatūros inicializavimui, kuri nukreips prievadą kaip išvestį ir įvestį, ir jungiklio paspaudimo nuskaitymas, kuris grąžins jungiklio paspaudimo būseną, kai iškviečiamas.
# įtraukti
Į keypad.c matysime, kad žemiau funkcija grąžins mygtukas Paspauskite, kai klaviatūra skaitytuvas funkcija negrąžina "n".
char switch_press_scan (void) // Gauti raktą iš vartotojo { char key = 'n'; // Tarkime, kad klavišas nebus paspaustas, kol (klavišas == 'n') // Palaukite, kol bus paspaustas klavišas = klaviatūros_skeneris (); // Nuskaitykite klavišus dar kartą ir vėl return key; // paspaudus klavišą, grąžinkite jo vertę }
Žemiau yra klaviatūros skaitymo funkcija. Kiekviename žingsnyje padarysime eilutę X1, X2, X3 ir X4 kaip 0 ir nuskaitysime Y1, Y2, Y3 ir Y4 būseną. Vėlavimas naudojamas atšaukimo efektui, kai jungiklis vis tiek nuspaustas, mes grąžinsime su juo susietą vertę. Nespaudus nė vieno jungiklio, grįšime „n“.
char klaviatūros_skeneris (negaliojantis) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; jei (Y_1 == 0) {__delay_ms (100); o (Y_1 == 0); grąžinti „1“; } if (Y_2 == 0) {__delay_ms (100); o (Y_2 == 0); grąžinti „2“; } if (Y_3 == 0) {__delay_ms (100); o (Y_3 == 0); grąžinti „3“; } if (Y_4 == 0) {__delay_ms (100); o (Y_4 == 0); grąžinti „A“; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; jei (Y_1 == 0) {__delay_ms (100); o (Y_1 == 0); grąžinti „4“; } if (Y_2 == 0) {__delay_ms (100); o (Y_2 == 0); grąžinti „5“; } if (Y_3 == 0) {__delay_ms (100); o (Y_3 == 0); grąžinti „6“; } if (Y_4 == 0) {__delay_ms (100); o (Y_4 == 0); grąžinti „B“; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; jei (Y_1 == 0) {__delay_ms (100); o (Y_1 == 0); grąžinti „7“; } if (Y_2 == 0) {__delay_ms (100); o (Y_2 == 0); grąžinti „8“; } if (Y_3 == 0) {__delay_ms (100); o (Y_3 == 0); grąžinti „9“; } if (Y_4 == 0) {__delay_ms (100); o (Y_4 == 0); grąžinti „C“; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; jei (Y_1 == 0) {__delay_ms (100); o (Y_1 == 0); grąžinti „*“; } if (Y_2 == 0) {__delay_ms (100); o (Y_2 == 0); grąžinti „0“; } if (Y_3 == 0) {__delay_ms (100); o (Y_3 == 0); grąžinti „#“; } if (Y_4 == 0) {__delay_ms (100); o (Y_4 == 0); grąžinti „D“; } grąžinti 'n'; }
Mes taip pat nustatysime silpną paskutinių keturių bitų traukimą, taip pat nustatysime prievadų kryptį kaip paskutinį 4 įvestį ir pirmuosius 4 kaip išvestį. OPTION_REG & = 0x7F; naudojamas nustatyti silpną traukimo režimą paskutiniuose kaiščiuose.
negaliojantis „InitKeypad“ (negaliojantis) { Klaviatūros_PORT = 0x00; // Nustatyti klaviatūros prievado kaiščių reikšmes nulis Klaviatūra_PORT_Direction = 0xF0; // Paskutinių 4 kontaktų įvestis, pirmųjų 4 kontaktų išvestis OPTION_REG & = 0x7F; }
Į pagrindinį IPS programos (pateikta žemiau) mes pirmą kartą nustatyti konfigūracijos bitai ir įtraukti keletą reikalingus bibliotekas. Tada tuščiose „system_init“ funkcijose inicijuojame klaviatūrą ir skystųjų kristalų ekraną. Ir pagaliau į pagrindinį funkcija mes perskaitėme klaviatūrą paskambinę switch_press_scan () funkciją ir grąžinimo vertės LCD.
Iš čia atsisiųskite visą kodą su antraštės failais ir patikrinkite toliau pateiktą demonstracinį vaizdo įrašą.