- Miksi tarvitsemme 4x4-näppäimistön:
- Kuinka 4x4 Matrix -näppäimistö toimii:
- Tarvittava materiaali:
- Piirikaavio:
- Ohjelmoinnin selitys:
Näppäimistöt ovat laajalti käytettyjä syöttölaitteita, joita käytetään eri elektroniikassa ja sulautetuissa projekteissa. Niitä käytetään ottamaan syötteet numeroina ja aakkosina, ja syöttämään ne järjestelmään jatkokäsittelyä varten. Tässä opetusohjelmassa aiomme liittää 4x4-matriisinäppäimistön PIC16F877A: n kanssa.
Ennen kuin menet yksityiskohtien logiikkaan ja opimme käyttämään näppäimistöä, meidän on tiedettävä muutamia asioita.
Miksi tarvitsemme 4x4-näppäimistön:
Tyypillisesti käytämme mikrokontrolleriyksikön yksittäisiä I / O-nastoja digitaalisen signaalin lukemiseen, kuten kytkimen tulo. Muutamissa sovelluksissa, joissa syöttötarkoituksiin tarvitaan 9, 12, 16 avainta, jos lisätään kukin avain mikrokontrolleriporttiin, käytämme lopulta 16 I / O-porttia. Tätä 16 I / O-porttia ei ole tarkoitettu vain I / O-signaalien lukemiseen, mutta niitä voidaan käyttää myös oheislaitteina, kuten ADC-tuet, I2C, SPI-yhteydet tukevat myös näitä I / O-nastoja. Koska nämä nastat on kytketty kytkimiin / näppäimiin, emme voi käyttää niitä, vaan vain I / O-portteina. Tällä ei ole mitään järkeä. Joten miten vähentää tappi määrää? Vastaus on, käyttämällä hex-näppäimistöä tai matriisinäppäimistöä; voimme vähentää tappi määrää, jotka yhdistävät 4x4-matriisinäppäimet. Se käyttää 8 nastaa, joista 4 on kytketty riveihin ja 4 kytketty sarakkeisiin, mikä säästää 8 nastaa mikrokontrolleria.
Kuinka 4x4 Matrix -näppäimistö toimii:
Yläkuvassa matriisinäppäimistömoduuli näkyy vasemmalla. Oikealla näkyy sisäinen yhteys sekä porttiliitäntä. Jos näemme portin, on 8 nastaa, ensimmäiset 4 vasemmalta oikealle ovat X1, X2, X3 ja X4 ovat rivejä ja viimeiset 4 vasemmalta oikealle ovat Y1, Y2, Y3, Y4 ovat neljä saraketta. Jos teemme 4 riviä tai X puolella ulostulo ja ne loogisesti alhaalla tai 0, ja tehdä 4 sarakkeet kuten syöttää ja lukea avaimet luemme kytkimen painallus kun kirjeenvaihtaja Y saa 0.
Sama tapahtuu nxn- matriisissa, jossa n on luku. Se voi olla 3x3, 6x6 jne.
Ajattele nyt, että 1 on painettu. Sitten 1 sijaitsee X1-rivillä ja Y1-sarakkeessa. Jos X1 on 0, niin Y1 on 0. Samalla tavalla voimme havaita X1-rivin kukin avain tunnistamalla sarakkeet Y1, Y2, Y3 ja Y4. Tämä tapahtuu jokaiselle kytkimelle, ja luemme kytkimien sijainnin matriisissa.
Jokainen vihreä ympyrä on kytkin ja ne molemmat on kytketty toisiinsa samalla tavalla.
Tässä opetusohjelmassa liitämme näppäimistön seuraaviin määrityksiin -
- Käytämme sisäistä vetoa
- Lisäämme avaimen poistumisvaihtoehdon
Mutta kun kytkimet ovat ei paineta meidän täytyy tehdä Y 1, Y2, Y3 ja Y4 kuten korkea tai 1. Muuten emme voi havaita logiikka muuttuu, kun kytkin painetaan. Mutta emme voineet tehdä sitä koodeilla tai ohjelmalla, koska näitä nastoja käytetään syötteinä, ei lähtöinä. Joten käytämme sisäistä toimintarekisteriä mikro-ohjaimessa ja käytämme näitä nastoja heikkona vetämisen mahdollistettuna tilana. Käyttämällä tätä, loogisesti korkean käyttöönoton tila on, kun se on oletustilassa.
Lisäksi, kun painamme näppäintä, kytkentäkoskettimilla on piikkejä tai kohinaa, ja tämän moninkertaisen kytkimen painamisen vuoksi tapahtuu, mitä ei odoteta. Joten havaitsemme ensin kytkinpuristimen, odotamme muutaman millisekunnin, tarkistamme uudelleen, onko kytkintä edelleen painettu vai ei, ja jos kytkintä painetaan edelleen, hyväksytään kytkinpuristin lopulta muuten ei. Tätä kutsutaan kytkinten pomppimiseksi.
Toteutamme tämän kaiken koodissamme ja muodostamme yhteyden leipälevylle.
Tarkista myös, kuinka 4x4-näppäimistö liitetään muihin mikro-ohjaimiin:
- Näppäimistö ja Arduino Uno
- 4x4-matriisinäppäimistö ja 8051-mikrokontrolleri
- 4x4-näppäimistö ja ATmega32-mikrokontrolleri
- Raspberry Pi -digitaalinen koodilukko leipälaudalla
Tarvittava materiaali:
- Leipälauta
- Pic-kit 3 ja tietokoneesi kehitysympäristö, ts. MPLABX
- Johdot ja liittimet
- Merkki LCD 16x2
- 20MHz kristalli
- 2 kpl 33pF keraaminen levykorkki.
- 4.7k vastus
- 10 k: n esiasetus (muuttuva vastus)
- 4x4 Matrix -näppäimistö
- 5 V: n sovitin
Piirikaavio:
Yhdistämme kiteet ja vastuksen niihin liittyviin nastoihin. Lisäksi yhdistämme LCD-näytön 4-bittisessä tilassa PORTD: n yli. Yhdistimme kuusiokoodinäppäimistön tai matriisinäppäimistön portin RB4 poikki.
Jos olet uusi PIC-käyttäjä, aloita PIC-mikrokontrollerin käytön aloittamisesta: PIC: n ja MPLABX: n esittely
Ohjelmoinnin selitys:
Täydellinen koodi Matrix-näppäimistön ja PIC-mikrokontrollerin liittämiseen annetaan lopussa. Koodi on helppo ja itsestään selvä. Näppäimistökirjasto on ainoa asia, joka on ymmärrettävä koodissa. Tässä olemme käyttäneet näppäimistöä ja lcd.h- kirjastoa näppäimistön ja 16x2 LCD: n liittämiseen. Katsotaan siis, mitä sen sisällä tapahtuu.
Näppäimistön sisällä näemme, että olemme käyttäneet xc.h- otsikkoa, joka on oletusarvoinen rekisterikirjasto, kidetaajuus on määritetty kepad.c- tiedostossa käytetyn viiveen käyttöön. Määritimme näppäimistön portit PORTRB- rekisterissä ja määritimme yksittäiset nastat riviksi (X) ja sarakkeiksi (Y).
Käytimme myös kahta toimintoa, yksi näppäimistön alustamiseen, joka ohjaa portin ulostuloksi ja tuloksi, ja kytkimen painalluksen skannaus, joka palauttaa kytkimen painotilan, kun sitä kutsutaan.
#sisältää
Vuonna keypad.c näemme, että alle funktio palauttaa painalluksen Kun näppäimistöä skanneritoiminto palaudu 'n'.
char switch_press_scan (void) // Hae avain käyttäjältä { char key = 'n'; // Oletetaan, ettei mitään näppäintä paineta, kun (näppäin == 'n') // Odota, kunnes näppäintä painetaan näppäin = näppäimistön_skanneri (); // Skannaa avaimet uudestaan ja uudestaan return key; // kun näppäintä painetaan, palauta arvo }
Alla on näppäimistön lukutoiminto. Jokaisessa vaiheessa tehdään rivi X1, X2, X3 ja X4 0: ksi ja luetaan Y1-, Y2-, Y3- ja Y4-tila. Viivettä käytetään poistumisvaikutukseen, kun kytkintä painetaan edelleen, palautamme siihen liittyvän arvon. Kun yhtään kytkintä ei paineta, palautamme n: n.
char keypad_scanner (void) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; jos (Y_1 == 0) {__viive_ms (100); kun (Y_1 == 0); palauta '1'; } if (Y_2 == 0) {__viive_ms (100); kun (Y_2 == 0); palauta '2'; } if (Y_3 == 0) {__viive_ms (100); kun (Y_3 == 0); palauta '3'; } if (Y_4 == 0) {__viive_ms (100); kun (Y_4 == 0); palauta 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; jos (Y_1 == 0) {__viive_ms (100); kun (Y_1 == 0); palauta '4'; } if (Y_2 == 0) {__viive_ms (100); kun (Y_2 == 0); palauta '5'; } if (Y_3 == 0) {__viive_ms (100); kun (Y_3 == 0); palauta '6'; } if (Y_4 == 0) {__viive_ms (100); kun (Y_4 == 0); palauta B; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; jos (Y_1 == 0) {__viive_ms (100); kun (Y_1 == 0); palauta '7'; } if (Y_2 == 0) {__viive_ms (100); kun (Y_2 == 0); palauta '8'; } if (Y_3 == 0) {__viive_ms (100); kun (Y_3 == 0); palauta '9'; } if (Y_4 == 0) {__viive_ms (100); kun (Y_4 == 0); palauta 'C'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; jos (Y_1 == 0) {__viive_ms (100); kun (Y_1 == 0); palauta '*'; } if (Y_2 == 0) {__viive_ms (100); kun (Y_2 == 0); palauta '0'; } if (Y_3 == 0) {__viive_ms (100); kun (Y_3 == 0); palauta '#'; } if (Y_4 == 0) {__viive_ms (100); kun (Y_4 == 0); palauta 'D'; } return 'n'; }
Asetamme myös heikon vetovoiman neljälle viimeiselle bitille ja asetamme myös porttien suunnan viimeiseksi 4 tuloksi ja ensimmäiseksi 4 lähdöksi. OPTION_REG & = 0x7F; käytetään asettamaan heikko vetotila viimeisille nastoille.
void InitKeypad (void) { Näppäimistö_PORT = 0x00; // Aseta näppäimistön portin pin-arvo nolla Näppäimistö_PORT_SUUNTA = 0xF0; // Viimeisen 4 nastan tulo, 4 ensimmäisen nastan lähtö OPTION_REG & = 0x7F; }
Että tärkein PIC-ohjelma (alla) ensin asettaa kokoonpanon bittiä ja mukana muutama tarvittavat kirjastot. Sitten tyhjissä system_init-toiminnoissa alustetaan näppäimistö ja LCD. Ja lopulta vuonna tärkein toiminto olemme lukeneet näppäimistön soittamalla switch_press_scan () funktio ja palauttamalla arvon LCD.
Lataa täydellinen koodi otsikkotiedostoilla täältä ja tarkista alla oleva esittelyvideo.