Η οθόνη είναι το απαραίτητο μέρος οποιουδήποτε μηχανήματος είτε πρόκειται για οικιακή συσκευή είτε για βιομηχανικά μηχανήματα. Η οθόνη δεν δείχνει μόνο τις επιλογές ελέγχου για τη λειτουργία του μηχανήματος, αλλά επίσης δείχνει την κατάσταση και την έξοδο της εργασίας που εκτελείται από αυτό το μηχάνημα. Υπάρχουν πολλοί τύποι οθονών που χρησιμοποιούνται σε ηλεκτρονικά είδη όπως οθόνη 7 τμημάτων, οθόνη LCD 16x2, οθόνη αφής TFT, οθόνη OLED κ.λπ.
Η οθόνη LCD 16x2 είναι η πιο βασική μονάδα οθόνης και χρησιμοποιείται επίσης σε μερικούς μικρούς ηλεκτρονικούς εξοπλισμούς όπως αριθμομηχανή, ψηφιακός μετρητής κ.λπ. Έχουμε κάνει πολλά έργα χρησιμοποιώντας οθόνη LCD 16x2, συμπεριλαμβανομένης της βασικής διασύνδεσης με άλλους μικροελεγκτές:
- Διασύνδεση LCD με μικροελεγκτή 8051
- Διασύνδεση LCD με μικροελεγκτή ATmega32
- Διασύνδεση LCD με μικροελεγκτή PIC
- Διασύνδεση LCD 16x2 με Arduino
- 16x2 LCD Interfacing με Raspberry Pi χρησιμοποιώντας Python
Σε αυτό το σεμινάριο, θα δούμε πώς να συνδέσετε μια οθόνη LCD 16x2 με τον μικροελεγκτή Atmega16 AVR και να εμφανίσουμε ένα απλό μήνυμα καλωσορίσματος.
Απαιτούμενα στοιχεία
- Atmega16
- Μονάδα LCD 16x2
- Άλτες
- Ψωμί
Διάγραμμα κυκλώματος
Προγραμματισμός Atmega16 για οθόνη LCD 16x2
Ο προγραμματισμός δεν απαιτεί εξωτερικές βιβλιοθήκες. Εδώ το Atmega16 προγραμματίζεται χρησιμοποιώντας USBASP και Atmel Studio7.0. Πλήρες πρόγραμμα και βίντεο εργασίας παρέχεται στο τέλος του έργου, απλώς ανεβάστε το πρόγραμμα στο Atmega16 και περιστρέψτε 10k POT για να ρυθμίσετε τη φωτεινότητα της οθόνης LCD.Αρχικά ορίστε τη συχνότητα της CPU και συμπεριλάβετε τις απαραίτητες βιβλιοθήκες που συνοδεύουν το πακέτο Atmel Studio όπως για πρόσβαση σε καρφίτσες
Ορίστε την ακίδα RS και EN της οθόνης LCD στο πρόγραμμα. Οι ακίδες RS χρησιμοποιούνται για την επιλογή των δεδομένων και του μητρώου εντολών. Η καρφίτσα ενεργοποίησης ασφαλίζει τα δεδομένα.
# καθορισμός και PA3 # καθορισμός PA2
Ορίστε επίσης αυτό που PORT του Atmega16 θα χρησιμοποιηθεί για διασύνδεση LCD. Εδώ χρησιμοποιείται το PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
Το επόμενο βήμα είναι να δημιουργήσετε μια συνάρτηση που θα αποδεχτεί μια εντολή περνώντας μια παράμετρο. Υπάρχουν πολλές εντολές LCD HEX. Οι εντολές Hex χρησιμοποιούνται για τον καθορισμό της λειτουργίας της οθόνης LCD. Εφόσον χρησιμοποιούμε τη λειτουργία LCD 4-bit, το byte (8-bit) θα σταλεί σε δύο πακέτα. Τα πακέτα ενός θα είναι Upper Nibble (4-bit) και άλλα πακέτα θα είναι Lower Nibble (4-bit).
void lcdCommand (εντολές char χωρίς υπογραφή) { lcdPort = (lcdPort & 0x0F) - (εντολές & 0xF0); lcdPort & = ~ (1 <
Το επόμενο βήμα θα ήταν να αποδεχτείτε τους χαρακτήρες και να τον συνδέσετε στη θύρα της οθόνης LCD. Στη συνέχεια, οι χαρακτήρες που λαμβάνονται αποστέλλονται στην οθόνη LCD μέσω του nibble. Η συνάρτηση παίρνει το χαρακτήρα χρησιμοποιώντας παράμετρο πέρασμα και στη συνέχεια παίρνει το πάνω και το κάτω nibble. Ο ακροδέκτης «rs» έχει οριστεί σε υψηλό για τον καταχωρητή δεδομένων και στη συνέχεια αποστέλλεται ένας αυξανόμενος παλμός για να κλειδώσει τα δεδομένα. Ομοίως, το χαμηλότερο nibble in send, αλλάζοντας την τιμή της ενεργοποίησης και στέλνοντας τον αυξανόμενο παλμό για την ενεργοποίηση.
void lcdChar (συμβολοσειρά char χωρίς υπογραφή) { lcdPort = (lcdPort & 0x0F) - (string & 0xF0); lcdPort - = (1 <
Αυτή η συνάρτηση μετατρέπει τον χαρακτήρα σε συμβολοσειρά και μπορεί να χρησιμοποιηθεί στο πρόγραμμα αργότερα όπου χρειάζεται να γράφετε συμβολοσειρά.
void lcdString (char * str) { int j; για (j = 0; str! = 0; j ++) { lcdChar (str); } }
Τώρα μια συνάρτηση γράφεται μόνο για να καθαρίσετε την οθόνη. Απλώς πρέπει να στείλετε την εντολή 01 στο HEX και στη συνέχεια να ρυθμίσετε τον κέρσορα στην αρχική θέση.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Τώρα στην κύρια λειτουργία, η LCD έχει αρχικοποιηθεί. Αρχικά ρυθμίστε την κατεύθυνση PORT για διασύνδεση LCD. Εδώ, το PORT έχει οριστεί ως OUTPUT και ορίστε FF.
lcdDirection = 0xFF; _delay_ms (20)
Στη συνέχεια, ρυθμίστε την οθόνη LCD σε λειτουργία 4-bit στέλνοντας 02 σε hex. Στείλτε επίσης 28 σε hex για να το ορίσετε στη γραμμή 2, 15x7 matrix pixels σε λειτουργία 4-bit.
lcdCommand (0x02); lcdCommand (0x28);
Οι εντολές 0c και 06 χρησιμοποιούνται για τον έλεγχο της θέσης του δρομέα. Και τέλος απλώς καθαρίστε την οθόνη στέλνοντας 01 σε δεκαεξαδικό. Αυτό θα ολοκληρώσει την αρχικοποίηση της οθόνης LCD.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Αφού ολοκληρωθεί η προετοιμασία, δοκιμάστε απλώς την οθόνη LCD στέλνοντας μια συμβολοσειρά. Εδώ στέλνουμε ένα String « Διασύνδεση LCD » στο 1 st σειρά.
lcdString ("Διασύνδεση LCD");
Στη συνέχεια, μετακινήστε τον κέρσορα στην επόμενη σειρά στέλνοντας την εντολή c0 σε hex. Και τέλος σε αυτήν τη θέση, γράψτε τη συμβολοσειρά "With Atmega1 6".
lcdCommand (0xC0); lcdString ("Με Atmega16");
Αυτό ολοκληρώνει το πλήρες σεμινάριο σχετικά με τη διασύνδεση LCD 16x2 με το Atmega16. Σημειώστε ότι εάν δεν λάβετε καμία εικόνα ή εικονοστοιχεία, ελέγξτε είτε την καλωδίωσή σας σύμφωνα με τον κωδικό και το διάγραμμα κυκλώματος ή αλλάξτε την τιμή του POT που συνδέεται με τον V0 pin της οθόνης LCD. Εάν έχετε οποιαδήποτε αμφιβολία ή πρόταση, μπορείτε να επικοινωνήσετε μαζί μας είτε γράφοντας στο φόρουμ μας είτε σχολιάστε παρακάτω.