Κατανοήστε την αρχή της οθόνης OLED - Διαφορετικοί τρόποι χρήσης των μονάδων OLED
Η μονάδα OLED διαθέτει τέσσερις τρόπους λειτουργίας, δηλαδή παράλληλες διεπαφές 6800 και 8080, 4-σύρματη σειρά SPI διασύνδεσης και IIC διασύνδεσης.Η σχέση μεταξύ των ρυθμίσεων BS1/BS2 και της λειτουργίας διεπαφής του μοντέλου εμφανίζεται στον ακόλουθο πίνακα.:
Η προεπιλεγμένη ρύθμιση της μονάδας OLED της SAEF Technology είναι BS0 έως GND, BS1 και BS2 έως VCC (τρόπος 8080), εάν θέλετε να το ρυθμίσετε σε άλλες λειτουργίες,πρέπει να τροποποιήσετε τις ρυθμίσεις BS0-BS2 με ένα σίδερο συγκόλλησης στο πίσω μέρος του OLED(Αλλαγή υλικού)
Από το σχήμα, μπορούμε να ξέρουμε ότι υπάρχουν συνολικά 16 καρφίτσες, και από τις 16 γραμμές, χρησιμοποιήσαμε μόνο 15 καρφίτσες, και μία από αυτές κρέμεται.και 13 απομένουν.Σε διαφορετικές λειτουργίες, ο αριθμός των γραμμών σήματος που χρειαζόμαστε είναι διαφορετικός, στη λειτουργία 8080, χρειάζονται και οι 13, από τις οποίες μια είναι κοινή, δηλαδή η γραμμή επαναφοράς RST (RES),που μπορούμε να συνδέσουμε απευθείας με την επαναφορά της MCU (για να επιβεβαιώσουμε ότι η μέθοδος επαναφοράς είναι η ίδια)Στη λειτουργία IIC, χρειάζονται μόνο 2 γραμμές!
Μόλις μάθαμε γι' αυτό. Η λειτουργία του ΙΙΚ χρειάζεται μόνο δύο γραμμές, και η λειτουργία του ΙΙΚ είναι να χρησιμοποιεί δύο καλώδια για να προσομοιώσει το ΙΙΚ για να αποκτήσει δεδομένα.
Ο ελεγκτής OLED είναι SSD1306, δηλαδή: η γυμνή οθόνη τροφοδοτείται από SSD1306, το οποίο είναι επίσης ένα ευρύτερα χρησιμοποιούμενο τσιπ οδηγού LED.
Μνήμη βίντεο OLED
Η ίδια η OLED δεν έχει μνήμη βίντεο και η μνήμη βίντεο της εξαρτάται από το SSD1306 για να παρέχει.Κάθε σελίδα περιέχει 128 bytes, συνολικά 8 σελίδες, που είναι ακριβώς 128 * 64 μεγέθους πίνακα.
Ωστόσο, επειδή το OLED δεν μπορεί να ελέγξει έναν πίνακα με μια στιγμή, μπορεί να ελέγξει μόνο έναν πίνακα με 8 σημεία.
Επειδή κάθε εγγραφή είναι γραμμένη σε bytes, υπάρχει ένα πρόβλημα, αν χρησιμοποιήσουμε τη λειτουργία μόνο εγγραφής για να λειτουργήσει η ενότητα, τότε, πρέπει να γράψουμε 8 σημεία κάθε φορά, οπότε όταν σχεδιάζουμε ένα σημείο,Πρέπει να βρούμε την τρέχουσα κατάσταση κάθε bit του byte όπου το σημείο που πρέπει να οριστεί βρίσκεται (0/1Διαφορετικά, τα γραπτά δεδομένα θα αντικαταστήσουν την προηγούμενη κατάσταση, και το αποτέλεσμα θα είναι ότι εμφανίζονται κάποια σημεία που δεν χρειάζεται να εμφανιστούν,ή αυτά που θα έπρεπε να εμφανίζονται δεν εμφανίζονται. Στην αναγνώσιμη λειτουργία, μπορούμε να διαβάσουμε το byte που θα γραφτεί πρώτα, να πάρουμε την τρέχουσα κατάσταση, και στη συνέχεια να το γράψουμε στο γραμμάριο μετά την τροποποίηση του bit που θα ξαναγραφεί,ώστε να μην επηρεάσει την προηγούμενη κατάστασηΩστόσο, αυτό απαιτεί τη δυνατότητα ανάγνωσης της GRAM, για τη λειτουργία SPI 3-σύρμα ή 4-σύρμα, η μονάδα δεν υποστηρίζει την ανάγνωση και η λειτουργία ανάγνωσης->-to->-γράφησης είναι επίσης σχετικά αργή.
Έτσι, η μέθοδος που χρησιμοποιούμε είναι να δημιουργήσουμε ένα OLED GRAM (συνολικά 128 bytes) μέσα στο STM32, και σε κάθε τροποποίηση, μόνο να τροποποιήσει το GRAM στο STM32 (πραγματικά SRAM), και μετά την τροποποίηση,να γράφει τη GRAM στο STM32 στην OLED GRAM κάθε φοράΦυσικά, η μέθοδος αυτή έχει επίσης μειονεκτήματα, δηλαδή, για εκείνους τους μικροελεγκτές με πολύ μικρή SRAM (όπως η σειρά 51), είναι πιο ενοχλητική.
Μνήμη βίντεο OLED
Η μορφή αποθήκευσης είναι η ακόλουθη:
Ενα, δυο, τρία... 127
//[1]0 1 2 3... 127
//[2]0 1 2 3... 127
//[3]0 1 2 3... 127
//[4]0 1 2 3... 127
//[5]0 1 2 3... 127
//[6]0 1 2 3... 127
//[7]0 1 2 3... 127
u16 OLED_GRAM[128][8]·
Ενημέρωση της μνήμης βίντεο στο LCD
κενό OLED_Refresh_Gram (κενό)
{
u8 i,n·
για ((i=0; i<8; i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); Ορίστε διεύθυνση σελίδας (0~7)
OLED_WR_Byte (0x00,OLED_CMD); Ρυθμίστε τη θέση εμφάνισης ∆ιαστολή χαμηλής στήλης
OLED_WR_Byte (0x10,OLED_CMD); Ρυθμίστε τη θέση εμφάνισης ∆εύθυνση ύψους στήλης
για ((n=0; n<128; n++)OLED_WR_Byte ((OLED_GRAM[n][i],OLED_DATA) ·
}
}
Διάταξη SSD1306
1Η εντολή 0X81 περιέχει δύο bytes, το πρώτο 0X81 είναι η εντολή και το επόμενο byte είναι η τιμή της αντίθεσης που πρέπει να οριστεί.όσο φωτεινότερη η οθόνη θα είναι.
2: εντολή 0XAE/0XAF: 0XAE για να απενεργοποιηθεί η εντολή εμφάνισης· 0XAF για να ενεργοποιηθεί η εντολή εμφάνισης.
3: εντολή 0X8D: περιέχει 2 bytes, το πρώτο είναι η λέξη εντολής, το δεύτερο είναι η τιμή καθορισμού, το δεύτερο byte του BIT2 υποδηλώνει την κατάσταση εναλλαγής της αντλίας φόρτισης, το bit είναι 1,η αντλία φόρτισης είναι ενεργοποιημένηΌταν η ενότητα είναι αρχικά ενεργοποιημένη, αυτό πρέπει να είναι ενεργοποιημένο, διαφορετικά δεν θα δείτε την οθόνη.
4: εντολή 0XB0~B7: Χρησιμοποιείται για τον καθορισμό της διεύθυνσης της σελίδας και τα κάτω τρία ψηφία αντιστοιχούν στη διεύθυνση της σελίδας της GRAM.
5: Διάταξη 0X00~0X0F: Χρησιμοποιείται για τη θέσπιση των κάτω τεσσάρων ψηφίων της διεύθυνσης της αρχικής στήλης κατά την εμφάνιση.
6: Διάταξη 0X10~0X1F: Χρησιμοποιείται για να οριστεί η διεύθυνση της στήλης εκκίνησης της οθόνης τέσσερα ψηφία υψηλότερα.
Για περισσότερες εντολές, παρακαλούμε ανατρέξτε σε αυτό, συνιστάται να το δείτε, είναι πολύ λεπτομερή: SSD1306 (OLED driver chip) οδηγίες με λεπτομέρειες
Μετά την εισαγωγή της λειτουργίας λειτουργίας και το τσιπ οδηγού, μπορούμε να αρχίσουμε να χρησιμοποιούμε αυτή τη μονάδα OLED IIC
Λεπτομερείς κωδικοί
#define OLED_CMD 0 // γράψτε εντολή
#define OLED_DATA 1 //Γράψτε δεδομένα
Εισαγωγή του OLED
Αρχικά το SSD1306
void OLED_Init (δεν ισχύει)
GPIO_InitTypeDef GPIO_InitStructure·
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, Ενεργοποιείται); Ενεργοποιήστε το ρολόι στην πύλη A
Ονομασία του οχήματος:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; έξοδος σπρώξιμο-σύνδεσης
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz, ταχύτητα 50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); Αρχική λειτουργία του GPIO
GPIO_SetBits ((GPIOA,GPIO_Pin_5 σε GPIO_Pin_7) ·
καθυστέρηση_ms(200);
Οθόνη εκτός λειτουργίας
OLED_WR_Byte ((0x00,OLED_CMD);//---καθορίστε τη διεύθυνση χαμηλής στήλης
OLED_WR_Byte ((0x10,OLED_CMD);//---να ορίσετε τη διεύθυνση υψηλής στήλης
OLED_WR_Byte ((0x40,OLED_CMD);//--προσδιορίστε τη διεύθυνση αρχικής γραμμής
OLED_WR_Byte ((0xB0,OLED_CMD);//--καθορίστε διεύθυνση σελίδας
OLED_WR_Byte ((0x81,OLED_CMD); // Έλεγχος συμβολαίου
Οδηγία 2008/68/ΕΚ του Ευρωπαϊκού Κοινοβουλίου και του Συμβουλίου, της 15ης Ιουνίου 2008, σχετικά με τη θέσπιση προδιαγραφών για την προώθηση της εναρμόνισης των συστημάτων ηλεκτρονικής ενέργειας (ΕΕ L 347 της 20.11.2008, σ. 1).
OLED_WR_Byte ((0xA1,OLED_CMD);//επανασχεδιασμός τμήματος συνόλου
Οδηγία 2008/68/ΕΚ του Ευρωπαϊκού Κοινοβουλίου και του Συμβουλίου, της 17ης Ιουνίου 2008, σχετικά με τη θέσπιση των κανόνων για την προστασία των καταναλωτών (ΕΕ L 347 της 20.11.2008, σ. 1).
Ονομασία του οχήματος:
Οδηγίες για την προστασία των καταναλωτών
Οδηγία για την ανίχνευση
Οδηγία 2008/57/ΕΚ του Ευρωπαϊκού Κοινοβουλίου και του Συμβουλίου, της 17ης Ιουνίου 2008, σχετικά με τη θέσπιση προδιαγραφών σχετικά με την εφαρμογή των κανόνων για την προστασία των καταναλωτών και την προστασία των καταναλωτών (ΕΕ L 347 της 20.9.2008, σ. 1).
Ονομασία του οχήματος:
Ονομασία του οχήματος:
Ονομασία του οχήματος:
OLED_WR_Byte ((0xD8,OLED_CMD);//εκκλεισμός λειτουργίας χρώματος περιοχής
Ονομασία του οχήματος:
Ορισμός της περιόδου προφόρτισης
Οδηγία 2008/57/ΕΚ του Ευρωπαϊκού Κοινοβουλίου και του Συμβουλίου, της 17ης Ιουνίου 2008, σχετικά με τη θέσπιση προδιαγραφών για την προώθηση της εναρμόνισης των νομοθεσιών των κρατών μελών σχετικά με τα συστήματα ηλεκτρονικού ελέγχου (ΕΕ L 347 της 20.11.2008, σ. 1).
Ολοκληρώθηκε ο διακανονισμός για την προετοιμασία των προγραμμάτων.
Ονομασία του οχήματος:
Ονομασία του οχήματος:
Ονομασία του οχήματος:
OLED_WR_Byte ((0x8D,OLED_CMD);//ενεργοποιήστε την αντλία φόρτισης
Ονομασία του οχήματος:
Ηλεκτρονικό οθόνο OLED_WR_Byte ((0xAF,OLED_CMD);
OLED_Clear(); Καθαρίστε την οθόνη, συνιστάται να καθαρίσετε την οθόνη πρώτα μετά από κάθε ολοκλήρωση εκκίνησης
Λειτουργία καθαρής οθόνης, αφού καθαρίσετε την οθόνη, όλη η οθόνη είναι μαύρη!
κενό OLED_Clear(κενό)
{
u8 i,n·
για ((i=0; i<8; i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); Ορίστε διεύθυνση σελίδας (0~7)
OLED_WR_Byte (0x00,OLED_CMD); Ρυθμίστε τη θέση εμφάνισης ∆ιαστολή χαμηλής στήλης
OLED_WR_Byte (0x10,OLED_CMD); Ρυθμίστε τη θέση εμφάνισης ∆εύθυνση ύψους στήλης
για ((n=0; n<128; n++)OLED_WR_Byte(0,OLED_DATA),
} // Ενημέρωση της οθόνης
}
Στον αυτομοντάλ που χρησιμοποιούμε συνήθως, υπάρχουν δύο συνήθεις τρόποι για να πάρουμε τον μονούλο, ένας είναι 6 * 8, και ο άλλος είναι 8 * 16,Το πρώτο είναι να βγάλουμε τους χαρακτήρες που θέλουμε σε έναν ορθογώνιο πίνακα με 8 σειρές και 6 στήλες, και η δεύτερη είναι να αφαιρεθούν οι χαρακτήρες σε έναν ορθογώνιο πίνακα με 16 σειρές και 8 στήλες.Χρησιμοποιείται χώρος για την επόμενη σελίδα.Έτσι έχουμε το μέγεθος γραμματοσειράς που χρησιμοποιούμε συνήθως, φυσικά, αυτά είναι κοινά χρησιμοποιούμενα μεγέθη γραμματοσειράς, μπορούμε επίσης να κάνουμε το δικό μας αγαπημένο μέγεθος γραμματοσειράς μέσω λογισμικού διαμόρφωσης χαρακτήρων.
/* Εμφανίζει χαρακτήρα στην καθορισμένη θέση, συμπεριλαμβανομένων ορισμένων χαρακτήρων
x:0~127
y:0~63
μέγεθος: Επιλέξτε γραμματοσειρά 16/12*/
μηδενικό OLED_ShowChar ((u8 x,u8 y,u8 chr,u8 Char_Size)
{
μη υπογεγραμμένο char c=0,i=0;
c=chr-' '; Η αξία της μετατόπισης μπορεί να ληφθεί από το μοτίβο γραμματοσειράς, η πρώτη είναι " ', και ο αντίστοιχος χαρακτήρας μπορεί να ληφθεί αφαιρώντας
if(x>Max_Column-1) {x=0; y=y+2; } //Max_Column: Μέγιστη στήλη: 128; x: ορίστε τον αριθμό των στήλων; y: ορίστε τον αριθμό των σελίδων
if(Char_Size ==16) // Σε αυτή την περίπτωση απαιτείται η ίδια στήλη δύο σελίδων, και απαιτείται ο πίνακας των 8*16
{
OLED_Set_Pos(x,y); Εάν x = y = 2, τότε ορίστε το στη στήλη 3 στη σελίδα 3, σημείωση: υπάρχουν μόνο οκτώ σειρές ανά σελίδα
για ((i=0; i<8; i++)
OLED_WR_Byte(F8X16[c*16+i],OLED_DATA); Με την αύξηση του i, οι κουκίδες σχεδιάζονται σε έναν βρόχο και όλες οι 8 σειρές της δεύτερης στήλης στη σελίδα 2 εγγράφονται στα δεδομένα
OLED_Set_Pos(x,y+1); Δεδομένου ότι ο αριθμός των σημείων δεν είναι αρκετός, θα πρέπει να συνεχίσετε τις σημεία στη στήλη 2 στη σελίδα 3
για ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i+8],OLED_DATA); Συνεχίστε να ολοκληρώνετε το σχέδιο μέχρι το τέλος του σημείου 16.
}
Άλλα
{
OLED_Set_Pos(x,y); 6x8 πίνακας με κουκίδες, δεν χρειάζεται άλλες σελίδες για να συνεχίσει η ζωγραφική
για ((i=0; i<6; i++)
OLED_WR_Byte(F6x8[c][i],OLED_DATA); Σε μια διμερής συστοιχία, το C ελέγχει τις σειρές και το I ελέγχει τις στήλες, οπότε δεν απαιτούνται άλλες λειτουργίες για να ολοκληρωθεί το σχέδιο
}
}
Το παρακάτω if(x>120) δεν είναι λάθος, επειδή το προηγούμενο x+=8; Υπάρχει μια εξήγηση στις παρακάτω σημειώσεις, οπότε μπορείτε να το σκεφτείτε.
void OLED_ShowString ((u8 x,u8 y,u8 *chr,u8 Char_Size) // Εμφανίζει τη χορδή
{
μη υπογεγραμμένο char j=0;
while (chr[j]!='0') // Ελέγξτε αν η σειρά τελειώνει
{
OLED_ShowChar ((x,y,chr[j],Char_Size); Ζωγραφίστε τους χαρακτήρες έναν προς έναν
x+=8; x ορίζεται σε μια στήλη, το μέγεθος ενός χαρακτήρα είναι 8*16, δηλαδή η σειρά είναι 16 και η στήλη είναι 8, και κάθε φορά που εμφανίζεται ως ένα, θα πρέπει να μετακινήσετε 8 στήλες στην υψηλότερη στήλη
αν(x>120) {x=0; y+=2; } // Το μέγιστο είναι 128 στήλες, εάν υπερβαίνει, πρέπει να ξεκινήσετε από τη στήλη μηδέν και πάλι, επειδή χρειάζεστε άλλες σελίδες για να συνεχίσετε τη ζωγραφική αυτή τη στιγμή,Για να αποφευχθεί η επικαλύπτωση, χρειάζεστε y + = 2.
j++; Ζωγραφίστε χορδές σε μια βρόχο
}
}
Δύο αριθμοί εμφανίζονται, και οι δύο γραμμένοι στον παρακάτω κώδικα, και πρέπει να σημειωθεί ότι το "" παρακάτω αντιπροσωπεύει την τιμή ASCII των 32
m^n λειτουργία
u32 oled_pow ((u8 m,u8 n)
{
u32 αποτέλεσμα=1;
ενώ ((n--) αποτέλεσμα*=m·
αποτέλεσμα επιστροφής·
}
Εμφάνιση 2 αριθμών
x,y: συντεταγμένες εκκίνησης
len: Ο αριθμός των ψηφίων του αριθμού
μέγεθος: μέγεθος γραμματοσειράς
λειτουργία: λειτουργία 0, λειτουργία πλήρωσης, 1. λειτουργία επικάλυψης
num: αριθμητική τιμή (0~4294967295) ·
ακατάλληλο OLED_ShowNum ((u8 x,u8 y,u32 num,u8 len,u8 size2)
{
u8 t,temp·
u8 enshow=0;
για t=0; t { Δελτίο ΕΚΑΧ της 28ης Ιουνίου 2004 αν ((δείξετε==0&&t<(len-1)) { αν ((temp==0) { Το όχημα πρέπει να είναι εξοπλισμένο με ηλεκτρική ενέργεια και να είναι εξοπλισμένο με ηλεκτρική ενέργεια. να συνεχίσει· Αλλιώς εμφανίζεται 1 } Η συσκευή OLED εμφανίζει το Char ((x+(size2/2) *t,y,temp+'0',size2) · } Τα παραπάνω αρκετά είναι η πιο βασική χρήση μας, κάποιοι Xi θέλουν να το χρησιμοποιήσουν για να ολοκληρώσουν περισσότερες διαφορετικές λειτουργίες, το ακόλουθο είναι, πριν από την εισαγωγή,Πρώτα παρουσιάζουμε το κοινά χρησιμοποιούμενο λογισμικό μοντελοποίησης.. PC σε LCD 2002 Να πώς λειτουργεί! Όταν το χρησιμοποιούμε, πρώτα ανοίγουμε το αρχείο στην πάνω αριστερή γωνία και δημιουργούμε ένα νέο.Υπάρχει ένα πράγμα σαν ταχύτητα στην πάνω γωνία., και πρέπει να το ανοίξουμε μόλις ορίσουμε το μέγεθος. Αφού τα έχεις όλα πάνω, μπορείς να ζωγραφίσεις ό,τι θέλεις. Επειδή το OLED είναι 128*64, το μέγιστο μέγεθος μας είναι αυτό, μπορούμε να γράψουμε σε 128*64, να ζωγραφίσουμε κλπ., αυτό που βγαίνει είναι μια ολόκληρη εικόνα,που είναι επίσης ένας τρόπος για να γεμίσει την οθόνη, και υπάρχει ένα είδος λογισμικού εντύπωσης στο πίσω μέρος, το οποίο λαμβάνεται ως εικόνα, όπως ορισμένοι χαρακτήρες anime. Τώρα που έχουμε εισαγάγει τα εργαλεία, είμαστε έτοιμοι να προχωρήσουμε στις επιχειρήσεις μας! 1Τραβήξτε μια ευθεία γραμμή. 2: Δείξτε εικόνες (όπως ορισμένοι χαρακτήρες anime) Υπάρχουν περισσότεροι τρόποι για να παίξετε, για να ενημερωθείτε.
Συνήθως χρησιμοποιούμε το ίδιο σημείο όπως στο παρακάτω σχήμα όταν θέλουμε να σχεδιάσουμε μια ευθεία γραμμή, πάντα παίρνουμε ένα σημείο, αυτό συμβαίνει επειδή το μέγεθος χαρακτήρα που χρησιμοποιούμε είναι 6 * 8 ή 8 * 16,και το μέγεθος του σημείου στο εσωτερικό δεν είναι γεμάτο ολόκληρο το ορθογώνιο (εξήγησε παραπάνω), αυτό που πρέπει να κάνουμε είναι να ανοίξουμε το λογισμικό χαρακτήρα μας και να κάνουμε το σημείο μεγαλύτερο!
Υπεύθυνος Επικοινωνίας: Mrs. Christina
Τηλ.:: +8618922869670
Φαξ: 86-755-2370-9419