Εργασία με χαρακτήρες LCD με βάση τον ελεγκτή HD44780. STM32 και LCD. Εργασία με γραφική οθόνη Βιβλιοθήκη για εργασία με LCD

Κατόπιν αιτήματος των εργαζομένων και των υποσχέσεών μου, αποφάσισα να περιγράψω το έργο με την εικονική οθόνη LCD 16x2 στο περιβάλλον CodeVisionAVR. Ας ξεκινήσουμε με μια περιγραφή της ίδιας της LCD. Η αλφαριθμητική οθόνη LCD με ενσωματωμένο τσιπ HD44780 από τη Hitachi μπορεί να εμφανίζει χαρακτήρες σε μία, δύο ή τέσσερις περιόδους των 8, 16, 20 ή 40 χαρακτήρων η καθεμία. Σε αυτό το άρθρο θα εξετάσω την οθόνη LCD 16x2 (16 χαρακτήρες, 2 γραμμές)... Αυτή η οθόνη για φυσική σύνδεση στο MC έχει 16 ακίδες (η διάταξη των ακίδων εξαρτάται από τον κατασκευαστή)... Ας ρίξουμε μια ματιά σε αυτά τα ευρήματα. Χωρίς άλλη παραλλαγή, έκλεψα μια πινακίδα στο MELT. Κατ 'αρχήν, είναι κατάλληλο για οποιαδήποτε LCD.
Λοιπόν, νομίζω ότι δεν χρειάζεται να εξηγήσουμε γιατί αυτό ή αυτό το pin χρειάζεται. Όλα γράφονται εκεί στα ρωσικά. Υπάρχουν όμως μερικά μικρά. 1) Οι οθόνες LCD μπορούν να παραχθούν σε δύο εκδόσεις για 5 volt ή 3.3. 2) Μια αντίσταση περιορισμού ρεύματος δεν είναι πάντα εγκατεστημένη στο κύκλωμα τροφοδοσίας. Κοιτάξτε προσεκτικά, μπορεί να υπάρχει μόνο ένας άλτης. (Έκαψα τον οπίσθιο φωτισμό σε δύο οθόνες έτσι.) 3) Σχέδιο ενεργοποίησης της αντίστασης για ρύθμιση της αντίθεσης.
Λοιπόν, λοιπόν, τώρα είναι σαν θαύμα να συνδεθείτε στο MK. Θα συνεργαστούμε με χαλαζία ATmega8 και 4 MHz. Εδώ είναι το ίδιο το διάγραμμα.
Όπως μπορείτε να δείτε, δεν υπάρχει τίποτα περίπλοκο. Τα πρώτα τρία ψηφία της θύρας ρεεξυπηρετούν για έλεγχο και τα τέσσερα τελευταία για δεδομένα. Μπορείτε επίσης να εργαστείτε με αυτές τις οθόνες σε ένα λεωφορείο 8-bit, αλλά νομίζω ότι το να δώσετε τα επιπλέον 4 πόδια είναι χάσιμο. Επομένως, θα εργαστούμε σε ένα λεωφορείο 4-bit. Καταλάβαμε το κύκλωμα, τώρα ας πάμε με το μέρος του λογισμικού. Για να ξεκινήσετε την οθόνη και να την θέσετε σε λειτουργία 4-bit, πρέπει να εκτελέσετε πολλές εντολές. Αλλά πριν από αυτό, θέλω να διευκρινίσω πώς λειτουργούν τα bit ελέγχου. Το bit RS είναι υπεύθυνο για αυτό που θα λάβει η οθόνη LCD. Αν ένα RS = 0, τότε μεταδίδουμε την εντολή και εάν 1 τότε τα δεδομένα. Εάν το κομμάτι RW = 0, τότε γράφουμε στην οθόνη LCD και εάν 1 , τότε διαβάζουμε. Κομμάτι μιαπλά ένα στρόβο. Δηλαδή, μόλις θέλουμε να εισαγάγουμε μια εντολή ή δεδομένα, τότε αφού έχουμε βάλει όλα τα κομμάτια στα πόδια, το θέτουμε απλά σε 1 κομμάτι μι, και πάλι το ρίχνουμε 0 ... 1 - Ενεργοποιήστε το τροφοδοτικό 2 - Κρατήστε παύση τουλάχιστον 20 ms 3 - Εντολή για 4 bit. λεωφορεία 4 - Κρατήστε παύση τουλάχιστον 40 µs 5 - Εντολή για 4 bit. ελαστικά (RS = 0), (RW = 0), (D7 = 0), (D6 = 0), (D5 = 1), (D4 = 1) 6 - Κρατήστε παύση τουλάχιστον 40 µs 7 - Εντολή για 4 bit. ελαστικά (RS = 0), (RW = 0), (D7 = 0), (D6 = 0), (D5 = 1), (D4 = 1) 8 - Κρατήστε παύση τουλάχιστον 40 µs 9 - Εντολή για 4 bit. ελαστικά (RS = 0), (RW = 0), (D7 = 0), (D6 = 0), (D5 = 1), (D4 = 0) 10 - Κρατήστε παύση τουλάχιστον 40 μs 11 - Ορίστε παραμέτρους (RS = 0), (RW = 0), (D7 = 0), (D6 = 0), (D5 = 1), (D4 = 0) (RS = 0), (RW = 0), (D7 = 1), (D6 = 0), (D5 = 0), (D4 = 0) 12 - Απενεργοποιήστε την οθόνη (RS = 0), (RW = 0), (D7 = 0), (D6 = 0), (D5 = 0), (D4 = 0) (RS = 0), (RW = 0), (D7 = 0), (D6 = 0), (D5 = 1), (D4 = 0) 13 - Διαγράψτε την οθόνη (RS = 0), (RW = 0), (D7 = 0), (D6 = 0), (D5 = 0), (D4 = 0) (RS = 0), (RW = 0), (D7 = 0), (D6 = 0), (D5 = 0), (D4 = 1) 14 - Λειτουργία εισαγωγής δεδομένων (RS = 0), (RW = 0), (D7 = 0), (D6 = 0), (D5 = 0), (D4 = 0) (RS = 0), (RW = 0), (D7 = 0), (D6 = 1), (D5 = 1), (D4 = 0)Ω πώς. Τώρα μετά από αυτήν την ασυναρτησία, η οθόνη μας είναι έτοιμη να λάβει δεδομένα Τι έπεται. Και μετά ας δούμε τις εντολές LCD. Για τη μεταφορά εντολών / δεδομένων στην οθόνη LCD μέσω διαύλου 4-bit, απαιτούνται δύο περάσματα. Το πρώτο είναι η μεταφορά των πιο σημαντικών 4 byte και το δεύτερο είναι η μεταφορά των λιγότερο σημαντικών 4 byte. Επιπλέον, θα γράψω όλες τις εντολές σε ζεύγη. Η εντολή για εκκαθάριση της ένδειξης και θέση του δρομέα στην επάνω αριστερή γωνία. RS = 0, RW = 0, D4 = 0, D5 = 0, D6 = 0, D7 = 0 (E = 1 και 0) RS = 0, RW = 0, D4 = 0, D5 = 0, D6 = 0, D7 = 1 (E = 1 και 0)Εντολή για να μετακινήσετε τον κέρσορα στην αριστερή θέση. (X σημαίνει pofik τι αξία) RS = 0, RW = 0, D4 = 0, D5 = 0, D6 = 0, D7 = 0 (E = 1 και 0) RS = 0, RW = 0, D4 = 0, D5 = 0, D6 = 1, D7 = X (E = 1 και 0)Η εντολή καθορίζει την κατεύθυνση της κίνησης του δρομέα (ID = 0/1 αριστερά / δεξιά). Επίσης, η ανάλυση της αλλαγής οθόνης (SH = 1) κατά την εγγραφή σε DDRAM. RS = 0, RW = 0, D4 = 0, D5 = 0, D6 = 0, D7 = 0 (E = 1 και 0) RS = 0, RW = 0, D4 = 0, D5 = 1, D6 = ID, D7 = SH (E = 1 και 0)Εντολή για να ενεργοποιήσετε την οθόνη (D = 1) και επιλέξτε τον κέρσορα (A, B). A = 0, B = 0Χωρίς δρομέα, τίποτα δεν αναβοσβήνει A = 0, B = 1Χωρίς κέρσορα, αναβοσβήνει ολόκληρος ο χαρακτήρας A = 1, B = 0Υπογραμμίστε τον κέρσορα, δεν αναβοσβήνει A = 1, B = 1Υπογραμμίστε τον κέρσορα και αναβοσβήνει RS = 0, RW = 0, D4 = 0, D5 = 0, D6 = 0, D7 = 0 (E = 1 και 0) RS = 0, RW = 0, D4 = 1, D5 = D, D6 = A, D7 = B (E = 1 και 0)Εντολή εμφάνισης / αλλαγής δρομέα (SC = 0/1 δρομέα / οθόνη RL = 0/1 αριστερά / δεξιά). RS = 0, RW = 0, D4 = 0, D5 = 0, D6 = 0, D7 = 1 (E = 1 και 0) RS = 0, RW = 0, D4 = SC, D5 = RL, D6 = X, D7 = X (E = 1 και 0)Η εντολή για τον καθορισμό του πλάτους του διαύλου (DL = 0/1 4/8 bits) καθώς και τη σελίδα της γεννήτριας χαρακτήρων P. RS = 0, RW = 0, D4 = 0, D5 = 0, D6 = 1, D7 = DL (E = 1 και 0) RS = 0, RW = 0, D4 = 1, D5 = 0, D6 = P, D7 = 0 (E = 1 και 0)Η εντολή για τον καθορισμό της διεύθυνσης της επόμενης λειτουργίας με την τοποθέτηση του δρομέα εκεί και την επιλογή της περιοχής CGRAM (Οι δικοί σας εφευρεθέντες χαρακτήρες). RS = 0, RW = 0, D4 = 0, D5 = 1, D6 = ACG, D7 = ACG (E = 1 και 0) RS = 0, RW = 0, D4 = ACG, D5 = ACG, D6 = ACG, D7 = ACG (E = 1 και 0)Η εντολή για τον καθορισμό της διεύθυνσης της επόμενης λειτουργίας και την επιλογή της περιοχής μνήμης DDRAM (γεννήτρια χαρακτήρων). RS = 0, RW = 0, D4 = 0, D5 = 1, D6 = ADD, D7 = ADD (E = 1 και 0) RS = 0, RW = 0, D4 = ADD, D5 = ADD, D6 = ADD, D7 = ADD (E = 1 και 0)Εντολή Εγγραφή δεδομένων στην τρέχουσα περιοχή. RS = 1, RW = 0, D4 = DATA, D5 = DATA, D6 = DATA, D7 = DATA (E = 1 και 0) RS = 1, RW = 0, D4 = DATA, D5 = DATA, D6 = DATA, D7 = ΔΕΔΟΜΕΝΑ (E = 1 και 0)Εντολή για ανάγνωση δεδομένων στην τρέχουσα περιοχή. RS = 1, RW = 1, D4 = DATA, D5 = DATA, D6 = DATA, D7 = DATA (E = 1 και 0) RS = 1, RW = 1, D4 = DATA, D5 = DATA, D6 = DATA, D7 = ΔΕΔΟΜΕΝΑ (E = 1 και 0)Εδώ είναι όλες οι εντολές. Υπάρχει επίσης μια εντολή για να διαβάσετε την απασχολημένη σημαία, αλλά δεν τη χρησιμοποιώ, διατηρώ τουλάχιστον 40 μικροδευτερόλεπτα μεταξύ κάθε εντολής. Αυτό είναι όλο. Τώρα, αφού διαβάσετε αυτή την πραγματεία, πιείτε ένα φλιτζάνι τσάι ή καφέ και ξεχάστε τα όλα. Δεδομένου ότι όλα αυτά τα σκουπίδια αναλαμβάνονται από λειτουργίες από τη βιβλιοθήκη CodeVisionAVR. Δημιουργούμε ένα νέο έργο όπως έχει ήδη περιγραφεί. Για όσους δεν γνωρίζουν, πηγαίνουμε εδώ, οι υπόλοιποι πηγαίνουν στην καρτέλα στη γεννήτρια κώδικα οθόνη υγρού κρυστάλλουκαι επιλέξτε PORTD. Τι το κάναμε; Αρχικά, είπαμε στο πρόγραμμα ότι θέλουμε να δουλέψουμε με την οθόνη LCD (επιλέγοντας την καρτέλα οθόνη υγρού κρυστάλλου). Τότε είπαμε ότι θα το συνδέσουμε στο λιμάνι ρε... Η αναπτυσσόμενη λίστα παρακάτω σας επιτρέπει να επιλέξετε τον αριθμό των χαρακτήρων ανά γραμμή. Δεδομένου ότι η προεπιλογή είναι 16 , αλλά θέλουμε να εργαστούμε με την οθόνη LCD 16x2, τότε τίποτα δεν χρειάζεται να αλλάξει. Παρακάτω, για μια υπόδειξη, τα πόδια της θύρας είναι βαμμένα για τη σωστή σύνδεση της οθόνης LCD με το MK. Αυτό είναι, αποθηκεύστε το έργο και δείτε τον πρόσφατα δημιουργημένο κώδικα. Το πρώτο πράγμα που πρέπει να προσέξετε είναι το κομμάτι του κώδικα μετά την οδηγία για τον προεπεξεργαστή #περιλαμβάνω Αυτό: // Λειτουργίες αλφαριθμητικής μονάδας LCD #asm .equ __lcd_port = 0x12; PORTD #endasm #include > Ας το αναλύσουμε κάθε γραμμή. Η πρώτη γραμμή του σχολίου αναφέρει ότι έχουμε συμπεριλάβει ένα αρχείο κεφαλίδας με λειτουργίες για εργασία με οθόνη LCD. Με τη δεύτερη γραμμή, ανοίγουμε ένα μπλοκ για την εισαγωγή οδηγιών συναρμολόγησης. Η επόμενη γραμμή εκχωρεί τη θύρα στην οποία είναι συνδεδεμένη η LCD. Ομάδα στο assembler κάνει το ίδιο με την εντολή #περιλαμβάνωστο Γ. Εάν κατά λάθος επιλέξετε λάθος θύρα στη δημιουργία κώδικα, μπορείτε πάντα να την αλλάξετε σε αυτήν τη γραμμή. Ο αριθμός θύρας βρίσκεται πάντα στο αρχείο αρχικοποίησης MK. Συνδέεται πάντα στην πρώτη γραμμή. Στην περίπτωσή μας είναι mega8.ω... Η επόμενη γραμμή κλείνει το μπλοκ του κώδικα συναρμολόγησης. Και η τελευταία γραμμή συνδέει όλα όσα χρειάζεστε για να εργαστείτε με την οθόνη LCD. Τώρα ας δούμε τις κύριες λειτουργίες. Η πρώτη λειτουργία που πρέπει να καλέσετε πριν ξεκινήσετε να βασανίζετε την οθόνη LCD είναι, φυσικά, η λειτουργία αρχικοποίησης της οθόνης. Μοιάζει με αυτό: void lcd_init (χωρίς υπογραφή char lcd_columns)Αυτή η συνάρτηση αρχικοποιεί την οθόνη και η παράμετρος που πέρασε πρέπει να είναι ο αριθμός των χαρακτήρων στη συμβολοσειρά. Μετακινούμε το πρόγραμμά μας στο κάτω μέρος και πριν από τον κύριο βρόχο βλέπουμε δύο γραμμές του ακόλουθου περιεχομένου: // Αρχικοποίηση μονάδας LCD lcd_init (16);Αυτές είναι οι ίδιες 16 γραμμές που επιλέχθηκαν στη λίστα της δημιουργίας κώδικα από το πρόγραμμα και ωθήθηκαν στη συνάρτηση ως επιχείρημα. Και εδώ, εάν από φόβο ξεχάσατε ότι έχετε μια οθόνη LCD 8 ή 20 χαρακτήρων ανά γραμμή, τότε απλώς αλλάξτε την τιμή του ορίσματος σε αυτήν τη συνάρτηση. void lcd_gotoxy (χωρίς υπογραφή char x, unsigned char y)Αυτή η συνάρτηση, κρίνοντας από το όνομά της, μετακινεί τον κέρσορα στη θέση x, ε... Εδώ Χείναι ένα γράμμα. Αριστερά προς τα δεξιά από 0 έως 15/19/39 (εξαρτάται από τον αριθμό των γραμμάτων στη γραμμή)... ΑΛΛΑ εείναι μια χορδή. Από πάνω προς τα κάτω από 0 έως 0/1/3 (εξαρτάται από τον αριθμό των γραμμών) . άκυρο lcd_putchar (char c)Αυτή η συνάρτηση εξάγει έναν χαρακτήρα στην τρέχουσα θέση. Παράδειγμα: lcd_putchar ("Α")ή lcd_putchar (0x41)που θα δώσει το ίδιο αποτέλεσμα στην έξοδο. Δηλαδή, η παράμετρος μπορεί να είναι είτε ένα σύμβολο είτε ο κωδικός της. lcd_gotoxy (0,0); lcd_putchar ("A"); lcd_gotoxy (0,1); lcd_putchar (0x41);Νομίζω ότι τα σχόλια δεν είναι απαραίτητα εδώ, ας δούμε το αποτέλεσμα.
Επόμενη συνάρτηση. άκυρα lcd_puts (char * str)Αυτή η συνάρτηση εξάγει τη γραμμή που βρίσκεται στο SRAM ξεκινώντας από την τρέχουσα θέση. Παράδειγμα: lcd_gotoxy (0,0); lcd_puts ("LINE");Βλέπουμε:
Επόμενη συνάρτηση. άκυρο lcd_putsf (char * str)Αυτή η λειτουργία εμφανίζει τη συμβολοσειρά που βρίσκεται στο FLASH ξεκινώντας από την τρέχουσα θέση. Παράδειγμα: lcd_gotoxy (0,0); lcd_putsf ("LINE");Βλέπουμε:
Λοιπόν, η λειτουργία "Γόμα" κλείνει όλη αυτή την ντροπή κενό lcd_clesr (κενό)Καλώντας αυτήν τη λειτουργία, θα διαγράψετε όλα όσα βρίσκονται στην οθόνη και ο δρομέας θα μετακινηθεί στην ακραία αριστερή θέση της επάνω γραμμής. Έτσι μπορείτε να ξεκινήσετε, μπορείτε να εμφανίσετε λέξεις και αριθμούς στην οθόνη LCD χρησιμοποιώντας έτοιμες λειτουργίες. Τώρα ας μιλήσουμε για τον τρόπο εμφάνισης της τιμής των μεταβλητών. Για τους σκοπούς αυτούς, χρειαζόμαστε μια ακόμη βιβλιοθήκη. Λοιπόν, αυτοί που προγραμματίστηκαν στο C κάτω από έναν υπολογιστή πρέπει να το γνωρίζουν. Ονομάζεται stdio.hΑνεβαίνουμε στην κορυφή του προγράμματος και μετά την οδηγία για τον προεπεξεργαστή #περιλαμβάνω Προσθήκη #περιλαμβάνω Ως αποτέλεσμα, ο κώδικας μας θα λάβει τη μορφή. // Λειτουργίες αλφαριθμητικής μονάδας LCD#asm .equ __lcd_port = 0x12; PORTD #endasm #include #περιλαμβάνω Τώρα ας εξοικειωθούμε με τη λειτουργία που ασχολείται με τη μορφοποίηση κειμένου. void printf (char flash * fmtstr [, arg1, arg2, ...])Πώς λειτουργεί. ΣΕ char flash * fmtstrέχει οριστεί η μορφή της τιμής εξόδου και τα ορίσματα arg1, arg2, ...όνομα μεταβλητής. Παράδειγμα. χωρίς υπογραφή char temp = 123; printf ("temp =% 05d \ n", temp);Τι σημαίνει αυτό το abra-kadabra; Η πρώτη γραμμή δημιουργεί μια μεταβλητή και της εκχωρεί μια τιμή. Όλα είναι ξεκάθαρα εδώ, αλλά τι κάνει το δεύτερο. Όλα εντάξει. Η εγγραφή εμφανίζεται πρώτα θερμοκρασία =έπειτα 00123 ... Γιατί εμφανίζεται 00123 ... Αλλά επειδή έχουμε έναν όρο % 05d \ nπου λέει: 1) % - θα διαμορφώσουμε τις τιμές του πρώτου ορίσματος 2) 0 - θα βγάλουμε n χαρακτήρες, θα συμπληρώσουμε τους κενούς με μηδενικά 3) 5 - εμφανίζουμε 5 χαρακτήρες, εάν ο αριθμός είναι μικρότερος από 5 χαρακτήρες, τότε συμπληρώστε τα κενά με μηδενικά. Αυτό υποδεικνύεται από το σημείο 2. Ο αριθμός θα είναι ευθυγραμμισμένος δεξιά. τέσσερα) ρε- εμφανίστε τον αριθμό σε δεκαδική μορφή. πέντε) \ n- Θα αναγκάσει μετά την έξοδο ενός χαρακτήρα να μεταβεί σε άλλη γραμμή. Επόμενη συνάρτηση. void sprintf (char flash, char flash * fmtstr [, arg1, arg2, ...])) Αυτή η λειτουργία είναι η πιο ενδιαφέρουσα για εμάς. Διαμορφώνει τη συμβολοσειρά και την γράφει σε έναν πίνακα. Τότε μπορούμε να εμφανίσουμε με ασφάλεια τον πίνακα. Πώς λειτουργεί. χωρίς υπογραφή char temp = 123; μη υπογεγραμμένη συμβολοσειρά char; sprintf (string, "temp =% 05d \ n", temp); lcd_puts (συμβολοσειρά);Έτσι φαίνεται ζωντανά.
Έτσι μάθαμε πώς να εμφανίζουμε μορφοποιημένο κείμενο στην οθόνη LCD. Στη συνέχεια, θα αναφερθώ εν συντομία στους τύπους μετατροπής. Εγώ ρε- Για να εμφανίσετε έναν υπογεγραμμένο δεκαδικό ακέραιο εσύ- Για εμφάνιση μη υπογεγραμμένου δεκαδικού ακέραιου μι -d.d e-d μι- Για να εμφανιστεί ένα πραγματικό κινούμενο σημείο της φόρμας -d.d E-d φά- Για να εμφανιστεί ένα πραγματικό κινούμενο σημείο της φόρμας Χ- Για έξοδο σε δεκαεξαδική μορφή με μικρά γράμματα Χ- Για έξοδο σε δεκαεξαδική μορφή με κεφαλαία γράμματα ντο- Για έξοδο σε σύμβολα Εάν γράφετε % -05δτότε το σύμβολο "-" θα το καταστήσει ευθυγραμμισμένο προς τα αριστερά και τα κενά δεν θα φράξουν με μηδενικά. Εάν προσπαθήσετε να εκτυπώσετε έναν αριθμό κινούμενου σημείου, θα εκπλαγείτε πολύ. Ο αριθμός δεν θα εκτυπωθεί. Σε ενέδρα)) Το πρόβλημα βρίσκεται στις ρυθμίσεις του μεταγλωττιστή. Προκειμένου ο μεταγλωττιστής να αρχίσει να κατανοεί τη μορφή φλοτέρπρέπει να το τροποποιήσετε λίγο. Γι 'αυτό πηγαίνουμε Έργο-> Διαμόρφωσηκαι μεταβείτε στην καρτέλα C Μεταγλωττιστής... Στην ιδιοκτησία Χαρακτηριστικά εκτύπωσης:επιλέγω πλωτήρα, πλάτος, ακρίβεια... Αυτό είναι όλο. Δοκιμάστε το, πειραματιστείτε. Εάν έχετε απορίες, γράψτε στο φόρουμ. Καλή τύχη!

