- Hvorfor har vi brug for 4x4-tastatur:
- Sådan fungerer 4x4 Matrix Keypad:
- Nødvendigt materiale:
- Kredsløbsdiagram:
- Programmeringsforklaring:
Tastaturer er meget anvendte inputenheder, der bruges i forskellige elektronik- og indlejrede projekter. De bruges til at tage input i form af tal og alfabeter og føde det samme til systemet til videre behandling. I denne vejledning skal vi interface et 4x4 matrix tastatur med PIC16F877A.
Før vi går ind i detaljelogikken og lærer at bruge tastaturet, skal vi kende nogle få ting.
Hvorfor har vi brug for 4x4-tastatur:
Typisk bruger vi en enkelt I / O-pin på en mikrokontrollerenhed til at læse det digitale signal, som en switch-indgang. I få applikationer, hvor 9, 12, 16 nøgler er nødvendige til inputformål, hvis vi tilføjer hver nøgle i en mikrocontrollerport, ender vi med at bruge 16 I / O-porte. Disse 16 I / O-porte er ikke kun til læsning af I / O-signaler, men de kan også bruges som perifere forbindelser, ligesom ADC-understøttelser, I2C, SPI-forbindelser understøttes også af disse I / O-ben. Da disse ben er forbundet med afbryderne / tasterne, kan vi ikke bruge dem, men kun som I / O-porte. Dette giver overhovedet ingen mening. Så hvordan reducerer man antallet af stifter? Svaret er ved hjælp af et hex-tastatur eller matrix-tastatur; vi kan reducere antallet af stifter, som forbinder 4x4 matrixnøgler. Det bruger 8 ben, hvoraf 4 er forbundet i rækker og 4 er forbundet i kolonner, hvilket sparer 8 ben på mikrokontrolleren.
Sådan fungerer 4x4 Matrix Keypad:
På det øverste billede vises et matrixtastaturmodul til venstre. Til højre vises den interne forbindelse såvel som portforbindelse. Hvis vi ser porten, er der 8 ben, de første 4 fra venstre mod højre er X1, X2, X3 og X4 er rækkerne, og de sidste 4 fra venstre mod højre er Y1, Y2, Y3, Y4 er fire kolonner. Hvis vi laver 4 rækker eller X-siden som output og gør dem til logiske lave eller 0, og laver de 4 kolonner som input og læser tasterne, læser vi kontakten, når korrespondent Y får 0.
Den samme ting vil ske i nxn- matrix, hvor n er tallet. Det kan være 3x3, 6x6 osv.
Tænk nu, at 1 er trykket. Derefter er 1 placeret i X1 række og Y1 kolonne. Hvis X1 er 0, vil Y1 være 0. På samme måde kan vi registrere hver tast i X1-rækken ved at registrere kolonne Y1, Y2, Y3 og Y4. Denne ting sker for hver switch, og vi vil læse kontaktenes position i matrixen.
Hver grønne cirkel er kontakten, og de er begge forbundet sammen på samme måde.
I denne vejledning vil vi interface tastaturet med følgende specifikationer-
- Vi bruger intern pull up
- Vi vil tilføje nøgle-afvisningsproces
Men når der ikke trykkes på afbryderne, skal vi gøre Y1, Y2, Y3 og Y4 så høje eller 1. Ellers kan vi ikke registrere de logiske ændringer, når der trykkes på kontakten. Men vi kunne ikke klare det med koder eller program på grund af at disse ben bruges som input, ikke output. Så vi bruger et internt driftsregister i mikrocontrolleren og betjener disse ben som svag pull up-aktiveret tilstand. Ved at bruge dette vil der være en logisk højaktiveringsfunktion, når den er i standardtilstand.
Når vi trykker på tasten, er der også pigge, eller der genereres støj med kontaktkontakter, og på grund af dette sker der flere tryk, hvilket ikke forventes. Så vi registrerer først kontakten, vent nogle få millisekunder, kontroller igen, om kontakten stadig er trykket eller ej, og hvis kontakten stadig er trykket, accepterer vi kontakten, og til sidst ellers ikke. Dette kaldes som afbrydning af afbryderne.
Vi implementerer alt dette i vores kode og opretter forbindelsen på breadboard.
Kontroller også, hvordan du bruger 4x4-tastaturet til andre mikrocontrollere:
- Tastaturgrænseflade med Arduino Uno
- 4x4 Matrix Keypad Interfacing med 8051 Microcontroller
- 4x4-tastaturgrænseflade med ATmega32 Microcontroller
- Raspberry Pi Digital kodelås på brødplade
Nødvendigt materiale:
- Brødbræt
- Pic-kit 3 og udviklingsmiljø på din pc, dvs. MPLABX
- Ledninger og stik
- Karakter LCD 16x2
- 20Mhz krystal
- 2 stk 33pF keramisk skivehætte.
- 4,7 k modstand
- 10k forudindstillet (variabel modstand)
- 4x4 Matrix tastatur
- En 5 V adapter
Kredsløbsdiagram:
Vi forbinder krystaller og modstand i de tilknyttede ben. Vi tilslutter også LCD'et i 4 bit-tilstand på tværs af PORTD. Vi forbandt hex-tastaturet eller matrix-tastaturet over porten RB4.
Hvis du er ny hos PIC, skal du starte med Kom godt i gang med PIC Microcontroller: Introduktion til PIC og MPLABX
Programmeringsforklaring:
Komplet kode til interface mellem Matrix Keypad og PIC Microcontroller findes i slutningen. Koden er let og selvforklarende. Tastaturbibliotek er kun ting, der skal forstås i koden. Her har vi brugt keypad.h og lcd.h Library til at interface tastaturet og 16x2 LCD. Så lad os se, hvad der sker indeni det.
Inde i tastaturet. H vil vi se, at vi har brugt xc.h- header, som er standardregisterbiblioteket, krystalfrekvensen er defineret til brug til brug af forsinkelse, der bruges i kepad.c- filen. Vi definerede tastaturportene ved PORTRB- registret og definerede individuelle ben som række (X) og kolonner (Y).
Vi brugte også to funktioner, en til initialisering af tastaturet, som omdirigerer porten som output og input, og en switch-tryk-scanning, som returnerer switch-pressens status, når den kaldes.
#omfatte
På tastaturet.c vil vi se, at nedenstående funktion returnerer tastetrykket, når tastaturscanneren ikke returnerer 'n'.
char switch_press_scan (ugyldigt) // Hent nøgle fra bruger { char key = 'n'; // Antag, at der ikke er trykket på en tast, mens (tast == 'n') // Vent, indtil der trykkes på en tast, tast = tastatur_scanner (); // Scan tasterne igen og igen returtasten; // når tasten trykkes, returner derefter dens værdi }
Nedenfor er læsefunktionen på tastaturet. I hvert trin vil vi gøre rækken X1, X2, X3 og X4 som 0 og læse Y1, Y2, Y3 og Y4 status. Forsinkelsen bruges til afvisningseffekten, når der stadig trykkes på kontakten, returnerer vi den værdi, der er knyttet til den. Når der ikke trykkes på en kontakt, returnerer vi 'n'.
char tastatur_scanner (ugyldigt) { 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) {__forsinkelse_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) {__forsinkelse_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) {__forsinkelse_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); Vend tilbage '*'; } hvis (Y_2 == 0) {__forsinkelse_ms (100); mens (Y_2 == 0); returner '0'; } hvis (Y_3 == 0) {__forsink_ms (100); mens (Y_3 == 0); Vend tilbage '#'; } hvis (Y_4 == 0) {__forsink_ms (100); mens (Y_4 == 0); returner 'D'; } returner 'n'; }
Vi vil også indstille den svage pull up på de sidste fire bits og også indstille retningen på portene som sidste 4 input og første 4 som output. The OPTION_REG & = 0x7F; bruges til at indstille den svage pull up-tilstand på de sidste ben.
ugyldigt InitKeypad (ugyldigt) { Keypad_PORT = 0x00; // Indstil tastaturportens pinværdier nul Keypad_PORT_Direction = 0xF0; // Sidste 4 ben input, Første 4 ben output OPTION_REG & = 0x7F; }
I det primære PIC-program (angivet nedenfor) indstillede vi først konfigurationsbits og inkluderede få nødvendige biblioteker. Derefter initialiserer vi i ugyldige system_init-funktioner tastaturet og LCD'et. Og endelig i i vigtigste funktion vi har læst tastaturet ved at kalde switch_press_scan () funktion og returnere værdien til lcd.
Download den komplette kode med headerfiler herfra og tjek demonstrationsvideoen nedenfor.