- Γιατί χρειαζόμαστε πληκτρολόγιο 4x4:
- Πώς λειτουργεί το πληκτρολόγιο 4x4 Matrix:
- Απαιτούμενο υλικό:
- Διάγραμμα κυκλώματος:
- Επεξήγηση προγραμματισμού:
Τα πληκτρολόγια χρησιμοποιούνται ευρέως συσκευές εισόδου που χρησιμοποιούνται σε διάφορα ηλεκτρονικά και ενσωματωμένα έργα. Χρησιμοποιούνται για τη λήψη εισόδων με τη μορφή αριθμών και αλφαβήτων και τροφοδοτούν το ίδιο στο σύστημα για περαιτέρω επεξεργασία. Σε αυτό το σεμινάριο πρόκειται να συνδέσουμε ένα πληκτρολόγιο 4x4 matrix με το PIC16F877A.
Πριν μπείτε στη λογική λεπτομερειών και μάθετε πώς να χρησιμοποιείτε το πληκτρολόγιο, θα πρέπει να γνωρίζουμε λίγα πράγματα.
Γιατί χρειαζόμαστε πληκτρολόγιο 4x4:
Συνήθως χρησιμοποιούμε έναν μόνο ακροδέκτη I / O μιας μονάδας μικροελεγκτή για να διαβάσουμε το ψηφιακό σήμα, όπως μια είσοδο διακόπτη. Σε λίγες εφαρμογές όπου απαιτούνται πλήκτρα 9, 12, 16, εάν προσθέσουμε κάθε κλειδί σε μια θύρα μικροελεγκτή, θα καταλήξουμε να χρησιμοποιούμε 16 θύρες εισόδου / εξόδου. Αυτές οι θύρες 16 I / O δεν είναι μόνο για ανάγνωση σημάτων I / O, αλλά μπορούν επίσης να χρησιμοποιηθούν ως περιφερειακές συνδέσεις, όπως υποστηρίξεις ADC, I2C, SPI συνδέσεις υποστηρίζονται επίσης από αυτές τις καρφίτσες I / O. Καθώς αυτές οι ακίδες συνδέονται με τους διακόπτες / πλήκτρα, δεν μπορούμε να τις χρησιμοποιήσουμε αλλά μόνο ως θύρες εισόδου / εξόδου. Αυτό δεν έχει κανένα νόημα. Λοιπόν, πώς να μειώσετε τον αριθμό των ακίδων; Η απάντηση είναι, χρησιμοποιώντας ένα πληκτρολόγιο hex ή ένα πληκτρολόγιο matrix. μπορούμε να μειώσουμε τον αριθμό των ακίδων, τα οποία συσχετίζουν κλειδιά μήτρας 4x4. Θα χρησιμοποιεί 8 ακίδες από τις οποίες 4 συνδέονται σε σειρές και 4 συνδεδεμένες σε στήλες, εξοικονομώντας έτσι 8 ακίδες του μικροελεγκτή.
Πώς λειτουργεί το πληκτρολόγιο 4x4 Matrix:
Στην επάνω εικόνα εμφανίζεται μια ενότητα πληκτρολογίου matrix στα αριστερά. Στα δεξιά εμφανίζεται η εσωτερική σύνδεση καθώς και η σύνδεση θύρας. Αν δούμε τη θύρα υπάρχουν 8 ακίδες, οι πρώτες 4 από τα αριστερά προς τα δεξιά είναι οι σειρές X1, X2, X3 και X4 και οι τελευταίες 4 από τα αριστερά προς τα δεξιά είναι Y1, Y2, Y3, Y4 είναι τέσσερις στήλες. Εάν κάνουμε 4 σειρές ή πλευρά X ως έξοδο και τις κάνουμε λογικές χαμηλές ή 0, και κάνουμε τις 4 στήλες ως είσοδο και διαβάσουμε τα πλήκτρα, θα διαβάσουμε το διακόπτη όταν ο ανταποκριτής Y πάρει 0.
Το ίδιο πράγμα θα συμβεί στη μήτρα nxn όπου n είναι ο αριθμός. Αυτό μπορεί να είναι 3x3, 6x6 κ.λπ.
Τώρα απλά σκεφτείτε ότι πατήθηκε το 1. Στη συνέχεια, το 1 βρίσκεται στη σειρά X1 και στη στήλη Y1. Εάν το X1 είναι 0, τότε το Y1 θα είναι 0. Με τον ίδιο τρόπο μπορούμε να ανιχνεύσουμε κάθε πλήκτρο στη σειρά X1, ανιχνεύοντας τις στήλες Y1, Y2, Y3 και Y4. Αυτό συμβαίνει για κάθε διακόπτη και θα διαβάσουμε τη θέση των διακοπτών στη μήτρα.
Κάθε πράσινος κύκλος είναι ο διακόπτης και και οι δύο συνδέονται μεταξύ τους με τον ίδιο τρόπο.
Σε αυτό το σεμινάριο θα συνδέσουμε τον πίνακα κλειδιών με τις ακόλουθες προδιαγραφές-
- Θα χρησιμοποιήσουμε το εσωτερικό pull up
- Θα προσθέσουμε τη βασική επιλογή απομάκρυνσης
Αλλά όταν δεν πατηθούν οι διακόπτες, πρέπει να κάνουμε τα Υ1, Υ2, Υ3 και Υ4 τόσο υψηλά είτε 1. Διαφορετικά, δεν μπορούμε να εντοπίσουμε τις λογικές αλλαγές όταν πατάμε το διακόπτη. Αλλά δεν μπορούσαμε να το κάνουμε με κωδικούς ή πρόγραμμα, επειδή αυτές οι ακίδες χρησιμοποιούνται ως είσοδος και όχι έξοδος. Έτσι, θα χρησιμοποιήσουμε έναν εσωτερικό καταχωρητή λειτουργίας στον μικροελεγκτή και θα λειτουργήσουμε αυτές τις ακίδες ως λειτουργία ενεργοποιημένης αδυναμίας. Χρησιμοποιώντας αυτό, θα υπάρχει μια λογική λειτουργία υψηλής ενεργοποίησης όταν βρίσκεται στην προεπιλεγμένη κατάσταση.
Επίσης, όταν πατάμε το πλήκτρο, υπάρχουν αιχμές ή παράγεται θόρυβος με επαφές διακόπτη, και εξαιτίας αυτής της πολλαπλής διακόπτη συμβαίνει που δεν αναμένεται. Έτσι, πρώτα θα ανιχνεύσουμε το διακόπτη, θα περιμένουμε λίγα χιλιοστά του δευτερολέπτου, θα ελέγξουμε ξανά εάν ο διακόπτης είναι ακόμα πατημένος ή όχι και αν ο διακόπτης εξακολουθεί να πιέζεται, θα δεχτούμε τελικά το διακόπτη. Αυτό καλείται ως απενεργοποίηση των διακοπτών.
Θα τα εφαρμόσουμε όλα στον κώδικά μας και θα κάνουμε τη σύνδεση στο breadboard.
Ελέγξτε επίσης τον τρόπο διασύνδεσης του πληκτρολογίου 4x4 με άλλους μικροελεγκτές:
- Πληκτρολόγιο Διασύνδεση με Arduino Uno
- 4x4 Matrix Keypad Interfacing με 8051 Microcontroller
- Διεπαφή πληκτρολογίου 4x4 με μικροελεγκτή ATmega32
- Ψηφιακό κλείδωμα κώδικα Raspberry Pi στο Breadboard
Απαιτούμενο υλικό:
- Ψωμί
- Pic-kit 3 και περιβάλλον ανάπτυξης στον υπολογιστή σας, δηλαδή MPLABX
- Σύρματα και σύνδεσμοι
- Χαρακτήρας LCD 16x2
- 20Mhz Crystal
- 2 τμχ κεραμικό δίσκο 33pF.
- 4.7k αντίσταση
- Προκαθορισμένο 10k (μεταβλητή αντίσταση)
- Πληκτρολόγιο 4x4 Matrix
- Προσαρμογέας 5 V
Διάγραμμα κυκλώματος:
Θα συνδέσουμε τους κρυστάλλους και την αντίσταση στους αντίστοιχους πείρους. Επίσης, θα συνδέσουμε την οθόνη LCD σε λειτουργία 4 bit σε ολόκληρο το PORTD. Συνδέσαμε το πληκτρολόγιο hex ή το πληκτρολόγιο μήτρας στη θύρα RB4.
Εάν είστε νέοι στο PIC, ξεκινήστε με το Ξεκινώντας με το PIC Microcontroller: Εισαγωγή στο PIC και στο MPLABX
Επεξήγηση προγραμματισμού:
Στο τέλος παρέχεται πλήρης κωδικός για τη διασύνδεση του Matrix Keypad με τον PIC Microcontroller. Ο κωδικός είναι εύκολος και αυτονόητος. Η βιβλιοθήκη πληκτρολογίων είναι μόνο πράγμα που πρέπει να κατανοηθεί στον κώδικα. Εδώ χρησιμοποιήσαμε τη βιβλιοθήκη keypad.h και lcd.h για τη διασύνδεση του πληκτρολογίου και της οθόνης LCD 16x2. Ας δούμε λοιπόν τι συμβαίνει μέσα σε αυτό.
Μέσα στο πληκτρολόγιο.h θα δούμε ότι έχουμε χρησιμοποιήσει κεφαλίδα xc.h που είναι προεπιλεγμένη βιβλιοθήκη καταχωρητή, η κρυσταλλική συχνότητα ορίζεται για τη χρήση για τη χρήση καθυστέρησης που χρησιμοποιείται στο αρχείο πυκ. Ορίσαμε τις θύρες πληκτρολογίου στο μητρώο PORTRB και ορίσαμε μεμονωμένες καρφίτσες ως σειρά (X) και στήλες (Y).
Χρησιμοποιήσαμε επίσης δύο συναρτήσεις μία για την αρχικοποίηση του πληκτρολογίου, η οποία θα ανακατευθύνει τη θύρα ως έξοδο και είσοδο, και μια σάρωση πατήματος διακόπτη που θα επιστρέψει την κατάσταση του διακόπτη όταν καλείται.
#περιλαμβάνω
Στο keypad.c θα δούμε ότι η παρακάτω λειτουργία θα επιστρέψει το πάτημα του πλήκτρου όταν η λειτουργία σαρωτή πληκτρολογίου δεν επιστρέψει 'n'.
char switch_press_scan (void) // Λήψη κλειδιού από το χρήστη { char key = 'n'; // Ας υποθέσουμε ότι δεν πατήθηκε κανένα πλήκτρο ενώ (κλειδί == 'n') // Περιμένετε έως ότου πατηθεί ένα πλήκτρο πλήκτρο = keypad_scanner (); // Σαρώστε ξανά τα πλήκτρα και πάλι το πλήκτρο επιστροφής. // όταν πατηθεί το πλήκτρο και επιστρέψτε την τιμή του }
Παρακάτω είναι η λειτουργία ανάγνωσης πληκτρολογίου. Σε κάθε βήμα θα κάνουμε τη σειρά X1, X2, X3 και X4 ως 0 και διαβάζοντας την κατάσταση Y1, Y2, Y3 και Y4. Η καθυστέρηση χρησιμοποιείται για το εφέ κατάρριψης, όταν ο διακόπτης είναι ακόμα πατημένος θα επιστρέψουμε την τιμή που σχετίζεται με αυτό. Όταν δεν πατηθεί κανένας διακόπτης, θα επιστρέψουμε το 'n'.
char keypad_scanner (άκυρο) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; εάν (Y_1 == 0) {__delay_ms (100); ενώ (Y_1 == 0); επιστροφή "1"; } εάν (Y_2 == 0) {__delay_ms (100); ενώ (Y_2 == 0); επιστροφή "2"; } εάν (Y_3 == 0) {__delay_ms (100); ενώ (Y_3 == 0); επιστροφή "3"; } εάν (Y_4 == 0) {__delay_ms (100); ενώ (Y_4 == 0); επιστροφή "A"; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; εάν (Y_1 == 0) {__delay_ms (100); ενώ (Y_1 == 0); επιστροφή "4"; } εάν (Y_2 == 0) {__delay_ms (100); ενώ (Y_2 == 0); επιστροφή "5"; } εάν (Y_3 == 0) {__delay_ms (100); ενώ (Y_3 == 0); επιστροφή "6"; } εάν (Y_4 == 0) {__delay_ms (100); ενώ (Y_4 == 0); επιστροφή "B"; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; εάν (Y_1 == 0) {__delay_ms (100); ενώ (Y_1 == 0); επιστροφή "7"; } εάν (Y_2 == 0) {__delay_ms (100); ενώ (Y_2 == 0); επιστροφή "8"; } εάν (Y_3 == 0) {__delay_ms (100); ενώ (Y_3 == 0); επιστροφή "9"; } εάν (Y_4 == 0) {__delay_ms (100); ενώ (Y_4 == 0); επιστροφή "C"; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; εάν (Y_1 == 0) {__delay_ms (100); ενώ (Y_1 == 0); ΕΠΙΣΤΡΟΦΗ '*'; } εάν (Y_2 == 0) {__delay_ms (100); ενώ (Y_2 == 0); επιστροφή "0"; } εάν (Y_3 == 0) {__delay_ms (100); ενώ (Y_3 == 0); ΕΠΙΣΤΡΟΦΗ '#'; } εάν (Y_4 == 0) {__delay_ms (100); ενώ (Y_4 == 0); επιστροφή "D"; } επιστροφή 'n'; }
Θα ρυθμίσουμε επίσης το αδύναμο τράβηγμα στα τέσσερα τελευταία bit, και επίσης θα ορίσουμε την κατεύθυνση των θυρών ως την τελευταία 4 είσοδο και την πρώτη 4 ως έξοδο. Το OPTION_REG & = 0x7F; χρησιμοποιείται για να ρυθμίσετε τη λειτουργία αδυναμίας τραβήγματος στις τελευταίες ακίδες.
void InitKeypad (void) { Keypad_PORT = 0x00; // Ορισμός τιμών ακίδων θύρας πληκτρολογίου μηδέν Πληκτρολόγιο_PORT_Direction = 0xF0; // Τελευταία είσοδος 4 ακίδων, έξοδος πρώτων 4 ακίδων OPTION_REG & = 0x7F; }
Στο κύριο πρόγραμμα PIC (δίνεται παρακάτω) ορίσαμε πρώτα τα bit διαμόρφωσης και συμπεριλάβαμε λίγες απαραίτητες βιβλιοθήκες. Στη συνέχεια, στις λειτουργίες void system_init αρχικοποιούμε το πληκτρολόγιο και την οθόνη LCD. Και, τέλος, στην στην κύρια λειτουργία που έχουμε διαβάσει το πληκτρολόγιο καλώντας την switch_press_scan () συνάρτηση και επιστρέφει την τιμή να lcd.
Κατεβάστε τον πλήρη κώδικα με αρχεία κεφαλίδας από εδώ και ελέγξτε το βίντεο επίδειξης παρακάτω.