Ο αναγνώστης του ιστολογίου μας Mikhail ( Μισάντεσς) δημιούργησε μια υπέροχη βιβλιοθήκη για να εργαστεί οθόνη υγρού κρυστάλλουκαι πρότεινε τη σύνταξη ενός άρθρου για να αποδείξει τις ικανότητές του. Στην πραγματικότητα, σήμερα αυτό ακριβώς θα συζητηθεί 😉 Ας αναλύσουμε ποιες λειτουργίες εφαρμόζονται και επίσης στο τέλος του άρθρου θα αναρτηθεί ένα παράδειγμα για εργασία με την οθόνη.

Ως συνήθως, ας ξεκινήσουμε με μια συζήτηση για το σίδερο ... Και εδώ, στην πραγματικότητα, δεν υπάρχει τίποτα για να μιλήσουμε. Όπως στο πρώτο άρθρο σχετικά με την εργασία με οθόνες (), θα χρησιμοποιήσουμε τον πίνακα εντοπισμού σφαλμάτων Μίνι STM32... Στην πραγματικότητα, η σύνδεση μιας οθόνης, οι βασικές εντολές για τη σύνταξη δεδομένων, μια ακολουθία οδηγιών για την προετοιμασία - όλα αυτά υπάρχουν =) Επομένως, τώρα προχωρούμε άμεσα στη συζήτηση της βιβλιοθήκης για εργασία με γραφικές οθόνες.

