- Απαιτούμενα υλικά
- 16X2 LCD Display Module
- Διάγραμμα κυκλώματος και συνδέσεις
- Προγραμματισμός ARM7-LPC2148
Η οθόνη είναι το απαραίτητο μέρος ενός μηχανήματος, είτε πρόκειται για οικιακές συσκευές είτε για βιομηχανικά μηχανήματα. Η οθόνη δεν δείχνει μόνο τις επιλογές ελέγχου για τη λειτουργία του μηχανήματος, αλλά επίσης δείχνει την κατάσταση και την έξοδο της εργασίας που εκτελείται από αυτό το μηχάνημα. Υπάρχουν πολλοί τύποι οθονών που χρησιμοποιούνται σε ηλεκτρονικά είδη όπως οθόνη 7 τμημάτων, οθόνη LCD, οθόνη αφής TFT, οθόνη LED κ.λπ. Η οθόνη LCD 16x2 είναι η πιο βασική και χρησιμοποιείται επίσης οθόνη σε ορισμένους μικρούς ηλεκτρονικούς εξοπλισμούς, έχουμε κάνει πολλά έργα που χρησιμοποιούν 16x2 LCD, συμπεριλαμβανομένης της βασικής διασύνδεσης με άλλους μικροελεγκτές:
- Διασύνδεση LCD με μικροελεγκτή 8051
- Διασύνδεση LCD με μικροελεγκτή ATmega32
- Διασύνδεση LCD με μικροελεγκτή PIC
- Διασύνδεση LCD 16x2 με Arduino
- 16x2 LCD Interfacing με Raspberry Pi χρησιμοποιώντας Python
Σε αυτό το σεμινάριο, θα δούμε πώς να συνδέσετε μια οθόνη LCD 16x2 με μικροελεγκτή ARM7-LPC2148 και να εμφανίσουμε ένα απλό μήνυμα καλωσορίσματος. Εάν είστε νέοι με το ARM7, ξεκινήστε με τα βασικά του ARM7 LPC2148 και μάθετε πώς μπορεί να προγραμματιστεί χρησιμοποιώντας το Keil uVision
Απαιτούμενα υλικά
Σκεύη, εξαρτήματα
- Πίνακας μικροελεγκτή ARM7-LPC2148
- LCD (16Χ2)
- Ποτενσιόμετρο
- Ρυθμιστής τάσης 5V IC
- Ψωμί
- Σύνδεση καλωδίων
- Μπαταρία 9V
- Καλώδιο Micro USB
Λογισμικό
- Keil uVision 5
- Εργαλείο Magic Flash
Πριν μπείτε στο έργο πρέπει να γνωρίζουμε λίγα πράγματα σχετικά με τους τρόπους λειτουργίας LCD και για τους κωδικούς LCD Hex
16X2 LCD Display Module
Μια οθόνη LCD 16X2 λέει ότι έχει 16 στήλες και 2 σειρές. Αυτή η LCD διαθέτει 16 ακίδες. Κάτω από την εικόνα και τον πίνακα εμφανίζονται τα ονόματα των πινέλων της οθόνης LCD και των λειτουργιών της.
ΟΝΟΜΑ |
ΛΕΙΤΟΥΡΓΙΑ |
VSS |
Καρφίτσα γείωσης |
VDD |
+ 5V Pin εισόδου |
VEE |
Ρύθμιση καρφίτσας αντίθεσης |
RS |
Εγγραφή Επιλέξτε |
Ε / Δ |
Διαβάστε / γράψτε καρφίτσα |
μι |
Ενεργοποίηση καρφίτσας |
D0-D7 |
Καρφίτσες δεδομένων (8 ακίδες) |
LED Α |
Καρφίτσα ανόδου (+ 5V) |
LED Κ |
Καρφίτσα καθόδου (GND) |
Η οθόνη LCD μπορεί να λειτουργήσει σε δύο διαφορετικούς τρόπους, δηλαδή τη λειτουργία 4-bit και τη λειτουργία 8-bit. Σε λειτουργία 4 bit στέλνουμε τα δεδομένα από το nibble, το πρώτο πάνω nibble και στη συνέχεια το κάτω nibble. Για όσους από εσάς δεν ξέρετε τι είναι το nibble: το nibble είναι μια ομάδα τεσσάρων bits, οπότε τα χαμηλότερα τέσσερα bits (D0-D3) ενός byte σχηματίζουν το κάτω nibble ενώ τα τέσσερα άνω bits (D4-D7) από ένα byte μορφή το υψηλότερο nibble. Αυτό μας επιτρέπει να στέλνουμε δεδομένα 8 bit.
Ενώ σε λειτουργία 8 bit μπορούμε να στείλουμε τα δεδομένα 8-bit απευθείας σε μια διαδρομή αφού χρησιμοποιούμε και τις 8 γραμμές δεδομένων.
Εδώ σε αυτό το έργο θα χρησιμοποιήσουμε τη συνηθέστερα χρησιμοποιούμενη λειτουργία που είναι η λειτουργία 4-bit. Στη λειτουργία τεσσάρων bit μπορούμε να εξοικονομήσουμε 4 ακροδέκτες μικροελεγκτή και επίσης να μειώσουμε την καλωδίωση.
Το 16x2 χρησιμοποιεί επίσης κώδικα HEX για να πάρει οποιαδήποτε εντολή, υπάρχουν πολλές εξάγωνες εντολές για την LCD, όπως η μετακίνηση του δρομέα, η επιλογή λειτουργίας, η μετατόπιση του ελέγχου στη δεύτερη γραμμή κ.λπ..
Διάγραμμα κυκλώματος και συνδέσεις
Στον παρακάτω πίνακα εμφανίζονται οι συνδέσεις κυκλώματος μεταξύ LCD & ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
Σ0.4 |
RS (Επιλογή εγγραφής) |
Σ0.6 |
Ε (Ενεργοποίηση) |
Σ0.12 |
D4 (Καρφίτσα δεδομένων 4) |
P0.13 |
D5 (Καρφίτσα δεδομένων 5) |
P0.14 |
D6 (Καρφίτσα δεδομένων 6) |
P0.15 |
D7 (Καρφίτσα δεδομένων 7) |
Συνδέσεις ρυθμιστή τάσης με LCD & ARM7 Stick
Στον παρακάτω πίνακα εμφανίζονται οι συνδέσεις μεταξύ ARM7 & LCD με ρυθμιστή τάσης.
IC ρυθμιστή τάσης |
Λειτουργία καρφιτσών |
LCD & ARM-7 LPC2148 |
1. Αριστερή καρφίτσα |
+ Ve από την είσοδο μπαταρίας 9V |
ΝΚ |
2. Κεντρική καρφίτσα |
- Από μπαταρία |
VSS, R / W, K της LCD GND του ARM7 |
3. Δεξιά καρφίτσα |
Ρυθμιζόμενη έξοδος + 5V |
VDD, A LCD + 5V του ARM7 |
Ποτενσιόμετρο με LCD
Ένα ποτενσιόμετρο χρησιμοποιείται για να μεταβάλλει την αντίθεση της οθόνης LCD. Ένα δοχείο έχει τρεις ακίδες, ο αριστερός πείρος (1) είναι συνδεδεμένος στο + 5V και το κέντρο (2) με VEE ή V0 της μονάδας LCD και ο δεξί πείρος (3) συνδέεται με το GND. Μπορούμε να ρυθμίσουμε την αντίθεση περιστρέφοντας το κουμπί.
Ρυθμίσεις άλτης
Ένας ακροδέκτης βραχυκυκλωτήρα υπάρχει στο ARM7-Stick έτσι ώστε να μπορούμε να τροφοδοτούμε και να ανεβάζουμε κώδικα χρησιμοποιώντας USB ή χρησιμοποιώντας μια είσοδο 5V DC μόνο για τροφοδοσία. Μπορείτε να δείτε τις παρακάτω εικόνες.
Η παρακάτω εικόνα δείχνει ότι ο βραχυκυκλωτήρας είναι σε θέση DC. Αυτό σημαίνει ότι πρέπει να τροφοδοτήσουμε τον πίνακα από εξωτερική τροφοδοσία 5V.
Και αυτή η εικόνα δείχνει ότι ο άλτης είναι συνδεδεμένος σε λειτουργία USB. Εδώ η ισχύς και ο κωδικός παρέχονται μέσω της θύρας micro usb.
ΣΗΜΕΙΩΣΗ: Εδώ σε αυτό το σεμινάριο έχουμε ανεβάσει κώδικα χρησιμοποιώντας USB ρυθμίζοντας το jumper σε USB και μετά αλλάξαμε το jumper σε λειτουργία DC σε τροφοδοσία LPC2148 από είσοδο 5v του ρυθμιστή. Μπορείτε να το δείτε στο βίντεο που δίνεται στο τέλος.
Το τελικό κύκλωμα διασύνδεσης LCD 16x2 με τον μικροελεγκτή ARM7 θα μοιάζει με αυτό:
Προγραμματισμός ARM7-LPC2148
Για να προγραμματίσουμε το ARM7-LPC2148 χρειαζόμαστε keil uVision & Flash Magic εργαλείο. Χρησιμοποιούμε καλώδιο USB για να προγραμματίσουμε το ARM7 Stick μέσω θύρας micro USB. Γράφουμε κώδικα χρησιμοποιώντας το Keil και δημιουργούμε ένα hex αρχείο και στη συνέχεια το αρχείο HEX αναβοσβήνει στο ARM7 stick χρησιμοποιώντας το Flash Magic. Για να μάθετε περισσότερα σχετικά με την εγκατάσταση του keil uVision και του Flash Magic και πώς να τα χρησιμοποιήσετε, ακολουθήστε τον σύνδεσμο Ξεκινώντας με τον μικροελεγκτή ARM7 LPC2148 και προγραμματίστε τον χρησιμοποιώντας το Keil uVision.
Ο πλήρης κωδικός για τη διασύνδεση της οθόνης LCD με το ARM 7 δίνεται στο τέλος αυτού του σεμιναρίου, εδώ εξηγούμε μερικά μέρη του.
Πρώτα απ 'όλα πρέπει να συμπεριλάβουμε τα απαιτούμενα αρχεία κεφαλίδας
#περιλαμβάνω
Η προετοιμασία της μονάδας LCD είναι ένα πολύ σημαντικό βήμα. Εδώ χρησιμοποιούμε ορισμένους κωδικούς HEX, που είναι στην πραγματικότητα εντολές, για να πούμε στην οθόνη LCD σχετικά με τον τρόπο λειτουργίας (4-bit), τον τύπο LCD (16x2), τη γραμμή εκκίνησης κ.λπ.
void LCD_INITILIZE (void) // Λειτουργία για την προετοιμασία της οθόνης LCD { IO0DIR = 0x0000FFF0; // Σετ ακίδων P0.4, P0.6, P0.12, P0.13, P0.14, P0.15as OUTPUT delay_ms (20); LCD_SEND (0x02); // Αρχικοποιήστε το lcd σε λειτουργία 4-bit LCD_SEND (0x28). // 2 γραμμές (16X2) LCD_SEND (0x0C); // Εμφάνιση στο δρομέα εκτός LCD_SEND (0x06). // Αυτόματη αύξηση κέρσορα LCD_SEND (0x01). // Οθόνη καθαρή οθόνη LCD_SEND (0x80). // Πρώτη θέση πρώτης γραμμής }
Για τη λειτουργία 4-Bit έχουμε διαφορετικό τύπο λειτουργίας εγγραφής για τις καρφίτσες, δηλαδή με τη χρήση άνω και κάτω nibble. Ας δούμε, πώς γίνεται
void LCD_SEND (char command) // Λειτουργία αποστολής hex εντολών nibble by nibble { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((command & 0xF0) << 8)); // Στείλτε το πάνω μέρος της εντολής IO0SET = 0x00000040; // Ενεργοποίηση HIGH IO0CLR = 0x00000030; // Κάνοντας RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // Ενεργοποίηση LOW delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((εντολή & 0x0F) << 12)); // Αποστολή χαμηλότερης εντολής IO0SET = 0x00000040; // ΕΝΕΡΓΟΠΟΙΗΣΤΕ ΥΨΗΛΟ IO0CLR = 0x00000030; // RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // ΕΝΕΡΓΟΠΟΙΗΣΗ ΧΑΜΗΛΗ καθυστέρηση_ms (5); }
Λογική αποστολής Nibble
IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((εντολή & 0x0F) << 12)); // Αποστολή χαμηλότερης εντολής IO0PIN = (((IO0PIN & 0xFFFF00FF) - ((εντολή & 0xF0) << 8)); // Αποστολή ανώτερης εντολής εντολής
Πάνω από δύο δηλώσεις παίζουν σημαντικό ρόλο σε αυτό το πρόγραμμα. Η πρώτη εντολή στέλνει το χαμηλότερο nibble & το δεύτερο στέλνει το άνω nibble. Αυτό δεν επηρεάζει τις άλλες καρφίτσες που κάνουμε. Ας δούμε πώς συμβαίνει πριν να γνωρίσουμε πρώτα αυτήν τη λογική
ORing- (A-0 = A), (A-1 = 1) ANDing- (A & 0 = 0), (A & 1 = A)
Χρησιμοποιούμε λοιπόν ένα concept masking και μια λογική λειτουργία shift χωρίς να επηρεάζουμε τις άλλες ακίδες Μέσα χρησιμοποιούνται μόνο οι ακίδες (P0.12-P0.15) και δεν επηρεάζονται άλλες ακίδες όπως P0.4, P0.6. Θα γίνει μετατοπίζοντας τα δεδομένα σε τέσσερα bits και κάνοντας το άνω nibble στη θέση του κάτω nibble και καλύπτοντας το πάνω nibble. Και μετά κάνουμε τα χαμηλότερα bits μηδέν (0XF0) και ORed με τα δεδομένα nibble για να πάρουμε τα ανώτερα δεδομένα nibble στην έξοδο.
Παρόμοια διαδικασία χρησιμοποιείται για χαμηλότερα δεδομένα, αλλά εδώ δεν χρειάζεται να μετατοπίσουμε τα δεδομένα.
Κατά την εγγραφή δεδομένων στην έξοδο, δηλαδή, στη λειτουργία εντολών το RS πρέπει να είναι χαμηλό και η εκτέλεση ενεργοποίησης πρέπει να είναι ΥΨΗΛΗ, και στη λειτουργία δεδομένων το RS πρέπει να είναι ΥΨΗΛΟ και για την εκτέλεση ενεργοποίησης πρέπει να είναι ΥΨΗΛΟ.
Τώρα για την αποστολή των δεδομένων συμβολοσειράς που πρόκειται να εκτυπωθούν στην έξοδο, η ίδια αρχή χρησιμοποιείται nibble από το nibble. Σημαντικό βήμα εδώ είναι ότι η εγγραφή SELECT (RS) πρέπει να είναι ΥΨΗΛΗ για τη λειτουργία δεδομένων.
void LCD_DISPLAY (char * msg) // Λειτουργία εκτύπωσης των χαρακτήρων που στέλνονται ένας προς έναν { uint8_t i = 0; ενώ (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Στέλνει Άνω μύτη IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH για εκτύπωση δεδομένων IO0CLR = 0x00000020; // RW LOW Λειτουργία εγγραφής καθυστέρηση ms (2); IO0CLR = 0x00000040; // EN = 0, RS και RW αμετάβλητα (δηλ. RS = 1, RW = 0) ms καθυστέρηση (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Στέλνει χαμηλότερη μύτη IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; καθυστέρηση ms (2); IO0CLR = 0x00000040; καθυστέρηση ms (5); i ++; }
Παρακάτω δίνεται πλήρες βίντεο κωδικοποίησης και επίδειξης.