- 16x2 Dot Matrix LCD Controller IC HD44780:
- Εμφάνιση προσαρμοσμένου χαρακτήρα σε οθόνη LCD 16x2:
- Προγραμματισμός και εξήγηση εργασίας:
- Συνδέσεις και δοκιμές κυκλώματος:
Στο προηγούμενο σεμινάριό μας, μάθαμε τον τρόπο διασύνδεσης μιας οθόνης LCD 16 * 2 με μικροελεγκτή PIC. Σας συνιστούμε να το διαβάσετε πριν προχωρήσετε περισσότερο, εάν είστε αρχάριος στο μικροελεγκτή PIC. Προηγουμένως, έχουμε επίσης μάθει τα βασικά του PIC χρησιμοποιώντας το πρόγραμμα LED που αναβοσβήνει και τους χρονοδιακόπτες στο μικροελεγκτή PIC. Μπορείτε να ελέγξετε εδώ όλα τα μαθήματα σχετικά με την εκμάθηση μικροελεγκτών PIC χρησιμοποιώντας μεταγλωττιστή MPLABX και XC8.
Σε αυτό το σεμινάριο, ας το κάνουμε πιο ενδιαφέρον, δημιουργώντας τους δικούς μας προσαρμοσμένους χαρακτήρες και εμφανίζοντάς τους στην οθόνη LCD χρησιμοποιώντας τον μικροελεγκτή PIC16F877A PIC Επίσης, υπάρχουν ορισμένοι προκαθορισμένοι συνήθως χρησιμοποιούμενοι προσαρμοσμένοι χαρακτήρες που δίνονται από το ίδιο το HD44780A IC, θα δούμε επίσης πώς μπορούμε να τους χρησιμοποιήσουμε. Όπως εξηγείται στο προηγούμενο σεμινάριό μας, η οθόνη LCD διαθέτει ενσωματωμένο χειριστήριο Hitachi HD44780 που μας βοηθά να εμφανίζουμε χαρακτήρες. Κάθε χαρακτήρας που προβάλλουμε είναι ήδη προκαθορισμένος μέσα στο ROM του HD44780 IC. Θα μάθουμε για τον ελεγκτή LCD IC HD44780, πριν εμφανίσουμε χαρακτήρα στην οθόνη LCD.
16x2 Dot Matrix LCD Controller IC HD44780:
Προκειμένου να εμφανιστεί ένας προσαρμοσμένος χαρακτήρας, πρέπει κάπως να πούμε στο IC πώς θα είναι ο προσαρμοσμένος χαρακτήρας. Για να το κάνουμε αυτό, πρέπει να γνωρίζουμε για τους Τρεις τύπους Μνήμης που υπάρχουν μέσα στο IC του ελεγκτή LCD HD44780:
Character Generator ROM (CGROM): Είναι η μνήμη μόνο για ανάγνωση η οποία, όπως προαναφέρθηκε, περιέχει όλα τα μοτίβα των χαρακτήρων που έχουν προκαθοριστεί μέσα σε αυτήν. Αυτό το ROM θα διαφέρει από κάθε τύπο IC διασύνδεσης, και μερικά ενδέχεται να έχουν κάποιο προκαθορισμένο προσαρμοσμένο χαρακτήρα μαζί τους.
Εμφάνιση δεδομένων RAM (DDRAM): Αυτή είναι μια μνήμη τυχαίας προσπέλασης. Κάθε φορά που εμφανίζουμε έναν χαρακτήρα, το μοτίβο του θα λαμβάνεται από το CGROM και θα μεταφέρεται στο DDRAM και στη συνέχεια θα τοποθετείται στην οθόνη. Για να το θέσω απλό, το DDRAM θα έχει τα μοτίβα όλων των χαρακτήρων που εμφανίζονται επί του παρόντος στην οθόνη LCD. Με αυτόν τον τρόπο για κάθε κύκλο, το IC δεν χρειάζεται να πάρει δεδομένα από το CGROM και βοηθά στη λήψη μιας σύντομης συχνότητας ενημέρωσης
RAM γεννήτριας χαρακτήρων (CGRAM): Αυτή είναι επίσης μια μνήμη τυχαίας πρόσβασης, ώστε να μπορούμε να γράφουμε και να διαβάζουμε δεδομένα από αυτήν. Όπως υποδηλώνει το όνομα, αυτή η μνήμη θα είναι αυτή που μπορεί να χρησιμοποιηθεί για τη δημιουργία του προσαρμοσμένου χαρακτήρα. Πρέπει να διαμορφώσουμε ένα μοτίβο για τον χαρακτήρα και να τον γράψουμε στο CGRAM, αυτό το μοτίβο μπορεί να διαβαστεί και να εμφανιστεί στην οθόνη όταν απαιτείται.
Τώρα, δεδομένου ότι έχουμε μια βασική κατανόηση των τύπων μνήμης που υπάρχουν στο IC διασύνδεσης HD44780. Ας ρίξουμε μια ματιά στο δελτίο δεδομένων του για να κατανοήσουμε λίγο περισσότερα.
Όπως υποδηλώνει το φύλλο δεδομένων, το HD44780 IC έχει προσφέρει 8 τοποθεσίες για την αποθήκευση των προσαρμοσμένων μοτίβων μας στο CGRAM, επίσης στα δεξιά μπορούμε να δούμε ότι υπάρχουν ορισμένοι προκαθορισμένοι χαρακτήρες που μπορούν επίσης να εμφανιστούν στην οθόνη LCD μας. Ας δούμε πώς μπορούμε να το κάνουμε.
Εμφάνιση προσαρμοσμένου χαρακτήρα σε οθόνη LCD 16x2:
Για να εμφανιστεί ένας προσαρμοσμένος χαρακτήρας πρέπει πρώτα να δημιουργήσουμε ένα μοτίβο για αυτόν και μετά να τον αποθηκεύσουμε στο CGRAM. Δεδομένου ότι έχουμε ήδη τις λειτουργίες της βιβλιοθήκης μαζί μας, θα πρέπει να είναι εύκολο να το κάνετε με μερικές απλές εντολές. Εδώ είναι η βιβλιοθήκη για λειτουργίες LCD, αλλά εδώ έχουμε αντιγράψει όλες τις λειτουργίες της βιβλιοθήκης στο ίδιο το πρόγραμμα, οπότε δεν χρειάζεται να συμπεριλάβουμε αυτό το αρχείο κεφαλίδας στο πρόγραμμά μας. Ελέγξτε επίσης αυτό το άρθρο για τη βασική λειτουργία LCD και τα Pinouts.
Το πρώτο βήμα είναι να δημιουργήσετε ένα μοτίβο ή τον προσαρμοσμένο χαρακτήρα. Όπως γνωρίζουμε, κάθε χαρακτήρας είναι ένας συνδυασμός 5 * 8 κουκκίδων. Πρέπει να επιλέξουμε ποια κουκκίδα (pixel) πρέπει να φτάσει ψηλά και ποια θα πρέπει να παραμείνει χαμηλή. Απλώς σχεδιάστε ένα κουτί όπως παρακάτω και σκιάστε τις περιοχές με βάση τον χαρακτήρα σας. Ο χαρακτήρας μου εδώ είναι ένας ραβδί (ελπίζω να μοιάζει με έναν). Μόλις σκιάσετε, απλώς γράψτε την ισοδύναμη δυαδική τιμή κάθε byte όπως φαίνεται παρακάτω.
Απλά βάλτε ένα «1» στη σκιασμένη περιοχή και ένα «0» στη μη σκιασμένη περιοχή για κάθε byte και αυτό είναι το προσαρμοσμένο μοτίβο μας είναι έτοιμο. Παρομοίως, έχω δημιουργήσει 8 προσαρμοσμένους κωδικούς μοτίβων για τους 8 χώρους μνήμης που το παρουσιάζω το CGROM. Παρατίθενται στον παρακάτω πίνακα.
S.NO: |
Προσαρμοσμένος χαρακτήρας |
Κωδικός μοτίβου |
1 |
|
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
2 |
|
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
3 |
|
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
4 |
|
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
5 |
|
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
6 |
|
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
7 |
|
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
8 |
|
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
Σημείωση: Δεν είναι υποχρεωτικό να φορτώσετε και τους 8 χώρους που παρέχονται στο CGRAM.
Προγραμματισμός και εξήγηση εργασίας:
Τώρα οι κωδικοί μοτίβων μας είναι έτοιμοι, απλώς πρέπει να τους φορτώσουμε στο CGRAM της οθόνης LCD και να τους εμφανίσουμε χρησιμοποιώντας μικροελεγκτή PIC. Για να τα φορτώσουμε στο CGRAM μπορούμε να σχηματίσουμε μια σειρά στοιχείων 5 * 8 και να φορτώσουμε κάθε byte χρησιμοποιώντας ένα « για βρόχο » Ο πίνακας του κώδικα μοτίβου εμφανίζεται παρακάτω:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Κωδικός για χώρο μνήμης CGRAM 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00 Χώρος μνήμης CGRAM 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Κωδικός για χώρο μνήμης CGRAM 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000, // Code for CG space 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Κωδικός για χώρο μνήμης CGRAM 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Κωδικός για χώρο μνήμης CGRAM 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Κωδικός για χώρο μνήμης CGRAM 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Κωδικός για χώρο μνήμης CGRAM 8}
Κάθε χώρος μνήμης φορτώνεται με το σεβαστό μοτίβο χαρακτήρων. Για να φορτώσετε αυτό το μοτίβο στο HD44780 IC, πρέπει να αναφέρεται το φύλλο δεδομένων του HD44780, αλλά είναι απλώς γραμμές εντολών που μπορούν να χρησιμοποιηθούν για τον καθορισμό της διεύθυνσης του CGRAM
// *** Φορτώστε προσαρμοσμένο char στο CGROM *** ////// Lcd_Cmd (0x04); // Ορισμός διεύθυνσης CGRAM Lcd_Cmd (0x00); //.. ορίστε τη διεύθυνση CGRAM για (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Επιστροφή στην αρχική σελίδα Lcd_Cmd (2); //.. επιστροφή στην αρχική σελίδα // *** Η φόρτωση του προσαρμοσμένου χαρακτήρα ολοκληρώθηκε *** //////
Εδώ, μέσα στο « για βρόχο» κάθε δυαδική τιμή φορτώνεται στο CGROM. Μόλις φορτωθεί το μοτίβο, οι προσαρμοσμένοι χαρακτήρες μπορούν να εμφανιστούν, κάνοντας απλώς κλήση στη θέση του μοτίβου χρησιμοποιώντας τη λειτουργία Lcd_Print_Char (δεδομένα char) όπως φαίνεται παρακάτω.
Lcd_Print_Char (0); // Εμφάνιση προσαρμοσμένου χαρακτήρα 0 Lcd_Print_Char (1); // Εμφάνιση προσαρμοσμένου χαρακτήρα 1 Lcd_Print_Char (2); // Εμφάνιση προσαρμοσμένου χαρακτήρα 2 Lcd_Print_Char (3); // Εμφάνιση προσαρμοσμένου χαρακτήρα 3 Lcd_Print_Char (4); // Εμφάνιση προσαρμοσμένου χαρακτήρα 4 Lcd_Print_Char (5); // Εμφάνιση προσαρμοσμένου χαρακτήρα 5 Lcd_Print_Char (6); // Εμφάνιση προσαρμοσμένου χαρακτήρα 6 Lcd_Print_Char (7); // Εμφάνιση προσαρμοσμένου χαρακτήρα 7
Εκτύπωση προκαθορισμένου ειδικού χαρακτήρα:
Το HD44780 IC έχει ορισμένους προκαθορισμένους ειδικούς χαρακτήρες αποθηκευμένους στο DDROM. Αυτοί οι χαρακτήρες μπορούν να εκτυπωθούν απευθείας στην οθόνη με αναφορά στη δυαδική τιμή του στο φύλλο δεδομένων.
Για παράδειγμα: Η δυαδική τιμή του χαρακτήρα "ALPHA" είναι 0b11100000. Πώς μπορείτε να το αποκτήσετε αυτό μπορεί να γίνει κατανοητό από το παρακάτω σχήμα, επίσης μπορείτε να λάβετε αξία για κάθε ειδικό χαρακτήρα που έχει προκαθοριστεί στο IC.
Μόλις η δυαδική τιμή είναι γνωστή, ο αντίστοιχος χαρακτήρας μπορεί να εκτυπωθεί στην οθόνη χρησιμοποιώντας απλώς τη λειτουργία Lcd_Print_Char (δεδομένα char) όπως φαίνεται παρακάτω, Lcd_Print_Char (0b11100000); // δυαδική τιμή άλφα από το φύλλο δεδομένων
Ο πλήρης κώδικας αυτού του έργου δίνεται παρακάτω στην ενότητα Κωδικός, ελέγξτε επίσης τη λεπτομερή εξήγηση βίντεο στο τέλος αυτού του σεμιναρίου.
Συνδέσεις και δοκιμές κυκλώματος:
Αυτό το έργο δεν έχει καμία πρόσθετη απαίτηση υλικού, απλώς χρησιμοποιήσαμε τις ίδιες συνδέσεις από το προηγούμενο σεμινάριο διασύνδεσης LCD και χρησιμοποιήσαμε την ίδια πλακέτα που δημιουργήσαμε στο LED αναβοσβήνει. Όπως πάντα ας προσομοιώσουμε το πρόγραμμα χρησιμοποιώντας το Proteus για να επαληθεύσουμε την παραγωγή μας.
Μόλις εκτελεστεί η προσομοίωση όπως αναμένεται, ας εγγράψουμε άμεσα τον κώδικα στη ρύθμιση υλικού. Η έξοδος του προγράμματος θα πρέπει να είναι κάπως έτσι:
Έτσι μπορείτε να εμφανίσετε οποιονδήποτε προσαρμοσμένο χαρακτήρα σε οθόνη LCD 16x2 χρησιμοποιώντας μικροελεγκτή PIC με μεταγλωττιστή MPLABX και XC8. Δείτε επίσης την πλήρη σειρά εκμάθησης PIC Microcontroller εδώ.