Ακολουθεί μια πλήρης λίστα λειτουργιών με εξηγήσεις:

Η επόμενη συνάρτηση, όπως υποδηλώνει το όνομά της, αλλάζει τον προσανατολισμό της οθόνης. Δύο θέσεις οθόνης είναι δυνατές, αντίστοιχα, δύο πιθανές τιμές παραμέτρων προσανατολισμός:

  • Orientation_Portrait
  • Orientation_Album

Η συνάρτηση σχεδιάζει ένα σύμβολο στην οθόνη γραφικών, τοποθετώντας το σύμφωνα με τις συντεταγμένες που περνούν στη συνάρτηση, και επίσης καθορίζει το χρώμα της. Το στυλ χαρακτήρων ταιριάζει με τη γραμματοσειρά που ορίζεται στο αρχείο γραμματοσειρά. γ(το αρχείο περιλαμβάνεται στη βιβλιοθήκη).

Από τη λειτουργία LCD_DrawChar ()η ακόλουθη συνάρτηση ακολουθεί ομαλά:

void LCD_DrawString (char * s, uint16_t x, uint16_t y, uint16_t color, uint16_t backColor, uint8_t isΔιαφανές);

Εδώ είναι ξεκάθαρο και χωρίς άλλη καθυστέρηση 😉 Η λειτουργία εκτυπώνεται οθόνη υγρού κρυστάλλουγραμμή κειμένου. Η βάση αυτής της λειτουργίας είναι η προηγούμενη - LCD_DrawChar ().

Εκτός από τα σύμβολα και το κείμενο, φυσικά, πρέπει να είστε σε θέση να σχεδιάσετε βασικά γραφικά πρωτότυπα όπως μια γραμμή ή κύκλο. Για αυτό, εφαρμόζονται τα ακόλουθα:

void LCD_drawLine (int x1, int y1, int x2, int y2, uint16_t color). void LCD_DrawRect (int x1, int y1, int x2, int y2, uint16_t color, uint8_t fill). άκυρο LCD_DrawEllipse (uint16_t X1, uint16_t Y1, uint16_t R, uint16_t color);

Για να σχεδιάσετε μια γραμμή, πρέπει να περάσετε τις συντεταγμένες του σημείου έναρξης, τις συντεταγμένες του τελικού σημείου και το επιθυμητό χρώμα στη συνάρτηση. Για ένα ορθογώνιο, οι συντεταγμένες της άνω-αριστεράς γωνίας και οι συντεταγμένες της κάτω-δεξιά γωνίας (!). Τελευταία παράμετρος γέματο- καθορίζει εάν πρέπει να συμπληρωθεί το σχήμα. Το ένα σημαίνει ναι, το σχήμα θα γεμίσει με το επιλεγμένο χρώμα, το μηδέν σημαίνει μόνο το περίγραμμα του σχήματος. Με αυτό είναι σαφές) Υπάρχει μόνο ένας κύκλος αριστερά - μια λειτουργία DrawEllipse ()... Εδώ, αντί για τις συντεταγμένες της αρχής και του τέλους (πάνω / κάτω γωνίες), περνάμε το κέντρο του κύκλου και την ακτίνα ως ορίσματα.

Και τέλος, μια ακόμη λειτουργία:

άκυρο LCD_FillScr (χρώμα uint16_t);

Η λειτουργία σας επιτρέπει να γεμίσετε την οθόνη με ένα συμπαγές χρώμα.

Όλες οι παραπάνω λειτουργίες εφαρμόζονται στο αρχείο GUI_DRV.γ.

Εκτός από αυτά, η βιβλιοθήκη περιλαμβάνει λειτουργίες για την εγγραφή δεδομένων στην οθόνη ( LCD_DRIVER.γ) καθώς και τις ήδη αναφερθείσες γραμματοσειρές ( γραμματοσειρά. γ). Όπως μπορείτε να δείτε, όλα είναι σαφώς ταξινομημένα σε διαφορετικά αρχεία, οπότε κατ 'αρχήν όλα είναι πολύ σαφή, οπότε ας προχωρήσουμε σε ένα πρακτικό παράδειγμα!

Ας το καταλάβουμε! Μεταβείτε στο αρχείο main.c... Δεν θα δώσω τον πλήρη κώδικα των λειτουργιών αρχικοποίησης περιφερειακών και εμφάνισης, όλα αυτά μπορούν να προβληθούν απευθείας στο αρχείο ή στο προηγούμενο άρθρο, ο σύνδεσμος στον οποίο βρισκόταν στην αρχή αυτού του άρθρου 😉 Λειτουργία κύρια ():

int main (void) (initPeriph (); initFSMC (); initLCD (); delay (10000); LCD_FillScr (0xFFFF); delay (100); LCD_SetOrient (Orientation_Album); καθυστέρηση (100); LCD_DrawString ( "Βιβλιοθήκη για LGDP4532", 30, 30, 0x888F, 0x0000, 0); LCD_DrawRect (100, 100, 200, 200, 0x0000, 0); LCD_DrawRect (120, 120, 180, 180, 0xFF00, 1); LCD_DrawEllipse (150, 150, 50, 0xF000); ενώ (1) ())

Ξεκινάμε με την αρχικοποίηση, χρωματίζουμε πάνω από την οθόνη και ρυθμίζουμε την οθόνη σε οριζόντιο προσανατολισμό. Και τώρα ας προχωρήσουμε στο σχεδιασμό γραφικών)

Εμφανίζουμε μια γραμμή, καθώς και δύο ορθογώνια και έναν κύκλο. Το αποτέλεσμα είναι προφανές:

Προφανώς όλα λειτουργούν καλά :)

Λοιπόν, αυτό ολοκληρώνεται για σήμερα, ευχαριστώ πολύ τον Mikhail για τη δουλειά που έκανε και για τα υλικά που παρέχονται. Ακολουθούν οι επαφές του συγγραφέα της βιβλιοθήκης:

Skype - Μισάντεσς

Ταχυδρομείο - [προστασία μέσω email]

Αυτό είναι όλο, σας ευχαριστώ για την προσοχή σας, τα λέμε σύντομα!

Γενικές πληροφορίες

Η πλακέτα ανάπτυξης STM32L-Discovery διαθέτει οθόνη υγρών κρυστάλλων (LCD, Αγγλική LCD. Οθόνη υγρών κρυστάλλων), η οποία έχει έξι χαρακτήρες 14 τμημάτων, 4 χαρακτήρες άνω και κάτω τελείας (Colon), 4 σημεία (DP), 4 λωρίδες (Bar). Όλα τα τμήματα ομαδοποιούνται σε ομάδες COM0, COM1, COM2, COM3 με 24 τμήματα. Κάθε ομάδα έχει το δικό της ξεχωριστό "κοινό καλώδιο".


Ο πίνακας εντοπισμού σφαλμάτων διαθέτει έναν μικροελεγκτή STM32L152RBT6. Ο μικροελεγκτής διαθέτει ενσωματωμένο ελεγκτή LCD που ελέγχει μονόχρωμες οθόνες LCD.
Ελεγκτής LCD:

  1. Σας επιτρέπει να ρυθμίσετε τον ρυθμό ανανέωσης (ρυθμός καρέ - τη συχνότητα με την οποία οι πληροφορίες ενημερώνονται στην οθόνη LCD)
  2. Υποστηρίζει λειτουργία στατικού και πολλαπλού ελέγχου
  3. Υποστηρίζει ρύθμιση αντίθεσης λογισμικού
  4. Επιτρέπει τη χρήση πολλών επιπέδων τάσης ελέγχου (έως τέσσερα)
  5. Χρησιμοποιεί διπλό buffering, επιτρέποντας την ενημέρωση των δεδομένων στους καταχωρητές LCD_RAM ​​ανά πάσα στιγμή κατά την εκτέλεση του προγράμματος, χωρίς να παραβιάζεται η ακεραιότητα των πληροφοριών που εμφανίζονται

Καταχωρητές μνήμης ελεγκτή LCD

Στον μικροελεγκτή STM32L152RB, εκχωρούνται ειδικοί καταχωρητές LCD_RAM, οι αποθηκευμένες πληροφορίες στις οποίες αντιστοιχεί στην ομάδα τμημάτων COM0 - COM3. Κάθε ομάδα αντιστοιχεί σε δύο καταχωρητές 32-bit. Αυτός ο αριθμός καταχωρητών επιτρέπει στον μικροελεγκτή να ελέγχει την οθόνη LCD με περισσότερα τμήματα από αυτά που είναι εγκατεστημένα στον πίνακα ανάπτυξης.

Για τον έλεγχο της οθόνης LCD με 176 τμήματα, χρησιμοποιούνται 4 ομάδες COM0 - COM3, 44 τμήματα το καθένα, για τον έλεγχο της οθόνης LCD με 320 τμήματα, 8 ομάδες COM0 - COM7, 40 τμήματα το καθένα.



Η πλακέτα ανάπτυξης STM32L-Discovery χρησιμοποιεί μια οθόνη LCD με 96 τμήματα, χωρισμένα σε 4 ομάδες COM0 - COM3, 24 τμήματα το καθένα.


Η οθόνη LCD στην πλακέτα εντοπισμού σφαλμάτων STM32L-Discovery συνδέεται με τέτοιο τρόπο ώστε τα S40, S41 bits των δεύτερων καταχωρητών LCD_RAM ​​σε κάθε ομάδα και τα bit S0-S27 των πρώτων καταχωρητών LCD_RAM. Για να μειωθεί ο αριθμός των καταχωρητών που χρησιμοποιούνται, οι πληροφορίες από τα bits S40-S43 θα γραφτούν σε ελεύθερα bits S28-S31 χρησιμοποιώντας τη λειτουργία αναδιατύπωσης.

Μπλοκ διαχωριστή συχνότητας

Η γεννήτρια συχνότητας σάς επιτρέπει να επιτυγχάνετε διαφορετικούς ρυθμούς καρέ στην οθόνη LCD από 32 kHz έως 1 MHz. Τα ακόλουθα μπορούν να χρησιμοποιηθούν ως πηγή ρολογιού:
  1. Εξωτερική γεννήτρια LF με συχνότητα 32 kHz (LSE. Εξωτερική χαμηλή ταχύτητα)
  2. Εσωτερική γεννήτρια χαμηλής συχνότητας με συχνότητα 37 kHz (LSI. Εσωτερική χαμηλή ταχύτητα)
  3. Εξωτερική γεννήτρια RF με διαχωριστικά συχνότητας 2,4,8 και 16 και μέγιστη συχνότητα 1 MHz. (HSE. Εξωτερικό υψηλής ταχύτητας)
Για την επίτευξη ακριβούς χρονισμού και τη μείωση της μετατόπισης DC στα τμήματα LCD, η πηγή ρολογιού πρέπει να είναι σταθερή. Το σήμα ρολογιού LCDCLK πηγαίνει στον ελεγκτή LCD. Η συχνότητα σήματος ρολογιού διαιρείται σύμφωνα με τους παράγοντες διαίρεσης, οι οποίοι ορίζονται από τα PS, DIV bits του LCD_FCR (Frame Control Register). Η προκύπτουσα συχνότητα στην έξοδο της μονάδας διαχωριστή συχνότητας υπολογίζεται με τον τύπο:

F ck_div = F LCDCLK / (2 PS * (16 + DIV))

Ο ρυθμός καρέ υπολογίζεται χρησιμοποιώντας τον τύπο:

F Frame = f ck_div * καθήκον

Όπου η εργασία είναι ο κύκλος λειτουργίας - η αναλογία της διάρκειας παλμού προς την περίοδο. Κατά τη διάρκεια ενός πλαισίου, η οθόνη LCD εμφανίζει διαδοχικά πληροφορίες από τους καταχωρητές LCD_RAM ​​[x], LCD_RAM ​​κ.λπ. Για την οθόνη LCD που είναι εγκατεστημένη στην πλακέτα ανάπτυξης, ο ελεγκτής LCD πρέπει να εμφανίζει πληροφορίες από 4 ομάδες τμημάτων COM0 - COM3 σε ένα πλαίσιο, επομένως, η διάρκεια του παλμού ελέγχου για μία ομάδα θα είναι το 1/4 της διάρκειας του καρέ, δηλ. καθήκον = 1/4.

Έλεγχος LCD

