- Hvorfor trenger vi 4x4-tastatur:
- Slik fungerer 4x4 Matrix Keypad:
- Nødvendig materiale:
- Kretsdiagram:
- Programmeringsforklaring:
Tastaturer er mye brukt inngangsenheter som brukes i forskjellige elektronikk- og innebygde prosjekter. De brukes til å ta innganger i form av tall og alfabeter, og mate det samme inn i systemet for videre behandling. I denne opplæringen skal vi grensesnitt et 4x4 matrisetastatur med PIC16F877A.
Før vi går inn i detaljlogikken og lærer hvordan du bruker tastaturet, trenger vi å vite få ting.
Hvorfor trenger vi 4x4-tastatur:
Vanligvis bruker vi en enkelt I / O-pinne på en mikrokontrollerenhet for å lese det digitale signalet, som en bryterinngang. I noen få applikasjoner der det kreves 9, 12, 16 nøkler for inngangsformål, hvis vi legger til hver nøkkel i en mikrocontrollerport, vil vi ende opp med å bruke 16 I / O-porter. Disse 16 I / O-portene er ikke bare for å lese I / O-signaler, men de kan også brukes som perifere tilkoblinger, som ADC-støtter, I2C, SPI-tilkoblinger støttes også av disse I / O-pinnene. Ettersom disse pinnene er koblet til bryterne / tastene, kan vi ikke bruke dem, men bare som I / O-porter. Dette gir ingen mening i det hele tatt. Så hvordan reduserer antall teller? Svaret er å bruke et heksetastatur eller matrisetastatur; vi kan redusere antall pinner, som knytter 4x4 matrisetaster. Den bruker 8 pinner, hvorav 4 koblet i rader og 4 koblet i kolonner, og sparer derfor 8 pinner på mikrokontrolleren.
Slik fungerer 4x4 Matrix Keypad:
I det øvre bildet vises en matrisetastaturmodul til venstre. Til høyre vises den interne forbindelsen, samt portforbindelse. Hvis vi ser porten, er det 8 pinner, de første 4 fra venstre mot høyre er X1, X2, X3 og X4 er radene, og de siste 4 fra venstre mot høyre er Y1, Y2, Y3, Y4 er fire kolonner. Hvis vi lager 4 rader eller X-siden som utgang og gjør dem til logiske lave eller 0, og lager de 4 kolonnene som inngang og leser tastene, vil vi lese bryteren trykke når korrespondent Y får 0.
Samme vil skje i nxn- matrise der n er tallet. Det kan være 3x3, 6x6 etc.
Nå er det bare å tro at 1 er trykket. Deretter ligger 1 på X1-rad og Y1-kolonne. Hvis X1 er 0, vil Y1 være 0. På samme måte kan vi ane hver tast i X1-raden, ved å registrere kolonne Y1, Y2, Y3 og Y4. Denne tingen skjer for hver bryter, og vi vil lese posisjonen til bryterne i matrisen.
Hver grønne sirkel er bryteren, og de er begge koblet sammen på samme måte.
I denne opplæringen vil vi grensesnitt tastaturet med følgende spesifikasjoner-
- Vi bruker intern pull up
- Vi vil legge til nøkkelavvisningsalternativ
Men når bryterne ikke trykkes, må vi gjøre Y1, Y2, Y3 og Y4 så høye eller 1. Ellers kan vi ikke oppdage logiske endringer når bryteren trykkes. Men vi kunne ikke klare det med koder eller program på grunn av at pinnene brukes som inngang, ikke som utgang. Så vi vil bruke et internt operasjonsregister i mikrokontrolleren og betjene pinnene som svak pull up-aktivert modus. Ved å bruke dette vil det være en logisk høyaktiveringsmodus når den er i standardtilstand.
Også når vi trykker på tasten, er det pigger eller det genereres støy med bryterkontakter, og på grunn av dette skjer det flere brytere, noe som ikke forventes. Så vi vil først oppdage bryterpressen, vente noen millisekunder, sjekke igjen om bryteren fortsatt er trykket eller ikke, og hvis bryteren fortsatt er trykket, vil vi akseptere bryteren, til slutt ellers ikke. Dette kalles som avstengning av bryterne.
Vi vil implementere dette alt i koden vår, og opprette forbindelsen på breadboard.
Sjekk også hvordan du kobler 4x4-tastaturet til andre mikrokontrollere:
- Tastaturgrensesnitt med Arduino Uno
- 4x4 matrix tastaturgrensesnitt med 8051 mikrokontroller
- 4x4-tastaturgrensesnitt med ATmega32 mikrokontroller
- Raspberry Pi Digital kodelås på brødbrett
Nødvendig materiale:
- Brettbrett
- Pic-kit 3 og utviklingsmiljø på din PC, dvs. MPLABX
- Ledninger og kontakter
- Karakter LCD 16x2
- 20Mhz krystall
- 2 stk 33pF keramisk skivelokk.
- 4,7 k motstand
- 10k forhåndsinnstilt (variabel motstand)
- 4x4 Matrix tastatur
- En 5 V adapter
Kretsdiagram:
Vi kobler sammen krystallene og motstanden i de tilhørende pinnene. Vi vil også koble LCD-skjermen i 4-biters modus over PORTD. Vi koblet heksetastaturet eller matrisetastaturet over porten RB4.
Hvis du er ny på PIC, så start med Komme i gang med PIC Microcontroller: Introduksjon til PIC og MPLABX
Programmeringsforklaring:
Komplett kode for grensesnittmatrise tastatur med PIC Microcontroller er gitt på slutten. Koden er enkel og selvforklarende. Tastaturbiblioteket er bare å forstå i koden. Her har vi brukt tastaturet.h og lcd.h- biblioteket til å grensesnitt tastaturet og 16x2 LCD. Så la oss se hva som skjer inne i det.
Inne i tastaturet. H vil vi se at vi har brukt xc.h header som er standard registerbibliotek, krystallfrekvensen er definert for bruk for bruk av forsinkelse brukt i kepad.c- filen. Vi definerte tastaturportene ved PORTRB- registeret og definerte individuelle pinner som rad (X) og kolonner (Y).
Vi brukte også to funksjoner, en for initialisering av tastaturet som vil omdirigere porten som utgang og inngang, og en bryterpresseskanning som vil returnere bryterens trykkstatus når du blir ringt.
#inkludere
På tastaturet. C vil vi se at funksjonen nedenfor vil returnere tastetrykket når tastaturskannerfunksjonen ikke returnerer 'n'.
char switch_press_scan (void) // Få nøkkel fra bruker { char key = 'n'; // Anta at ingen tast er trykket mens (tast == 'n') // Vent til en tast er trykket på tast = tastatur_skanner (); // Skann tastene igjen og igjen returtasten; // når tasten trykkes, returner deretter verdien }
Nedenfor er lesefunksjonen på tastaturet. I hvert trinn vil vi gjøre raden X1, X2, X3 og X4 som 0 og lese Y1, Y2, Y3 og Y4 status. Forsinkelsen brukes til avvisningseffekten, når bryteren fortsatt trykkes vil vi returnere verdien som er knyttet til den. Når du ikke trykker på noen bryter, returnerer vi 'n'.
char tastatur_skanner (ugyldig) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; hvis (Y_1 == 0) {__forsink_ms (100); mens (Y_1 == 0); returner '1'; } hvis (Y_2 == 0) {__forsink_ms (100); mens (Y_2 == 0); returner '2'; } hvis (Y_3 == 0) {__forsink_ms (100); mens (Y_3 == 0); returner '3'; } hvis (Y_4 == 0) {__forsink_ms (100); mens (Y_4 == 0); returner 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; hvis (Y_1 == 0) {__forsink_ms (100); mens (Y_1 == 0); returner '4'; } hvis (Y_2 == 0) {__forsink_ms (100); mens (Y_2 == 0); returner '5'; } hvis (Y_3 == 0) {__forsink_ms (100); mens (Y_3 == 0); returner '6'; } hvis (Y_4 == 0) {__forsink_ms (100); mens (Y_4 == 0); returner 'B'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; hvis (Y_1 == 0) {__forsink_ms (100); mens (Y_1 == 0); returner '7'; } hvis (Y_2 == 0) {__forsink_ms (100); mens (Y_2 == 0); returner '8'; } hvis (Y_3 == 0) {__forsink_ms (100); mens (Y_3 == 0); returner '9'; } hvis (Y_4 == 0) {__forsink_ms (100); mens (Y_4 == 0); returner 'C'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; hvis (Y_1 == 0) {__forsink_ms (100); mens (Y_1 == 0); komme tilbake '*'; } hvis (Y_2 == 0) {__forsink_ms (100); mens (Y_2 == 0); returner '0'; } hvis (Y_3 == 0) {__forsink_ms (100); mens (Y_3 == 0); komme tilbake '#'; } hvis (Y_4 == 0) {__forsink_ms (100); mens (Y_4 == 0); returner 'D'; } returner 'n'; }
Vi vil også sette den svake pull up på de siste fire bitene, og også sette retningen på portene som siste 4 inngang og første 4 som utgang. Den OPTION_REG & = 0x7F; brukes til å stille inn den svake opptrekksmodusen på de siste pinnene.
ugyldig InitKeypad (ugyldig) { Tastatur_PORT = 0x00; // Sett tastaturportens pinverdier null Keypad_PORT_Direction = 0xF0; // Siste 4 pins inngang, Første 4 pins utgang OPTION_REG & = 0x7F; }
I hoved PIC-programmet (gitt nedenfor) satte vi først konfigurasjonsbitene og inkluderte få nødvendige biblioteker. Så i ugyldige system_init-funksjoner initialiserer vi tastaturet og LCD-skjermen. Og til slutt i i hovedfunksjon har vi lest tastaturet ved å ringe switch_press_scan () funksjon og returnerer verdien til lcd.
Last ned den komplette koden med overskriftsfiler herfra og sjekk demonstrasjonsvideoen nedenfor.