Verständnis für das Prinzip des OLED-Displays - Verschiedene Möglichkeiten der Verwendung von OLED-Modulen
Das OLED-Modul verfügt über vier Arbeitsmodi, nämlich 6800 und 8080 parallele Schnittstellen, 4-draht-seriale SPI-Schnittstellenmodus und IIC-Schnittstellenmodus.Die Beziehung zwischen den Einstellungen BS1/BS2 und dem Modul-Schnittstellenmodus ist in der folgenden Tabelle dargestellt.:
Die Standard-Einstellung des OLED-Moduls von SAEF Technology ist BS0 bis GND, BS1 und BS2 bis VCC (Modus 8080), wenn Sie es auf andere Modi einstellen möchten.Sie müssen die BS0-BS2 Einstellungen mit einem Löten auf der Rückseite der OLED ändern(Hardwarewechsel)
Aus dem Schema können wir wissen, dass es insgesamt 16 Pins sind, und von den 16 Linien haben wir nur 15 Pins verwendet, und eine davon hängt.Und 13 sind noch übrig.. In verschiedenen Modi ist die Anzahl der Signalleitungen, die wir benötigen, unterschiedlich, im 8080-Modus sind alle 13 benötigt, von denen eine üblich ist, nämlich die Reset-Leitung RST (RES),die wir direkt mit dem Reset der MCU verbinden können (um zu bestätigen, dass die Reset-Methode gleich ist)Im IIC-Modus sind nur 2 Zeilen nötig!
Wir haben gerade davon erfahren. Der Arbeitsmodus des IIC benötigt nur zwei Leitungen, und der Arbeitsmodus des IIC ist, zwei Drähte zu verwenden, um das IIC zu simulieren, um Daten zu erhalten.
Der OLED-Controller ist SSD1306, d. h. der nackte Bildschirm wird von SSD1306 angetrieben, der ebenfalls ein häufiger verwendeter LED-Treiberchip ist.
Bildspeicher für OLED-Module
OLED selbst verfügt nicht über Video-Speicher, und sein Video-Speicher ist abhängig von SSD1306 zur Verfügung zu stellen.Jede Seite enthält 128 Bytes, insgesamt 8 Seiten, was genau 128 x 64 Punkte entspricht.
Da OLED jedoch nicht eine Punktmatrix gleichzeitig steuern kann, kann es nur eine 8-Punkt-Matrix steuern; und es ist eine vertikale Sweep-Steuerung;
Da jedes Schreiben in Bytes geschrieben wird, gibt es ein Problem, wenn wir den Schreibmodus verwenden, um das Modul zu bedienen, dann müssen wir 8 Punkte auf einmal schreiben, also wenn wir einen Punkt zeichnen,Wir müssen herausfinden, den aktuellen Zustand jedes Bits des Byte, wo der Punkt zu setzen ist (0/1Ansonsten werden die geschriebenen Daten den vorherigen Zustand überschreiben, und das Ergebnis wird sein, dass einige Punkte angezeigt werden, die nicht angezeigt werden müssen,oder die, die angezeigt werden sollten, werden nicht angezeigt. Im lesbaren Modus können wir zuerst das zu schreibende Byte auslesen, die aktuelle Situation erhalten und es dann in das Gramm schreiben, nachdem wir das zu schreibende Bit modifiziert haben,so dass es die vorherige Situation nicht beeinflusstFür den 3- oder 4-drahtigen SPI-Modus unterstützt das Modul jedoch kein Lesen und der Lesemodus ist ebenfalls relativ langsam.
Die Methode, die wir verwenden, ist also, ein OLED GRAM (insgesamt 128 Bytes) innerhalb des STM32 zu erstellen, und bei jeder Änderung, nur das GRAM auf dem STM32 (tatsächlich SRAM) zu modifizieren, und nach der Modifikation,die GRAM auf dem STM32 auf die OLED GRAM gleichzeitig schreibenNatürlich hat diese Methode auch Nachteile, d. h. für Mikrocontroller mit sehr geringerem SRAM (wie die 51er-Serie) ist sie problematischer.
Video-Speicher von OLED
Das Format der Speicherung ist wie folgt:
Ich bin nicht derjenige, der das Problem löst.
- Das ist nicht wahr.
- Das ist nicht wahr.
Das ist ein sehr schwieriger Fall.
- Das ist nicht wahr.
- Das ist nicht wahr.
- Das ist nicht wahr.
- Das ist nicht wahr.
u16 OLED_GRAM[128][8];
Aktualisieren Sie den Videodatenspeicher auf den LCD
null OLED_Refresh_Gram (null)
{
u8 i, n;
für ((i=0; i<8; i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); Adresse der Seite festlegen (0~7)
OLED_WR_Byte (0x00,OLED_CMD); Stellen Sie die Anzeigestelle Spalte niedrigste Adresse ein
OLED_WR_Byte (0x10,OLED_CMD); Stellen Sie die Anzeigeposition Spaltenhöhe-Adresse ein
für ((n=0; n<128; n++)OLED_WR_Byte ((OLED_GRAM[n][i],OLED_DATA);
}
}
SSD1306 Befehl
1: Befehl 0X81: Kontrast setzen. Enthält zwei Bytes, das erste 0X81 ist der Befehl, und das folgende ein Byte ist der Wert des Kontrastes gesetzt werden. Je größer dieser Wert gesetzt wird,je heller der Bildschirm wird.
2: Befehl 0XAE/0XAF: 0XAE zum Ausschalten des Anzeigebefehls; 0XAF zum Einschalten des Anzeigebefehls.
3: Befehl 0X8D: enthält 2 Bytes, das erste ist das Befehlswort, das zweite ist der gesetzte Wert, das zweite Byte von BIT2 zeigt den Schaltzustand der Ladepumpe an, das Bit ist 1,Die Ladepumpe ist eingeschaltet, und 0 ist ausgeschaltet. Wenn das Modul initialisiert wird, muss dies aktiviert sein, sonst sehen Sie die Bildschirmanzeige nicht.
4: Befehl 0XB0~B7: Wird verwendet, um die Seitenadresse festzulegen, und die unteren drei Ziffern entsprechen der Seitenadresse des GRAM.
5: Befehl 0X00~0X0F: Bei der Anzeige werden die unteren vier Ziffern der Startspalte festgelegt.
6: Befehl 0X10~0X1F: Wird verwendet, um die Startspaltenadresse des Displays vier Stellen höher zu setzen.
Für weitere Befehle, wenden Sie sich bitte an diese, es wird dringend empfohlen, es zu sehen, es ist sehr detailliert: SSD1306 (OLED-Treiberchip) Anweisungen im Detail
Nach der Einführung der Arbeitsmodus und Treiber-Chip, können wir mit diesem IIC OLED-Modul beginnen
Detaillierter Code
#define OLED_CMD 0 // schreiben Sie den Befehl
#define OLED_DATA 1 //Daten schreiben
Initialisieren der OLED
Initialisieren der SSD1306
invalid OLED_Init (invalid)
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); Aktivieren der Uhr am A-Port
Das System wird von einem anderen System ausgestaltet.
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; Ausgang von Push-Pull
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; Geschwindigkeit 50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); Initialisieren des GPIO
GPIO_SetBits ((GPIOA,GPIO_Pin_5 und GPIO_Pin_7);
Verzögerung_ms(200);
OLED_WR_Byte ((0xAE,OLED_CMD);//-- Anzeige ausgeschaltet
OLED_WR_Byte ((0x00,OLED_CMD);//---Einstellung der unteren Spaltenadresse
OLED_WR_Byte ((0x10,OLED_CMD);//---die Adresse der hohen Spalte festlegen
OLED_WR_Byte ((0x40,OLED_CMD);//--Startzeilenadresse festlegen
OLED_WR_Byte ((0xB0,OLED_CMD);//--Seitenadresse festlegen
OLED_WR_Byte ((0x81,OLED_CMD); // Vertragssteuerung
Die Anwendungsbereiche sind folgende:
OLED_WR_Byte ((0xA1,OLED_CMD);//Remap des Satzsegments
Die Anzeige ist in der Tabelle zu sehen.
Einheitliche Anwendungen für die Bereitstellung von Anwendungen für die Bereitstellung von Anwendungen für die Bereitstellung von Anwendungen für die Bereitstellung von Daten
OLED_WR_Byte ((0x3F,OLED_CMD);
OLED_WR_Byte ((0xC8,OLED_CMD);//Com-Scanrichtung
OLED_WR_Byte ((0xD3,OLED_CMD);//-set display offset
Die Anwendungsbereiche sind folgende:
OLED_WR_Byte ((0xD5,OLED_CMD);//set osc division
Einheitliche Datenbank für die Bereitstellung von Daten über die Datenbank
OLED_WR_Byte ((0xD8,OLED_CMD);//Ausgeschalteten Bereichsfarbmodus
Die Anwendungsbereiche sind folgende:
OLED_WR_Byte ((0xD9,OLED_CMD);//Stellen Sie die Vorladezeit fest
Die Anwendungsbereiche sind folgende:
OLED_WR_Byte ((0xDA,OLED_CMD);//set com pin Konfiguration
Die Anwendungsbereiche sind folgende:
Die in Absatz 1 Buchstabe b genannten Daten werden in der Tabelle 1 aufgeführt.
Die Anwendungsbereiche sind folgende:
OLED_WR_Byte ((0x8D,OLED_CMD);//Einrichtung der Ladepumpe aktiviert
Die Anwendungsbereiche sind folgende:
OLED_WR_Byte ((0xAF,OLED_CMD);//-- OLED-Panel einschalten}
OLED_Clear(); Löschen Sie den Bildschirm, es wird empfohlen, den Bildschirm zuerst zu reinigen, nachdem jede Initialisierung abgeschlossen ist
Bildschirm löschen Funktion, nachdem Sie den Bildschirm gelöscht haben, ist der gesamte Bildschirm schwarz!
Nicht in Betrieb genommen
{
u8 i, n;
für ((i=0; i<8; i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); Adresse der Seite festlegen (0~7)
OLED_WR_Byte (0x00,OLED_CMD); Stellen Sie die Anzeigestelle Spalte niedrigste Adresse ein
OLED_WR_Byte (0x10,OLED_CMD); Stellen Sie die Anzeigeposition Spaltenhöhe-Adresse ein
für ((n=0; n<128; n++)OLED_WR_Byte(0,OLED_DATA);
} // Das Display aktualisieren
}
In der Selbstmodul wir normalerweise verwenden, gibt es zwei übliche Möglichkeiten, die modulare zu nehmen, eine ist 6 * 8, und die andere ist 8 * 16,Das erste ist, die gewünschten Zeichen aus einer rechteckigen Tabelle mit 8 Zeilen und 6 Spalten zu nehmen., und die zweite ist, die Zeichen in einer rechteckigen Tabelle mit 16 Zeilen und 8 Spalten zu entfernen.Platz für die nächste Seite muss verwendet werdenWir haben also die Schriftgröße, die wir normalerweise verwenden, natürlich, das sind allgemein verwendete Schriftgrößen, wir können auch unsere eigene Lieblingsschriftgröße durch Zeichenmodulationssoftware erstellen.
/* Zeigt ein Zeichen an der angegebenen Stelle an, einschließlich einiger Zeichen
x:0~127
y:0~63
Größe: Schriftart 16/12*/ auswählen
Die in Absatz 1 Buchstabe b genannten Anforderungen gelten für die Berechnung der Leistungsspiegel.
{
unsignierte char c=0,i=0;
c=chr-' '; Der Versetzungswert kann aus dem Schriftmuster ermittelt werden, das erste ist " ", und der entsprechende Zeichen kann durch Subtrahieren ermittelt werden
if(x>Max_Column-1) {x=0; y=y+2; } //Max_Column: Höchstspalte: 128; x: Anzahl der Spalten; y: Anzahl der Seiten
if(Char_Size ==16) // In diesem Fall ist die gleiche Spalte von zwei Seiten erforderlich, und die Punktmatrix von 8*16 ist erforderlich
{
OLED_Set_Pos(x,y); Wenn x = y = 2, dann setzen Sie es auf Spalte 3 auf Seite 3, Hinweis: es gibt nur acht Zeilen pro Seite
für ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i],OLED_DATA); Durch Inkrement des i werden die Punkte in einer Schleife gezogen und alle 8 Zeilen der zweiten Spalte auf Seite 2 in die Daten eingetragen
OLED_Set_Pos(x,y+1); Da die Anzahl der Punkte nicht ausreicht, müssen Sie die Punkte in Spalte 2 auf Seite 3 fortsetzen
für ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i+8],OLED_DATA); Die Zeichnung wird bis zum Ende von Punkt 16 fortgesetzt.
}
andere
{
OLED_Set_Pos ((x,y); 6x8 Punktmatrix, keine Notwendigkeit für andere Seiten, um die Malerei fortzusetzen
für ((i=0; i<6; i++)
OLED_WR_Byte ((F6x8[c][i],OLED_DATA); In einem zweidimensionalen Array steuert C die Zeilen und I die Spalten, so dass keine anderen Operationen erforderlich sind, um die Zeichnung zu beenden
}
}
Das folgende if(x>120) ist kein Fehler, weil das vorherige x+=8; Es gibt eine Erklärung in den folgenden Notizen, so dass Sie darüber nachdenken können.
void OLED_ShowString ((u8 x,u8 y,u8 *chr,u8 Char_Size) // Zeigt die Zeichenfolge an
{
unsignierte char j=0;
while (chr[j]!='0') // Überprüfen Sie, ob die Zeichenfolge endet
{
OLED_ShowChar ((x,y,chr[j],Char_Size); Zeichnen Sie die Zeichen nacheinander
x + = 8; x ist auf eine Spalte gesetzt, die Größe eines Zeichen ist 8 * 16, das heißt, die Zeile ist 16 und die Spalte ist 8, und jedes Mal, wenn es als eine angezeigt wird, müssen Sie 8 Spalten in die höhere Spalte zu bewegen
wenn(x>120) {x=0; y+=2; } // Das Maximum ist 128 Spalten, wenn es überschritten wird, müssen Sie von der null Spalte wieder beginnen, weil Sie andere Seiten benötigen, um das Malen zu diesem Zeitpunkt fortzusetzen,Um Überschneidungen zu vermeiden, brauchen Sie y + = 2.
j++; Zeichnen Sie Zeichenfolgen in einer Schleife
}
}
2 Zahlen werden angezeigt, beide im folgenden Code geschrieben, und es sollte beachtet werden, dass das "" unten den ASCII-Wert von 32 darstellt
m^n Funktion
u32 oled_pow ((u8 m,u8 n)
{
u32 Ergebnis=1;
während ((n--) Ergebnis*=m;
Ergebnis der Rückgabe;
}
Anzeigen von 2 Zahlen
x,y: Startkoordinaten
len: Anzahl der Ziffern der Zahl
Größe: die Schriftgröße
Modus: Modus 0, Füllmodus; 1. Überlagerungsmodus
Num: numerischer Wert (0~4294967295);
Die in Absatz 1 genannten Anforderungen gelten nicht für die Berechnung der Leistungsschwelle.
{
u8 t,temp;
u8 enshow=0;
für t=0; t { Die Kommission wird die Kommission übermitteln, wenn sie dies wünscht. wenn (Anzeige) { wenn ((temp==0) { Die in Absatz 1 Buchstabe b genannten Anforderungen gelten für die Berechnung der Leistungsschwelle. fortfahren; }anders erscheint=1; } OLED-Display Char ((x+(Größe2/2) *t,y,temp+'0',Größe2); } Die oben genannten mehrere sind unsere grundlegendsten Verwendung, einige Xi wollen es verwenden, um mehr verschiedene Operationen abzuschließen, Folgendes ist, vor der Einführung,Zuerst stellen wir unsere gängige Modellierungssoftware vor.. PC auf LCD 2002 So geht das! Wenn wir es verwenden, öffnen wir zuerst die Datei in der linken oberen Ecke und erstellen Sie eine neue. geben Sie unsere Breite und Höhe, 6 * 8 oder 8 * 16 basieren darauf, um die Form zu nehmen, können Sie die Größe selbst festlegen.Da ist ein Getriebe in der oberen Ecke., und wir müssen es öffnen, sobald wir die Größe eingestellt haben. Sobald Sie alles oben haben, können Sie zeichnen, was Sie wollen. weil OLED 128 x 64 ist, ist unsere maximale Größe das, wir können auf 128 x 64 schreiben, zeichnen, usw., was herauskommt, ist ein ganzes Bild,Das ist auch eine Möglichkeit, den Bildschirm zu füllen, und es gibt eine Art Impression Software im Rücken, die als Bild erhalten wird, wie einige Anime-Charaktere. Jetzt, wo wir die Werkzeuge eingeführt haben, sind wir bereit, zu unseren Operationen zu gehen! 1Ziehen Sie eine gerade Linie. 2: Zeigen Sie Bilder (z. B. einige Anime-Charaktere) Es gibt noch mehr Möglichkeiten zu spielen, um es zu aktualisieren.
Normalerweise verwenden wir den gleichen Punkt wie in der Abbildung unten, wenn wir eine gerade Linie zeichnen wollen, bekommen wir immer einen Punkt, das ist, weil die Zeichengröße, die wir in der Regel verwenden ist 6 * 8 oder 8 * 16,und die Punktgröße im Inneren ist nicht voll des gesamten Rechtecks (oben erklärt), was wir tun müssen, ist unsere Charakter-Software zu öffnen und den Punkt größer zu machen!
Ansprechpartner: Mrs. Christina
Telefon: +8618922869670
Faxen: 86-755-2370-9419