Υπάρχουν δύο τρόποι για να ελέγξετε την οθόνη LCD - λειτουργία στατικού ελέγχου και λειτουργία πολλαπλών ελέγχων. Με στατική ένδειξη, κάθε τμήμα της εκφόρτισης του δείκτη συνδέεται με την έξοδο του μικροελεγκτή. Όσον αφορά την οθόνη LCD, στον πίνακα ανάπτυξης STM32LDiscovery, απαιτούνται 6 * 14 = 84 ακροδέκτες μικροελεγκτή (εξαιρουμένων των τελών, των κουκκίδων και των λωρίδων). Λόγω της χρήσης τόσων ακίδων, η σύνδεση άλλων περιφερειακών θα είναι αδύνατη. Ο μικροελεγκτής STM32L152RB έχει 64 ακίδες. Στη λειτουργία πολλαπλού ελέγχου (λειτουργία δυναμικού ελέγχου), τα ίδια τμήματα των ψηφίων της ένδειξης συνδυάζονται σε ομάδες. Οι πληροφορίες εμφανίζονται λόγω της εναλλακτικής ανάφλεξης των τμημάτων των εκκενώσεων του δείκτη, με συχνότητα που δεν γίνεται αντιληπτή από το ανθρώπινο μάτι.

Ο έλεγχος πολλαπλών επιλογών σάς επιτρέπει να ελέγχετε μεγάλο αριθμό τμημάτων. Αντί να ελέγχουν κάθε στοιχείο ξεχωριστά, μπορούν να αντιμετωπιστούν κατά σειρά και στήλη (COM και SEG), απλοποιώντας έτσι το σχήμα ελέγχου επειδή κάθε τμήμα δεν χρειάζεται τη δική του γραμμή ελέγχου. Για να ενεργοποιήσετε το επιλεγμένο τμήμα, πρέπει να εφαρμοστεί η διαφορά δυναμικού COM και SEG. Ένα παράδειγμα του τρόπου λειτουργίας του πρώτου ψηφίου της ένδειξης (η ένδειξη εμφανίζει "1:"):


Το πρώτο ψηφίο του δείκτη τη στιγμή t 0


Το πρώτο ψηφίο του δείκτη τη στιγμή t 1


Το πρώτο ψηφίο του δείκτη τη στιγμή t 2


Γενικό διάγραμμα σύνδεσης τμήματος με καρφίτσες LCD


Διάγραμμα σύνδεσης ακίδων LCD σε θύρες μικροελεγκτή

Για τις γραμμές SEG, χρησιμοποιείται τάση ελέγχου, ο αριθμός των οποίων καθορίζεται από τον συντελεστή πόλωσης. Η οθόνη LCD στην πλακέτα ανάπτυξης χρησιμοποιεί λειτουργία πολλαπλού ελέγχου με λειτουργία = 1/4 και μεροληψία = 1/3. Η λειτουργία και η προκατάληψη ρυθμίζονται μέσω του LCD_CR (Control Register) στα bit DUTY και BIAS.

Πρακτική

Διαμόρφωση θυρών μικροελεγκτή

Για τον έλεγχο της οθόνης LCD, οι θύρες μικροελεγκτή πρέπει να ρυθμιστούν ανάλογα:
  1. Στην έξοδο
  2. Χρήση της εναλλακτικής λειτουργίας AF 11 (Εναλλακτική λειτουργία)
  3. Έχετε συχνότητα εξόδου 400 kHz
  4. Χρησιμοποιήστε τον τρόπο λειτουργίας push-pull
  5. Χωρίς αντιστάσεις έλξης
Όταν η θύρα βρίσκεται σε εναλλακτική λειτουργία, το buffer εξόδου δεδομένων της θύρας οδηγείται από σήματα από το περιφερειακό. Το αρχείο κεφαλίδας stm32lxx.h της βιβλιοθήκης CMSIS περιέχει μια περιγραφή όλων των περιφερειακών καταχωρητών, καθώς και τη δομή της πρόσβασης σε αυτά.

Οι ακίδες LCD συνδέονται στις θύρες GPIOA (PA1-PA3, PA8-PA10, PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3, PC6-PC11) του μικροελεγκτή. Για να λειτουργήσει η οθόνη LCD, πρέπει να σταλεί σήμα ρολογιού στις επιλεγμένες θύρες. Το ρολόι των θυρών GPIO του μικροελεγκτή προέρχεται από το διαύλου AHB του συστήματος RCC (Reset and Clock Control) - ένα σύστημα ρολογιού και επαναφοράς. Το σήμα ρολογιού παρέχεται ρυθμίζοντας τα αντίστοιχα bits στον καταχωρητή RCC_AHBENR (AHB περιφερειακός καταχωρητής ενεργοποίησης ρολογιού).

Εγγραφή RCC_AHBENR (η εικόνα δείχνει τα πρώτα 15 bit)

Για τις θύρες GPIOA, GPIOB, GPIOC, ορίστε 1 έως 0, 1, 2 bit καταχωρητή.

Στη συνέχεια, θα δώσω τον κωδικό για τη σύνταξη πληροφοριών στο μητρώο χρησιμοποιώντας ένα bitmask και χρησιμοποιώντας δεκαεξαδικούς κωδικούς. Η χρήση bitmasks είναι πιο βολική, αλλά η εργασία με δεκαεξαδικούς κωδικούς σάς επιτρέπει να κατανοήσετε την ουσία της εργασίας με καταχωρητές.

RCC-> AHBENR | = (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN); ή RCC-> AHBENR = 0x7; / * 0x7 = 111 * /

Για τον καθορισμό των τρόπων λειτουργίας θύρας, χρησιμοποιείται ο καταχωρητής GPIOx_MODER (καταχωρητής τρόπου θύρας GPIO) (x = A..H). Όλα τα bit εγγραφής ομαδοποιούνται σε ομάδες MODERy, όπου y είναι ο αριθμός pin της αντίστοιχης θύρας. Οι θύρες πρέπει να διαμορφωθούν για την εναλλακτική λειτουργία λειτουργίας, δηλαδή στην ομάδα που είναι υπεύθυνη για τον πείρο, ορίστε την τιμή 10. Για τη θύρα GPIOA, πρέπει να διαμορφώσετε τους πείρους 1-3,8-10,15, δηλαδή, ορίστε 1 σε 3,5,7,17,19,21 , 31 bits.


Μητρώο GPIOx_MODER (μητρώο λειτουργίας θύρας GPIO)

GPIOA-> MODER | = (GPIO_MODER_MODER1_1 | GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1 | GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1 | GPIO_MODER_MODER_10_1 | GPIO_MODER_MODER_MODER_1 | ή GPIOA-> MODER = 0x802A00A8; / * 0x802A00A8 = 1000 0000 0010 1010 0000 0000 1010 1000 * /
Οι θύρες μικροελεγκτή πρέπει να τεθούν σε λειτουργία push-pull. Για να το κάνετε αυτό, ορίστε 1 στον καταχωρητή GPIOx_OTYPER (καταχωρητής τύπου εξόδου θύρας GPIO) στα bit που είναι υπεύθυνα για τις ακίδες.


Μητρώο GPIOx_OTYPER (καταχωρητής τύπου εξόδου θύρας GPIO)

GPIOA-> OTYPER & = ~ (GPIO_OTYPER_OT_1 | GPIO_OTYPER_OT_2 | GPIO_OTYPER_OT_3 | GPIO_OTYPER_OT_8 | GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT_15); ή GPIOA-> OTYPER & = ~ 0x0000870E; / * 0x870E = 1000 0111 0000 1110 * /
Και οι δύο επιλογές επηρεάζουν τις επιλεγμένες καρφίτσες. (Για τη θύρα GPIOA, οι ακίδες 1-3.8-10.15 έχουν διαμορφωθεί). Εάν πρέπει να μεταφέρετε όλες τις ακίδες της θύρας στη λειτουργία push-pull, μπορείτε να γράψετε την τιμή στο μητρώο:
GPIOA-> OTYPER = 0x0;
Για να υποδείξετε τη συχνότητα εξόδου πληροφοριών στη θύρα, χρησιμοποιείται ο καταχωρητής GPIOx_OSPEEDR (καταχωρητής ταχύτητας εξόδου θύρας GPIO). Όλα τα bit εγγραφής ομαδοποιούνται σε ομάδες OSPEEDRy, όπου y είναι ο αριθμός pin της αντίστοιχης θύρας. Σε αυτήν την εργασία, η συχνότητα πρέπει να οριστεί στα 400 kHz, δηλ. στην ομάδα που είναι υπεύθυνη για τον πείρο, ορίστε την τιμή 00.


Εγγραφή GPIOx_OSPEEDR (καταχωρητής ταχύτητας εξόδου θύρας GPIO)

GPIOA-> OSPEEDR & = ~ (GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDPEDRE | GPIO_OSPEEDER_OSPEEDED_OSPEEDED_OSPEEDED_PEPEEDED_PEPEEDED_PEPEEDED_PEPEEDED_PEPEEDED_PEDEDED ή GPIOA-> OSPEEDR & = ~ 0xC03F00FC; / * 0xC03F00FC = 1100 0000 0011 1111 0000 0000 1111 1100 * /
Εάν πρέπει να ορίσετε τη συχνότητα εξόδου στα 400 kHz για όλες τις ακίδες, μπορείτε να γράψετε την τιμή στο μητρώο:
GPIOA-> OSPEEDR = 0x0;
Για να απενεργοποιήσετε την αντίσταση pull-up και pull-down για επιλεγμένους πείρους, χρησιμοποιήστε τον καταχωρητή GPIOx_PUPDR (καταχωρητής θύρας GPIO / pull-down). Όλα τα bit εγγραφής ομαδοποιούνται σε ομάδες PUPDRy, όπου y είναι ο αριθμός pin της αντίστοιχης θύρας. Για να απενεργοποιήσετε τις αντιστάσεις pull-up στην ομάδα που είναι υπεύθυνη για τον πείρο, η τιμή ορίζεται σε 00.


Μητρώο GPIOx_PUPDR (μητρώο pull-up / pull-down θύρας GPIO)

GPIOA-> PUPDR & = ~ (GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR15); ή GPIOA-> PUPDR & = ~ 0xC03F00FC; / * 0xC03F00FC = 1100 0000 0011 1111 0000 0000 1111 1100 * /
Εάν πρέπει να απενεργοποιήσετε τις αντιστάσεις pull-up για όλες τις ακίδες, μπορείτε να γράψετε την τιμή στο μητρώο:
GPIOA-> PUPDR = 0x0;
Για να χρησιμοποιήσετε μια εναλλακτική λειτουργία για τις θύρες μικροελεγκτή, χρησιμοποιούνται δύο καταχωρητές GPIOx_AFRL (GPIO εναλλακτικής λειτουργίας χαμηλού καταχωρητή), οι οποίοι είναι υπεύθυνοι για τις κάτω ακίδες (από 0 έως 7) και GPIOx_AFRH (GPIO εναλλακτικής λειτουργίας υψηλού καταχωρητή), η οποία είναι υπεύθυνη για οι υψηλότερες ακίδες (από 8 έως 15). Όλα τα bit εγγραφής ομαδοποιούνται σε ομάδες AFRLy και AFRHy, όπου y είναι ο αριθμός pin της αντίστοιχης θύρας. Οι θύρες πρέπει να ρυθμιστούν ώστε να χρησιμοποιούν την εναλλακτική λειτουργία AF11, για αυτό, η τιμή 1011 πρέπει να οριστεί στην ομάδα που είναι υπεύθυνη για τον πείρο.


Εγγραφή GPIOx_AFRL (χαμηλή εγγραφή εναλλακτικής λειτουργίας GPIO)


Εγγραφή GPIOx_AFRH (GPIO εναλλακτική λειτουργία υψηλής εγγραφής)

Για να το κάνετε αυτό, πρέπει να γράψετε τις τιμές στους καταχωρητές:
GPIOA-> AFR = 0xBBB0; / * 0xBBB0 = 1011 1011 1011 0000 * / GPIOA-> AFR = 0xB0000BBB; / * 0xB0000BBB = 1011 0000 0000 0000 0000 1011 1011 1011 * /

AFR = 0xBBB0 - γράφει μια τιμή στο μητρώο GPIOx_AFRL.
AFR = 0xB0000BBB - γράφει μια τιμή στον καταχωρητή GPIOx_AFRH.

Οι ρυθμίσεις των αντίστοιχων ακίδων των GPIOB, GPIOC λιμένων γίνονται με τον ίδιο τρόπο.

Ρύθμιση ελεγκτή LCD

Όταν εργάζεστε με έναν ελεγκτή LCD, καθώς και με άλλα περιφερειακά, πρέπει να εφαρμόζεται σήμα ρολογιού. Το σήμα ρολογιού τροφοδοτείται επίσης στο σύστημα διαχείρισης ισχύος. Ο ελεγκτής και το σύστημα διαχείρισης ισχύος χρησιμοποιούν το δίαυλο APB1 για χρονισμό. Για να ενεργοποιήσετε το ρολόι στον καταχωρητή RCC_APB1ENR (APB1 περιφερειακός καταχωρητής ενεργοποίησης ρολογιού), πρέπει να ορίσετε 1 στα 9 και 28 bit.


Μητρώο RCC_APB1ENR (APB1 περιφερειακό ρολόι ενεργοποίησης καταχωρητή)

RCC-> APB1ENR | = RCC_APB1ENR_PWREN | RCC_APB1ENR_LCDEN; ή RCC-> APB1ENR | = 0x10000200; / * 0x10000200 = 1 0000 0000 0000 0000 0010 0000 0000 * /
Για να λειτουργεί ο ελεγκτής LCD, είναι απαραίτητο να καθορίσετε την πηγή των σημάτων ρολογιού. Η πηγή αναφέρεται στο μητρώο RCC_CSR. Από προεπιλογή, απαγορεύεται η εγγραφή σε αυτό το μητρώο. Ο καταχωρητής ελέγχου ισχύος PWR δεν προστατεύεται για εγγραφή στον καταχωρητή RCC_CSR. Ο καταχωρητής RCC_CSR ελέγχει τις πηγές ρολογιού για τον ελεγκτή RTC και LCD
Η εγγραφή στον καταχωρητή RCC_CSR επιτρέπεται ρυθμίζοντας το 1 έως το bit 8 του μητρώου PWR_CR.


Εγγραφή PWR_CR (PWR power control register)

PWR-> CR | = PWR_CR_DBP; ή PWR-> CR | = 0x100; / * 0x100 = 1 0000 0000 * /
Για να αλλάξετε την πηγή ρολογιού του ελεγκτή LCD (και το ρολόι RTC), πρέπει πρώτα να επαναφέρετε την πηγή ρολογιού ρυθμίζοντας το bit RTCRST (ρύθμιση 1 έως 23 bit) στον καταχωρητή RCC_CSR (Μητρώο ελέγχου / κατάστασης).


Εγγραφή RCC_CSR (Έλεγχος / μητρώο κατάστασης)

RCC-> CSR | = RCC_CSR_RTCRST;
Ή γράφοντας μια τιμή σε ένα μητρώο χρησιμοποιώντας τον τελεστή "| =", από τότε τιμή κατά
ο προεπιλεγμένος καταχωρητής δεν είναι 0x0:
RCC-> CSR | = 0x800000; / * 0x800000 = 1000 0000 0000 0000 0000 0000 * /
Για να επιλέξετε μια νέα πηγή ρολογιού, διαγράψτε το bit RTCRST:
RCC-> CSR & = ~ RCC_CSR_RTCRST; ή RCC-> CSR & = ~ 0x800000;
Μια εξωτερική γεννήτρια LF επιλέγεται ως πηγή ρολογιού. Για να ενεργοποιήσετε τη γεννήτρια, το bit LSEON πρέπει να ρυθμιστεί στον καταχωρητή RCC_CSR (σύνολο 1 έως 8 bit):
RCC-> CSR | = RCC_CSR_LSEON; ή RCC-> CSR | = 0x100; / * 0x100 = 1 0000 0000 * /
Μετά την ενεργοποίηση της γεννήτριας, χρειάζεται αρκετός χρόνος για να σταθεροποιηθεί. Η ετοιμότητα της γεννήτριας ελέγχεται από τη ρύθμιση υλικού του bit LSERDY στον καταχωρητή RCC_CSR:
ενώ (! (RCC-> CSR & RCC_CSR_LSERDY));
Η επιλογή μιας εξωτερικής γεννήτριας LF ως πηγή σήματος ρολογιού πραγματοποιείται καθορίζοντας την τιμή 01 στην ομάδα RTCSEL του μητρώου RCC_CSR:
RCC-> CSR | = RCC_CSR_RTCSEL_LSE; ή RCC-> CSR | = 0x10000; / * 0x10000 = 01 0000 0000 0000 0000 * /
Ρυθμίστε την απαιτούμενη κατάσταση προκατάληψης στον ελεγκτή LCD. Για να το κάνετε αυτό, ορίστε την τιμή 10 στην ομάδα BIAS στον καταχωρητή LCD_CR (καταχωρητής ελέγχου LCD). Πριν ρυθμίσετε τα κομμάτια, είναι απαραίτητο να καθαρίσετε τα κομμάτια από "σκουπίδια".


Εγγραφή LCD_CR (μητρώο ελέγχου LCD)

Εκκαθάριση bit:
LCD-> CR & = ~ LCD_CR_BIAS; ή LCD-> CR & = ~ 0x60;
Επιλογή λειτουργίας προκατάληψης = 1/3 χρησιμοποιώντας bitmask:
LCD-> CR | = LCD_CR_BIAS_1; ή LCD-> CR | = 0x40;
Ρυθμίζουμε τη λειτουργία λειτουργίας = 1/4. Για να το κάνουμε αυτό, καθαρίζουμε επίσης πρώτα όλα τα bits:
LCD-> CR & = ~ LCD_CR_DUTY; ή LCD-> CR & = ~ 0x1C;
Ορίστε την τιμή 011 στην ομάδα DUTY του καταχωρητή LCD_CR για
λειτουργία λειτουργίας = 1/4:
LCD-> CR | = LCD_CR_DUTY_0 | LCD_CR_DUTY_1; ή LCD-> CR | = 0xС;
Ενεργοποιούμε τη λειτουργία της εκ νέου αντιστοίχισης καρφιτσών. Για να το κάνετε αυτό, ορίστε 1 έως 7 bit του καταχωρητή LCD_CR:
LCD-> CR | = LCD_CR_MUX_SEG; ή LCD-> CR | = 0x80;
Ορίστε τις αναλογίες διαίρεσης συχνότητας ρολογιού LCDCLK. Οι τιμές των συντελεστών ορίζονται στον καταχωρητή LCD_FCR (καταχωρητής ελέγχου πλαισίου LCD). Πρώτον, διαγράφουμε επίσης όλα τα bits και μετά ρυθμίζουμε τα απαραίτητα.


Εγγραφή LCD_FCR (μητρώο ελέγχου πλαισίου LCD)

LCD-> FCR & = ~ LCD_FCR_PS; LCD-> FCR & = ~ LCD_FCR_DIV; ή LCD-> FCR & = ~ 0x3C00000; LCD-> FCR & = ~ 0x3C0000;
Οι τιμές των παραγόντων διαίρεσης της συχνότητας σήματος ρολογιού ορίζονται ίσες με ck_ps = LCDCLK / 16, ck_div = ck_ps / 17. Για να το κάνετε αυτό, ορίστε 1 έως 24 και 18 bits:
LCD-> FCR | = 0x1040000; / * 0x1040000 = 1 0000 0100 0000 0000 0000 0000 * /
Για να ορίσετε το επιθυμητό επίπεδο αντίθεσης, πρέπει να ορίσετε την τιμή 010 στην ομάδα CC, έχοντας επίσης διαγράψει προηγουμένως τα bits από τις παλιές τιμές:
LCD-> FCR & = ~ LCD_FCR_CC; LCD-> FCR | = LCD_FCR_CC_1; ή LCD-> FCR & = ~ 0x1C00; LCD-> FCR | = 0x800; / * 0x800 = 1000 0000 0000 * /
Αφού ορίσετε όλες τις τιμές, απαιτείται χρόνος για να συγχρονίσετε τον καταχωρητή LCD_FCR. Ο συγχρονισμός μητρώου επιβεβαιώνεται από τη ρύθμιση υλικού του bit FCRSF στον καταχωρητή LCD_SR (καταχωρητής κατάστασης LCD).

Εγγραφή LCD_SR (Μητρώο κατάστασης LCD)

Ενώ (! (LCD-> SR & LCD_SR_FCRSR));
Ως πηγή τάσης για την οθόνη LCD, επιλέγουμε έναν εσωτερικό μετατροπέα ενίσχυσης για παραγωγή V lcd. Για να γίνει αυτό, το πρώτο bit του καταχωρητή LCD_CR (LCD control register) έχει οριστεί σε 0:
LCD-> CR & = ~ LCD_CR_VSEL; ή LCD-> CR & = ~ 0x2;
Ο ελεγκτής LCD ενεργοποιείται ρυθμίζοντας 1 έως 0 bit του καταχωρητή LCD_CR (καταχωρητής ελέγχου LCD):
LCD-> CR | = LCD_CR_LCDEN; ή LCD-> CR | = 0x1;
Αφού εγκαταστήσετε τον εσωτερικό μετατροπέα ενίσχυσης ως πηγή τάσης, πρέπει να περιμένετε μέχρι να είναι έτοιμος. Η ετοιμότητα ελέγχεται από τη ρύθμιση υλικού του bit RDY στον καταχωρητή LCD_SR (καταχωρητής κατάστασης LCD):
ενώ (! (LCD-> SR & LCD_SR_RDY));
Αφού αφήσετε τον ελεγκτή LCD να λειτουργήσει, πρέπει να περιμένετε μέχρι να είναι έτοιμος. Η ετοιμότητα ελέγχεται από τη ρύθμιση υλικού του bit ENS στον καταχωρητή LCD_SR (καταχωρητής κατάστασης LCD):
ενώ (! (LCD-> SR & LCD_SR_ENS));

Διαμόρφωση εικόνας LCD

Όλα τα τμήματα του δείκτη συνδυάζονται σε ομάδες COM0 - COM3, 24 τμήματα το καθένα (SEG0-SEG23). Οι πληροφορίες τμήματος αποθηκεύονται στους καταχωρητές LCD_RAM ​​της μνήμης ελεγκτή LCD. Η διάταξη PCB είναι τέτοια ώστε οι αριθμοί τμημάτων να μην ταιριάζουν με τους αριθμούς bit των καταχωρητών LCD_RAM.

Για να εμφανιστεί το 1 στο πρώτο ψηφίο της οθόνης LCD, τα τμήματα 1B, 1C πρέπει να ανάβουν. Το τμήμα 1B ανήκει στην ομάδα COM0, το τμήμα 1C ανήκει στην ομάδα COM1. Επομένως, οι πληροφορίες σχετικά με αυτά πρέπει να γραφτούν στους καταχωρητές RAM (LCD_RAM0), RAM (LCD_RAM2), αντίστοιχα. Για το τμήμα 1Β, η έξοδος LCDSEG22 είναι υπεύθυνη, πληροφορίες για τις οποίες αποθηκεύονται στο SEG40 bit του μητρώου RAM (LCD_RAM1). Χρησιμοποιώντας τη λειτουργία αναδιατύπωσης, το SEG28 bit του μητρώου RAM (LCD_RAM0) θα είναι υπεύθυνο για το τμήμα LCDSEG22. Για το τμήμα 1C, η έξοδος LCDSEG1 είναι υπεύθυνη, πληροφορίες για τις οποίες αποθηκεύονται στο SEG1 bit του μητρώου RAM (LCD_RAM2).

LCD-> RAM = 0x10000000; / * 0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 * / LCD-> RAM = 0x2; / * 0x2 = 10 * /
Πριν γράψετε τις τιμές στους καταχωρητές μνήμης, είναι απαραίτητο να ελέγξετε εάν η προηγούμενη μεταφορά δεδομένων στην οθόνη LCD έχει ολοκληρωθεί. Για αυτό, είναι επιλεγμένο το UDR (Update display request) του LCD_SR (LCD status register). Ο ελεγκτής LCD έχει δύο buffer εξόδου, οι πληροφορίες εισάγονται στο πρώτο buffer και εμφανίζονται στην LCD από το δεύτερο buffer. Το bit UDR ρυθμίζεται κατά τη μεταφορά από το πρώτο buffer στο δεύτερο, προστατεύοντας τους καταχωρητές LCD_RAM ​​από την εγγραφή:
ενώ (LCD-> SR & LCD_SR_UDR);
Αφού γράψετε πληροφορίες στους καταχωρητές LCD_RAM, πρέπει να ορίσετε το bit UDR στον καταχωρητή LCD_SR (καταχωρητής κατάστασης LCD) (σύνολο 1 έως 2):
LCD-> SR | = LCD_SR_UDR; ή LCD-> SR | = 0x4; / * 0x4 = 100 * /

Συχνά ο χρήστης πρέπει να λαμβάνει κάποιες οπτικές πληροφορίες από μια ηλεκτρονική συσκευή. Εάν οι πληροφορίες μπορούν να παρουσιαστούν σε συμβολική μορφή, τότε μία από τις επιλογές για την εμφάνισή της είναι η χρήση συμβολικών ενδεικτικών υγρών κρυστάλλων (LCD ή LCD σε ξένη ονομασία). Σήμερα θα μιλήσουμε για συμβολικούς δείκτες που εφαρμόζονται βάσει ελεγκτών. Χιτάτσι HD44780, Samsung KS 0066και παρόμοια.

Για παράδειγμα, θα εξετάσω το LCD Winstar Wh1602D-TMI-CT #που έχω για τα πειράματά μου. Έχω ήδη αναφέρει αυτό το LCD στο άρθρο, τις γραφικές εξελίξεις των οποίων θα χρησιμοποιήσω σήμερα.

Λεπτομερής φύλλο δεδομένωνπρος την LCD WINSTAR WH1602D-TMI-CT:

Κατηγορία: Εγγραφα
Ημερομηνία: 22.03.2015

Ένα απλοποιημένο διάγραμμα της οθόνης LCD μπορεί να αναπαρασταθεί ως εξής:

Η βάση του δείκτη είναι μια μήτρα υγρών κρυστάλλων, με τάση στο στοιχείο της οποίας, μπορούμε να παρατηρήσουμε ένα σημείο στην οθόνη. Στην οθόνη LCD χαρακτήρων, αυτός ο πίνακας αποτελείται από έναν ορισμένο αριθμό περιοχών εξοικείωσης, οι οποίες ομαδοποιούνται κατά σειρές και στήλες. Το μέγεθος της εξοικείωσης σε εικονοστοιχεία είναι συχνά 5 × 8 εικονοστοιχεία. Η σήμανση του δείκτη μου περιέχει αριθμούς 1602, πράγμα που σημαίνει ότι η ένδειξή μου μπορεί να εμφανίζει 2 γραμμές 16 χαρακτήρων η καθεμία. Επίσης, η κωδικοποίηση περιλαμβάνει: τον κωδικό κατασκευαστή και τον τύπο της ένδειξης, την παρουσία οπίσθιου φωτισμού, το χρώμα, τον πίνακα κωδικών και ούτω καθεξής.

Σύστημα ονομασίας δείκτη WINSTAR

Εμφάνιση / απόκρυψη επεξήγησης συμβόλων

1. Κωδικός κατασκευαστή: WINSTAR DISPLAY CO, LTD

2. Τύπος δείκτη:

  • Η- συμβολική (συμβολική σύνθεση)
  • ντο- χρώμα γραφικών με παθητική μήτρα CSTN (ColorSTN)
  • Χ- γραφικό με μήτρα ΑΥΤΙ (Αυτόματη συγκόλληση ταινίας- ο κρύσταλλος είναι τοποθετημένος σε ταινία τριών στρωμάτων πολυαμιδίου υποστρώματος)
  • Ο- γραφικό με μήτρα ΔΟΝΤΙ ΤΡΟΧΟΥ (Τσιπ στο γυαλί- κρύσταλλο σε γυαλί)

3. Οριζόντια ανάλυση:

  • αριθμός χαρακτήρων ανά γραμμή για δείκτες τύπων χαρακτήρων
  • αριθμός οριζόντιων κουκίδων για δείκτες γραφικού τύπου

4. Κάθετη ανάλυση:

  • αριθμός γραμμών για δείκτες τύπων χαρακτήρων
  • αριθμός κάθετων κουκκίδων για γραφικούς δείκτες

5. Κωδικός μοντέλου

  • Κωδικοποιεί γεωμετρικές διαστάσεις που χρησιμοποιούνται από τον ελεγκτή

6. Τύπος οπίσθιου φωτισμού:

  • Ν- χωρίς οπίσθιο φωτισμό
  • σι- ηλεκτροφωταύγεια, χρώμα λάμψης - μπλε
  • ρε- ηλεκτροφωταύγεια, λάμψη - πράσινο
  • Δ- ηλεκτροφωταύγεια, λάμψη - λευκό
  • Γ- LED, χρώμα λάμψης - κίτρινο-πράσινο
  • ΕΝΑ- LED, ανοιχτό χρώμα - πορτοκαλί
  • Ρ- LED, χρώμα λάμψης - κόκκινο
  • σολ- LED, χρώμα λάμψης - πράσινο
  • Τ- LED, χρώμα λάμψης - λευκό
  • Π- LED, χρώμα λάμψης - μπλε
  • φά- λαμπτήρας ψυχρής καθόδου (CCFL), χρώμα λάμψης - λευκό

7. Τεχνολογία κατασκευής LCD

  • σι- TN γκρι, θετικό
  • Ν- TN, αρνητικό
  • σολ- STN γκρι, θετικό
  • Γ- STN κίτρινο-πράσινο, θετικό
  • Μ- STN μπλε, αρνητικό
  • φά- FSTN θετικό
  • Τ- FSTN αρνητικό
  • Η- HTN γκρι, θετικό
  • Εγώ- HTN μαύρο, αρνητικό
  • ΤΝ (Twisted Nematic) -η κρυσταλλική δομή έχει σπειροειδή τύπο
  • STN (Σούπερ στριμμένο αριθμητικό) - matrix που αποτελείται από στοιχεία LCD με μεταβλητή διαφάνεια
  • FSTN (Αντιστάθμιση φιλμ STN) — STN-matrix με αντιστάθμιση φιλμ. Η τεχνολογία σάς επιτρέπει να έχετε αυξημένη γωνία θέασης
  • HTN (Ομοτροπικά στριμμένα νηματικά) - οι οθόνες βασίζονται σε μια ισχυρότερη μοριακή συστροφή (συνήθως 110 °) σε σύγκριση με τα συμβατικά μαθηματικά συστροφής TN (90 °). Παρέχει ευρεία γωνία θέασης και βελτιωμένη αντίθεση. Υπερβαίνει τις τεχνολογίες STN όσον αφορά τα χαρακτηριστικά. Η χαμηλή τάση λειτουργίας (2,5V και το χαμηλότερο κόστος μεταξύ των μαθηματικών τα καθιστούν πλεονεκτικά σε φορητές αυτόνομες συσκευές).

8. Πολωτήρας, γωνία θέασης, εύρος θερμοκρασίας εργασίας

  • ΕΝΑ- RF, 6:00, N.T.
  • ρε- RF, 12:00, N.T.
  • σολ- RF, 6:00, W.T.
  • Ι- RF, 12:00, W.T.
  • σι- TF, 6:00, N.T.
  • μι- TF, 12:00, N.T.
  • Η- TF, 6:00, W.T.
  • κ- TF, 12:00, W.T.
  • ντο- TM, 6:00, N.T.
  • φά- TM, 12:00, N.T.
  • Εγώ- TM, 6:00, W.T.
  • μεγάλο- TM, 12:00, W.T.
  • RF (Ανακλαστική LCD) - Ένδειξη LCD που λειτουργεί αποκλειστικά για την ανάκλαση του φωτός. Η εικόνα είναι ορατή μόνο όταν υπάρχει επαρκές φως περιβάλλοντος.
  • TF - (Διαφαινόμενο LCD) είναι μια οθόνη υγρών κρυστάλλων που αντανακλά τόσο το φως όσο και το εκπέμπει (ανάβει ανεξάρτητα).
  • TM (Μεταδοτικό οθόνη υγρού κρυστάλλου) - το φως εισέρχεται μέσω της οθόνης LCD από την πλευρά του οπίσθιου φωτισμού. Έχει υψηλή ποιότητα εικόνας σε εσωτερικούς χώρους και συνήθως είναι πολύ κακή (μαύρη οθόνη) στον ήλιο.
  • Ν.Τ.- κανονική περιοχή θερμοκρασίας 0 ... + 50 +C Ν.Τ.- εκτεταμένο εύρος θερμοκρασίας -20 ... + 70ºC

9. Πρόσθετες επιλογές

Οι δύο πρώτοι χαρακτήρες είναι η γεννήτρια χαρακτήρων:

  • CT/CP- Λατινικά / Κυριλλικά
  • ΕΡ/ΕΤ/ΕΕ/RU/EC/ES- Λατινικά / Ευρωπαϊκή
  • JP/JT/Js/JN- Λατινικά / Ιαπωνικά
  • ιπποδύναμη/Ω- Εβραϊκά

3-4 χαρακτήρες:

  • Τ- αντιστάθμιση θερμοκρασίας
  • μιή ΕΖ- άκρο BL (οι οπίσθιοι φωτισμοί LED βρίσκονται γύρω από την περίμετρο). Επίσης, το σύμβολο ενδέχεται να λείπει.
  • κή ΛΒ- eco BL (Οι λυχνίες LED απέχουν ομοιόμορφα πίσω από την οθόνη)
  • Β- ενσωματωμένη πηγή αρνητικής τάσης
  • Ν- χωρίς ενσωματωμένη πηγή αρνητικής τάσης

10. Πρόσθετες πληροφορίες:

# - συμβατότητα με το πρότυπο RoHS

Σημείωση(κατασκευαστής τσιπ ελεγκτή):

  • xS - Samsung
  • xP - Sunplus
  • xT - Sitronix
  • - Έψσον
  • xU - UMC

Χρησιμοποιώντας αυτό το σύστημα σημειογραφίας, ανακάλυψα ότι είχα στα χέρια μου έναν δείκτη σύνθεσης σημείων Γουίνσταρεμφάνιση χαρακτήρων σε 16 στήλες και 2 γραμμές χρησιμοποιώντας έναν ελεγκτή KS 0066 ή το αντίστοιχο του, με λευκό φωτισμό LED γύρω από την περίμετρο, με μπλε αρνητικό μεταβιβαστικός-matrix, γωνία θέασης "στις 6 η ώρα", εύρος θερμοκρασίας λειτουργίας -20 ... + 70ºC με γεννήτρια χαρακτήρων, συμπεριλαμβανομένου του κυριλλικού αλφαβήτου και συμβατό με το πρότυπο RoHS(δεν περιέχει συστατικά επιβλαβή για την υγεία, πράγμα που πιθανότατα σημαίνει ότι το συγκολλητικό χωρίς μόλυβδο χρησιμοποιήθηκε στο συγκρότημα).

Δείκτες με βάση τον ελεγκτή HD44780, KS066U

Ο ενσωματωμένος ελεγκτής ελέγχει τη λειτουργία του δείκτη. Ο ελεγκτής είναι συνήθως Hitachi HD44780, Samsung KS0066Uή τα πολυάριθμα ανάλογα και κλώνους τους. Οι δείκτες που παράγονται από τη ρωσική εταιρεία MELT χρησιμοποιούν έναν ελεγκτή PCF8576.

Ο ελεγκτής διαθέτει κελιά μνήμης ενός byte ( DDRAM), τα περιεχόμενα των οποίων στην πραγματικότητα εμφανίζονται στην οθόνη σύμφωνα με τον πίνακα που γράφτηκε CGRAM... Υπάρχουν συνήθως περισσότερα κελιά μνήμης από ό, τι οι χώροι εξοικείωσης στην οθόνη LCD, επομένως, πρέπει να εξεταστεί η αντιμετώπιση των οικείων χώρων φύλλο δεδομένων... Πρέπει να γράψουμε τον κωδικό του απαιτούμενου συμβόλου στην επιθυμητή θέση και ο ελεγκτής θα κάνει τα υπόλοιπα από μόνο του.

Για να επιλέξετε μια θέση, υπάρχει ένας εικονικός, ελεγχόμενος με εντολή δρομέας (ο αριθμός του τρέχοντος κελιού μνήμης, ΟΠΩΣ ΚΑΙ). Μπορεί να γίνει ορατό. Από προεπιλογή, κατά τη σύνταξη ενός χαρακτήρα σε ένα κελί, ο δρομέας κινείται προς τα εμπρός σε μια θέση.

Ο πίνακας κωδικών δεικτών αποτελείται συνήθως από τρία μέρη:

  • 0x00-0x07 - δυνατότητα λήψης χαρακτήρων με δυνατότητα λήψης, σύμβολα που δημιουργήσατε από εσάς
  • 0x20-0xFF - ASCII κωδικοποιεί τυπικό σύνολο χαρακτήρων και αγγλικό αλφάβητο
  • 0xA0-0xFF - σύμβολα εθνικών αλφαβήτων και άλλων, με παράλειψη συμβόλων που συμπίπτουν με στυλ με τα αγγλικά.

Εμφάνιση / απόκρυψη πίνακα κωδικών, με κυριλλικό

Παράδειγμα: Ο κωδικός Hex 0x4A αντιστοιχεί σε ένα γράμμα Ι, κωδικός 0xB6 - γράμμα φά.

Τα πιο σημαντικά τέσσερα bit ορίζουν τη στήλη του επιλεγμένου χαρακτήρα στον πίνακα, ενώ τα λιγότερο σημαντικά bit καθορίζουν τη σειρά. Μπορείτε να δημιουργήσετε τον δικό σας πίνακα συμβόλων γράφοντας τον CGRAM... Κάθε χαρακτήρας απαιτεί 5 byte (byte ανά στήλη). Οι μονάδες σε κάθε byte καθορίζουν τα σημαντικά pixel. Για παράδειγμα, για την κωδικοποίηση pixel με ψηφία pixel 8 χρειάζεστε την ακόλουθη ακολουθία: 0x6c, 0x92.0x92.0x92.0x6c.

Κυριλλικός μετατροπέας

Για να μετατρέψετε κείμενο που περιέχει κυριλλικούς χαρακτήρες σε κωδικούς που αντιστοιχούν στον παραπάνω πίνακα, εισαγάγετε το απαιτούμενο κείμενο στο πλαίσιο κειμένου. Το αποτέλεσμα που λαμβάνεται παρακάτω μπορεί να αντιγραφεί και να χρησιμοποιηθεί στα προγράμματά σας για την εμφάνιση αυτού του κειμένου στην οθόνη LCD.

Πρωτότυπο κείμενο:

Κωδικοποιημένο κείμενο:

Πίνακας κωδικών εντολών:

Δ7 Δ6 Δ5 Δ4 Δ3 Δ2 Δ1 Δ0 Ραντεβού
0 0 0 0 0 0 0 1 Καθαρισμός οθόνης, ΜΕΤΑ ΧΡΙΣΤΟΝ= 0, διευθυνσιοδότηση ΜΕΤΑ ΧΡΙΣΤΟΝστο DDRAM
0 0 0 0 0 0 1 ΜΕΤΑ ΧΡΙΣΤΟΝ= 0, απευθύνεται σε DDRAM, οι μετατοπίσεις διαγράφονται, η αρχή της γραμμής απευθύνεται στην αρχή DDRAM
0 0 0 0 0 1 Ι / ΔμικρόΕπιλέγει την κατεύθυνση για να μετακινήσετε τον κέρσορα ή την οθόνη
0 0 0 0 1 ρεντοσιΕπιλογή λειτουργίας προβολής
0 0 0 1 S / CΕ / ΛΕντολή δρομέα / αλλαγής οθόνης
0 0 1 DLΝφάΚαθορισμός παραμέτρων σάρωσης και πλάτους διαύλου δεδομένων
0 1 AC5AC4AC3AC2AC1AC0Εργασία σε μετρητή ΜΕΤΑ ΧΡΙΣΤΟΝδιευθύνσεις στην περιοχή CGRAM
1 AC6AC5AC4AC3AC2AC1AC0Εργασία σε μετρητή ΜΕΤΑ ΧΡΙΣΤΟΝδιευθύνσεις στην περιοχή DDRAM

Πίνακας τιμών επισήμανσης:

Σημαία αξία
Ι / ΔΛειτουργία αντιστάθμισης μετρητή AC, 0 - μείωση, 1 - αύξηση
μικρόΣημαία λειτουργίας αλλαγής περιεχομένου οθόνης. 0 - η οθόνη δεν μετατοπίζεται, 1 - μετά την εγγραφή του επόμενου κωδικού στο DDRAM, η οθόνη μετακινείται προς την κατεύθυνση που καθορίζεται από τη σημαία I / D: 0 - προς τα δεξιά, 1 - προς τα αριστερά. Η αλλαγή δεν αλλάζει το περιεχόμενο DDRAM. Μόνο οι εσωτερικοί δείκτες της θέσης της ορατής αρχής της γραμμής στο DDRAM αλλάζουν
S / CΜια σημαία εντολών που, μαζί με τη σημαία R / L, εκτελεί μια λειτουργία για τη μετατόπιση του περιεχομένου της οθόνης (όπως στην προηγούμενη περίπτωση, χωρίς αλλαγές στο DDRAM) ή του δρομέα. Ορίζει το αντικείμενο μετατόπισης: 0 - ο δρομέας μετατοπίζεται, 1 - η οθόνη μετατοπίζεται
Ε / ΛΣημαία εντολών που, μαζί με τη σημαία S / C, εκτελεί μια λειτουργία για να μετατοπίσει την οθόνη ή τον κέρσορα. Βελτιώνει την κατεύθυνση της αλλαγής: 0 - αριστερά, 1 - δεξιά
Δ / ΛΣημαία που καθορίζει το πλάτος του διαύλου δεδομένων: 0 - 4 bit, 1 - 8 bit
ΝΛειτουργία σάρωσης LCD: 0 - μία γραμμή, 1 - δύο γραμμές
φάΜέγεθος μήτρας συμβόλου: 0 - 5 × 8 σημεία, 1 - 5 × 10 σημεία
ρεΠαρουσία εικόνας: 0 - απενεργοποιημένη, 1 - ενεργοποιημένη
ντοΔείκτης υπογράμμισης: 0 - off, 1 - on
σιΔείκτης κουκκίδων που αναβοσβήνει: 0 - off, 1 - on

Εκχώρηση πινέλου ελεγκτή:

  • DB0-DB7- είναι υπεύθυνοι για τα εισερχόμενα / εξερχόμενα δεδομένα
  • Rs- υψηλό επίπεδο σημαίνει ότι το σήμα στις εξόδους DB0-DB7 είναι δεδομένα, χαμηλή - μια εντολή
  • W / R- καθορίζει την κατεύθυνση των δεδομένων (ανάγνωση / εγγραφή). Δεδομένου ότι η λειτουργία ανάγνωσης δεδομένων από την ένδειξη είναι συνήθως χωρίς αξίωση, μπορείτε να ρυθμίσετε μόνιμα αυτήν την είσοδο σε χαμηλό επίπεδο
  • μι- ένας παλμός διάρκειας τουλάχιστον 500 ms σε αυτόν τον πείρο καθορίζει το σήμα για ανάγνωση / εγγραφή δεδομένων από τους πείρους DB0-DB7, RS και W / R
  • V 0- χρησιμοποιείται για τον καθορισμό της αντίθεσης της εικόνας
  • Α, Κ- τροφοδοσία οπίσθιου φωτισμού (ανόδου και καθόδου), εάν υπάρχει
  • V CCκαι GND- Τροφοδοσία LCD

Για τον έλεγχο της ένδειξης LCD, απαιτούνται 6 ή 10 ακίδες, ανάλογα με το αν έχει επιλεγεί η λειτουργία επικοινωνίας 4 ή 8 bit. Για να μειώσετε τον απαιτούμενο αριθμό ακίδων μικροελεγκτή, μπορείτε να εργαστείτε σε λειτουργία 4-bit. Σε αυτήν την περίπτωση, σχετικά με τα συμπεράσματα DB4-DB7δείκτη, τα σημαντικότερα τέσσερα bit δεδομένων / εντολής θα μεταδοθούν πρώτα, και στη συνέχεια τα λιγότερο σημαντικά τέσσερα bit. συμπεράσματα DB0-DB3παραμείνει αχρησιμοποίητο.

Ένας ελεγκτής ελέγχει έναν περιορισμένο αριθμό χαρακτήρων. Ο πίνακας δεικτών μπορεί να έχει 1, 2, 4, 8 ελεγκτές και πιθανώς περισσότερους.

Τεκμηρίωση ελεγκτών:

Ελεγκτής Samsung KS0066U

Ελεγκτής Hitachi HD44780

Κατηγορία: Εγγραφα
Ημερομηνία: 21.03.2015

έκδοση που μεταφράζεται στα ρωσικά:

Κατηγορία: Εγγραφα
Ημερομηνία: 21.03.2015

Οι δείκτες από διαφορετικούς κατασκευαστές είναι συχνά συμβατοί και εναλλάξιμοι, αλλά ενδέχεται να διαφέρουν σε μέγεθος, τοποθέτηση, επαφές κ.λπ. Επομένως, όταν επιλέγετε μια νέα ανάπτυξη και αναζητάτε αντικατάσταση, ανατρέξτε στους καταλόγους των κατασκευαστών:

Πίνακας συμβατότητας LCD χαρακτήρων από διαφορετικούς κατασκευαστές:

Εμφάνιση / απόκρυψη πίνακα

Ενα είδος Γουίνσταρ ΤΗΚΩ Όραμα δεδομένων Μπολιμίν Ηλιόλουστο Μικροτρήσεις Γουίντεκ Αμπίρ
8 × 2WH0802AMT-8S2ADV-0802Π.Χ.802ΑSC0802ΑMTC-0802ΧWM-C0802ΜAC082A
10 × 1MT-10S1
12 × 2WH1202AΠ.Χ1202Α
16 × 1WH1601ADV-16100BC1601A1SC1601ΑMTC-16100ΧWM-C1601ΜAC161Α
WH1601BBC1601ΒSC1601B
WH1601LMT-16S1ADV-16100BC1601D1SC1601DMTC-16101ΧWM-C1601QAC161B
DV-16120AC161J
16 × 2WH1602LMT-16S2RDV-16210BC1602ΕSC1602ΕMTC-16201ΧWM-C1602QAC162E
SC1602Ν
WH1602DMT-16S2JDV-16230BC1602B1SC1602BMTC-16202ΧWM-C1602NAC162Α
DV-16235MTC-16203Χ
WH1602CMT-16S2DDV-16236BC1602DSC1602D
WH1602AMT-16S2ΗDV-16244Π.Χ. 1602ΗSC1602CMTC-16204ΧWM-C1602K
WH1602BDV-16252Π.Χ. 1602ΑSC1602AMTC-16205BWM-C1602M
WH1602ΜDV-16257BC1602FSC81602F
DV-16275
DV-16276
16 × 4WH1604AMT-16S4ADV-16400BC1604A1SC1604AMTC-16400ΧWM-C1604MAC164Α
WH1604B
20 × 1DV-20100
MT-20S1L
20 × 2WH2002AMT-20S2ADV-20200BC2002ΑSC2002ΑMTC-20200ΧWM-C2002ΜAC202Α
WH2002Μ
WH2002LMT-20S2MDV-20210BC2002ΒSC2002CMTC-20201ΧWM-C2002PAC202B
DV-20211AC202D
DV-20220
DV-20206-1
20 × 4WH2004AMT-20S4ADV-20400Π.Χ.2004ΑSC2004ΑMTC-20400ΧWM-C2004PAC204Α
SC2004G
SC2004C
WH2004LDV-20410BC2004ΒMTC-20401ΧWM-C2004RAC204B
24 × 1MT-24S1L
24 × 2WH2402AMT-24S2ADV-24200BC2402ΑSC2402ΑMTC-24200ΧWM-C2402PAC242Α
MT-24S2L
40 × 2WH4002ADV-40200BC4002ΑSC4002ΑMTC-40200ΧWM-C4002PAC402Α
40 × 4WH4004ADV40400Π.Χ. 4004ΑSC4004ΑMTC-40400ΧWM-C4004MAC404Α
SC4004C

Ισχύς, αντίθεση και οπίσθιο φωτισμό

Πρέπει να είστε προσεκτικοί σχετικά με την πολικότητα της σύνδεσης τροφοδοσίας με την ένδειξη LCD και επίσης να βεβαιωθείτε ότι η τάση τροφοδοσίας κυμαίνεται από +4,5 ... 5,5 V. Η απρόσεκτη στάση απέναντι σε αυτές τις στιγμές μπορεί να οδηγήσει σε αστοχία της ένδειξης !

Οι ενδείξεις LCD επιτρέπουν ρύθμιση αντίθεσης χρησιμοποιώντας ένα διαχωριστικό τάσης. Πριν από την έξοδο δεδομένων στην ένδειξη, βεβαιωθείτε ότι η τάση που ελέγχει την αντίθεση βρίσκεται εντός του εύρους λειτουργίας. Οι βαθμολογίες αντιστάσεων διαφέρουν από τον έναν κατασκευαστή LCD στον άλλο. Ορισμένα μοντέλα δεικτών στην πλακέτα παρέχουν θέσεις για την εγκατάσταση ενός τέτοιου διαχωριστικού και αρκεί να κολλήσετε εκεί τις απαιτούμενες τιμές αντίστασης. Η αντίθεση του δείκτη εξαρτάται από τη γωνία θέασης. Εάν ο δείκτης είναι "στις δώδεκα η ώρα", τότε πρέπει να κοιτάξετε έναν τέτοιο δείκτη έτσι ώστε να είναι κάτω από το επίπεδο των ματιών, εάν "μηδέν ώρες", τότε προορίζεται για παρατήρηση στο επίπεδο των ματιών (κάθετα προς το επίπεδο η οθόνη). Εάν ο δείκτης είναι "στις έξι η ώρα", τότε θα πρέπει να χρησιμοποιείται όταν παρατηρείται πάνω από το επίπεδο των ματιών. Αυτό το σημείο πρέπει να ληφθεί υπόψη κατά την αγορά.

Ισχύς οπίσθιου φωτισμού

Εάν η ένδειξη έχει οπίσθιο φωτισμό, τότε τα καλώδια για αυτό βρίσκονται συνήθως ξεχωριστά. Είναι απαραίτητο να το συνδέσετε στο τροφοδοτικό, ρυθμίζοντας το ονομαστικό ρεύμα χρησιμοποιώντας μια εξωτερική αντίσταση R (βλ. φύλλο δεδομένων). Για την ένδειξή μου, η ονομαστική τάση ανόδου πρέπει να είναι 3,5 V και το ρεύμα είναι 40 mA. Με βάση αυτό, η τιμή της αντίστασης περιορισμού ρεύματος:

Ορισμένοι κατασκευαστές παρέχουν μια θέση στην πλακέτα ενδείξεων για την εγκατάσταση μιας τέτοιας αντίστασης, πρέπει να κολλήσετε την αντίστοιχη βαθμολογία, να κλείσετε το βραχυκυκλωτήρα και ο οπίσθιος φωτισμός θα λάβει ισχύ από την ίδια γραμμή με την ένδειξη.

Πώς αξιολογείτε αυτήν την έκδοση;

  • Η μονάδα FC-113 βασίζεται στο μικροκύκλωμα PCF8574T, το οποίο είναι ένας καταχωρητής αλλαγής 8-bit - I / O expander για τον σειριακό δίαυλο I2C. Στο σχήμα, το μικροκύκλωμα ονομάζεται DD1.
  • Το R1 είναι μια αντίσταση κοπής για τη ρύθμιση της αντίθεσης της οθόνης LCD.
  • Το Jumper J1 χρησιμοποιείται για να ενεργοποιήσετε τον οπίσθιο φωτισμό της οθόνης.
  • Οι ακίδες 1… 16 χρησιμοποιούνται για τη σύνδεση της μονάδας με τους ακροδέκτες οθόνης LCD.
  • Απαιτούνται τακάκια επαφής A1 ... A3 για να αλλάξετε τη διεύθυνση της συσκευής I2C. Κολλώντας τα αντίστοιχα άλματα, μπορείτε να αλλάξετε τη διεύθυνση της συσκευής. Ο πίνακας δείχνει την αντιστοιχία διευθύνσεων και άλτες: "0" αντιστοιχεί στο ανοιχτό κύκλωμα, "1" - στον εγκατεστημένο βραχυκυκλωτήρα. Από προεπιλογή, και οι 3 άλτες είναι ανοιχτοί και η διεύθυνση της συσκευής είναι 0x27.

2 Διάγραμμα καλωδίωσης LCD στο Arduinoμε πρωτόκολλο I2C

Η μονάδα συνδέεται στο Arduino ως στάνταρ για το δίαυλο I2C: ο πείρος SDA της μονάδας συνδέεται στην αναλογική θύρα A4, ο ακροδέκτης SCL συνδέεται στην αναλογική θύρα A5 του Arduino. Η μονάδα τροφοδοτείται από +5 V από το Arduino. Η ίδια η μονάδα συνδέεται με τους πείρους 1 ... 16 με τους αντίστοιχους ακροδέκτες 1 ... 16 στην οθόνη LCD.


3 Βιβλιοθήκη για εργασίαμε πρωτόκολλο I2C

Τώρα χρειαζόμαστε μια βιβλιοθήκη για να δουλεύουμε με LCD μέσω της διεπαφής I2C. Μπορείτε να χρησιμοποιήσετε, για παράδειγμα, αυτό (σύνδεσμος στη γραμμή "Λήψη δείγματος κώδικα και βιβλιοθήκη").

Λήψη αρχείου LiquidCrystal_I2Cv1-1.rarαποσυμπιέστε σε ένα φάκελο \ βιβλιοθήκες \που βρίσκεται στον κατάλογο Arduino IDE.

Η βιβλιοθήκη υποστηρίζει ένα σύνολο τυπικών λειτουργιών για οθόνες LCD:

ΛειτουργίαΡαντεβού
LiquidCrystal () δημιουργεί μια μεταβλητή τύπου LiquidCrystal και δέχεται παραμέτρους σύνδεσης οθόνης (αριθμοί pin).
να αρχίσει () αρχικοποίηση της οθόνης LCD, ρύθμιση παραμέτρων (αριθμός γραμμών και συμβόλων) ·
Σαφή () εκκαθάριση της οθόνης και επιστροφή του δρομέα στην αρχική θέση.
Σπίτι () επιστρέψτε τον κέρσορα στην αρχική θέση.
setCursor () ρύθμιση του δρομέα σε μια δεδομένη θέση.
γράψτε () εμφανίζει έναν χαρακτήρα στην οθόνη LCD.
Τυπώνω () εμφανίζει κείμενο στην οθόνη LCD.
δρομέας () δείχνει τον κέρσορα, δηλ. υπογραμμίστε κάτω από τη θέση του επόμενου χαρακτήρα ·
noCursor () κρύβει τον κέρσορα.
αναβοσβήνει () αναβοσβήνει ο δρομέας.
noBlink () ακύρωση αναβοσβήνει.
noDisplay () απενεργοποιήστε την οθόνη ενώ αποθηκεύετε όλες τις εμφανιζόμενες πληροφορίες.
απεικόνιση () ενεργοποιώντας την οθόνη ενώ αποθηκεύετε όλες τις εμφανιζόμενες πληροφορίες.
scrollDisplayLeft () κύλιση των περιεχομένων της οθόνης κατά 1 θέση προς τα αριστερά.
scrollDisplayRight () κύλιση των περιεχομένων της οθόνης κατά 1 θέση προς τα δεξιά.
αυτόματη κύλιση () ενεργοποίηση αυτόματης κύλισης;
noAutoscroll () απενεργοποίηση αυτόματης κύλισης.
από αριστερά προς τα δεξιά () ορίζει την κατεύθυνση του κειμένου από αριστερά προς τα δεξιά.
δεξιά προς τα αριστερά () κατεύθυνση του κειμένου από δεξιά προς αριστερά.
createChar () δημιουργεί ένα προσαρμοσμένο σύμβολο για την οθόνη LCD.

4 Σκίτσο για έξοδο κειμένουστην οθόνη LCD μέσω του διαύλου I2C

Ας ανοίξουμε το δείγμα: Αρχείο δειγμάτων LiquidCrystal_I2C CustomCharsκαι επαναλάβετε λίγο. Ας εμφανίσουμε ένα μήνυμα, στο τέλος του οποίου θα υπάρχει ένα σύμβολο που αναβοσβήνει. Όλες οι αποχρώσεις του σκίτσου σχολιάζονται στα σχόλια του κώδικα.

#περιλαμβάνω // συμπεριλάβετε τη βιβλιοθήκη Wire #include // συνδέστε τη βιβλιοθήκη LCD #define printByte (args) write (args); // uint8_t καρδιά = (0x0,0xa, 0x1f, 0x1f, 0xe, 0x4,0x0); // μάσκα bit του συμβόλου "καρδιά" LiquidCrystal_I2C lcd (0x27, 16, 2); // Ορίστε τη διεύθυνση 0x27 για μια οθόνη LCD 16x2 άκυρη ρύθμιση () ( lcd.init (); // αρχικοποίηση του LCD lcd.backlight (); // ενεργοποίηση οπίσθιου φωτισμού lcd.createChar (3, καρδιά); // δημιουργήστε ένα σύμβολο καρδιάς στη θέση μνήμης 3 lcd.home (); // βάλτε τον κέρσορα στην επάνω αριστερή γωνία, στη θέση (0,0) lcd.! "); // εκτυπώστε μια γραμμή κειμένου lcd.setCursor (0, 1); // μετακινήστε τον κέρσορα στη γραμμή 2, χαρακτήρας 1 lcd.print ("i"); // εκτυπώστε το μήνυμα στη γραμμή 2 lcd.printByte (3); // εκτυπώστε το σύμβολο καρδιάς που βρίσκεται στο 3ο κελί lcd.print ("Arduino"); } κενός βρόχος () (// αναβοσβήνει ο τελευταίος χαρακτήρας lcd.setCursor (13, 1); // μετακινήστε τον κέρσορα στη γραμμή 2, χαρακτήρας 1 lcd.print ("\ t"); καθυστέρηση (500) lcd.setCursor (13, 1); // μετακινήστε τον κέρσορα στη γραμμή 2, χαρακτήρας 1 lcd.print (""); καθυστέρηση (500) }

Παρεμπιπτόντως, οι χαρακτήρες που γράφονται από την εντολή lcd.createChar ();παραμείνετε στη μνήμη της οθόνης ακόμα και μετά την απενεργοποίηση της τροφοδοσίας. γράφονται στο ROM της οθόνης 1602.

5 Δημιουργία των δικών σας συμβόλωνγια LCD

Ας ρίξουμε μια πιο προσεκτική ματιά στο ζήτημα της δημιουργίας των δικών σας συμβόλων για οθόνες LCD. Κάθε χαρακτήρας στην οθόνη αποτελείται από 35 κουκκίδες: 5 πλάτος και 7 υψηλές (+1 δεσμευμένη υπογράμμιση). Στη γραμμή 6 του παραπάνω σχεδίου, ορίζουμε μια σειρά από 7 αριθμούς: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0)... Μετατροπή δεκαεξαδικών αριθμών σε δυαδικό: {00000, 01010, 11111, 11111, 01110, 00100, 00000} ... Αυτοί οι αριθμοί δεν είναι τίποτα περισσότερο από μάσκες bit για καθεμία από τις 7 γραμμές του χαρακτήρα, όπου το "0" δηλώνει ένα σημείο φωτός και "1" ένα σκοτεινό σημείο. Για παράδειγμα, στην οθόνη εμφανίζεται ένα σύμβολο καρδιάς που ορίζεται ως μάσκα bit.

6 Έλεγχος LCDστο λεωφορείο I2C

Ανεβάστε το σκίτσο στο Arduino. Στην οθόνη θα εμφανιστεί η επιγραφή που καθορίσαμε με έναν δρομέα που αναβοσβήνει στο τέλος.


7 Τι είναι πίσωΔίαυλος I2C

Ως μπόνους, λάβετε υπόψη το χρονοδιάγραμμα της εξόδου των λατινικών χαρακτήρων "A", "B" και "C" στην οθόνη LCD. Αυτοί οι χαρακτήρες είναι διαθέσιμοι στην οθόνη ROM και εμφανίζονται στην οθόνη μεταφέροντας απλώς τη διεύθυνσή τους στην οθόνη. Το διάγραμμα λαμβάνεται από τους ακροδέκτες RS, RW, E, D4, D5, D6 και D7 της οθόνης, δηλ. μετά το μετατροπέα FC-113 "I2C parallel bus". Μπορούμε να πούμε ότι βουτάμε λίγο βαθύτερα στο «σίδερο».


Διάγραμμα χρονισμού της εξόδου των λατινικών χαρακτήρων "A", "B" και "C" στην οθόνη LCD 1602

Το διάγραμμα δείχνει ότι οι χαρακτήρες που είναι διαθέσιμοι στην οθόνη ROM (δείτε τη σελίδα 11 του φύλλου δεδομένων, σύνδεσμος παρακάτω) μεταδίδονται σε δύο μύτες, ο πρώτος από τους οποίους καθορίζει τον αριθμό της στήλης του πίνακα και ο δεύτερος - ο αριθμός σειράς. Σε αυτήν την περίπτωση, τα δεδομένα είναι "κλειδωμένα" στην άκρη του σήματος στη γραμμή μι(Ενεργοποίηση) και τη γραμμή Rs(Register select, register select) βρίσκεται σε κατάσταση λογικής, που σημαίνει μεταφορά δεδομένων. Η χαμηλή κατάσταση της γραμμής RS σημαίνει τη μετάδοση οδηγιών, τις οποίες βλέπουμε πριν από τη μετάδοση κάθε χαρακτήρα. Σε αυτήν την περίπτωση, μεταδίδεται ο κωδικός εντολής του φορείου στη θέση (0, 0) της οθόνης LCD, ο οποίος μπορεί επίσης να βρεθεί μελετώντας την τεχνική περιγραφή της οθόνης.

Και ένα ακόμη παράδειγμα. Αυτό το χρονοδιάγραμμα δείχνει την εμφάνιση του συμβόλου καρδιάς στην οθόνη LCD.


Και πάλι, οι δύο πρώτες παρορμήσεις επιτρέπωσυμμορφωθείτε με τις οδηγίες Σπίτι ()(0000 0010 2) - επιστροφή μεταφοράς στη θέση (0; 0) και η δεύτερη έξοδος στην οθόνη LCD που είναι αποθηκευμένη στο κελί μνήμης 3 10 (0000 0011 2) σύμβολο "Καρδιά" (οδηγίες lcd.createChar (3, καρδιά);σκίτσο).