Zrozumienie zasady wyświetlacza OLED - różne sposoby korzystania z modułów OLED
Moduł OLED posiada cztery tryby pracy, a mianowicie 6800 i 8080 równoległe interfejsy, 4-przewodowy seryjny tryb interfejsu SPI i tryb interfejsu IIC.Relacja między ustawieniami BS1/BS2 a trybem interfejsu modułu jest przedstawiona w poniższej tabeli::
Definicja domyślna modułu OLED SAEF Technology to BS0 do GND, BS1 i BS2 do VCC (tryb 8080), jeśli chcesz go ustawić na inne tryby,musisz zmodyfikować ustawienia BS0-BS2 z lutownicy na tylnej stronie OLED(Zmiana sprzętu)
Z schematu wiemy, że jest w sumie 16 szpilów, a z 16 linii użyliśmy tylko 15 szpilów, a jedna z nich wisząca.i pozostało 13W różnych trybach, liczba linii sygnałowych jest różna, w trybie 8080 wszystkie 13 są potrzebne, z których jeden jest powszechny, czyli reset line RST (RES),które możemy bezpośrednio podłączyć do resetu MCU (aby potwierdzić, że metoda resetu jest taka sama)W trybie IIC potrzebne są tylko 2 wiersze!
W trybie pracy IIC potrzeba tylko dwóch linii, a trybem pracy IIC jest użycie dwóch przewodów do symulacji IIC do uzyskania danych.
Kontroler OLED jest SSD1306, czyli goły ekran jest napędzany przez SSD1306, który jest również powszechnie stosowanym układem sterowania LED.
Pamięć wideo modułu OLED
Sam OLED nie ma pamięci wideo, a jego pamięć wideo zależy od SSD1306.Każda strona zawiera 128 bajtów, w sumie 8 stron, co jest dokładnie 128 * 64 rozmiar macierzy kropek.
Jednakże, ponieważ OLED nie może kontrolować jednej matrycy kropkowej naraz, może kontrolować tylko 8 kropkowej matrycy.
Ponieważ każdy zapis jest zapisywany w bajtach, istnieje problem, jeśli użyjemy trybu tylko zapisu do obsługi modułu, wtedy musimy zapisywać 8 punktów naraz, więc kiedy rysujemy punkt,Musimy dowiedzieć się obecny stan każdego bitu bajt gdzie punkt do ustawienia jest zlokalizowany (0/1W przeciwnym razie pisane dane zastąpią poprzedni stan, a wynikiem będzie wyświetlanie niektórych punktów, które nie muszą być wyświetlane,lub te, które powinny być wyświetlane nie są wyświetlaneW trybie czytelnym możemy najpierw odczytać bajt, który ma zostać napisany, uzyskać aktualną sytuację, a następnie zapisać go do grama po zmodyfikowaniu bitów, które mają zostać przepisane,tak, że nie wpłynie to na poprzednią sytuacjęJednakże wymaga to możliwości odczytu GRAM, w trybie 3-przewodowym lub 4-przewodowym SPI moduł nie obsługuje odczytu, a tryb odczytu->-do-> zapisu jest również stosunkowo powolny.
Używamy więc metody tworzenia OLED GRAM (w sumie 128 bajtów) wewnątrz STM32 i przy każdej modyfikacji, tylko modyfikujemy GRAM na STM32 (w rzeczywistości SRAM), a po modyfikacjiwpisz GRAM na STM32 do OLED GRAM jednocześnieOczywiście metoda ta ma również wady, czyli dla tych mikrokontrolerów o bardzo małej pamięci SRAM (takich jak seria 51), jest bardziej uciążliwa.
Pamięć wideo OLED
Format przechowywania jest następujący:
/0 1 2 3... 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];
Aktualizuj pamięć wideo na ekranie LCD
nieważne OLED_Refresh_Gram (nieważne)
{
u8 i, n;
dla ((i=0; i<8; i++)
{
Odpowiedź na pytanie:
OLED_WR_Byte (0x00,OLED_CMD); Ustawić pozycję wyświetlania dolny adres kolumny
OLED_WR_Byte (0x10,OLED_CMD); Ustawić pozycję wyświetlania adres wysokości kolumny
dla ((n=0; n<128; n++)OLED_WR_Byte ((OLED_GRAM[n][i],OLED_DATA);
}
}
Polecenie SSD1306
1Komanda 0X81: Ustaw kontrast. Zawiera dwa bajty, pierwszy 0X81 to polecenie, a kolejny jeden bajt jest wartością kontrastu, który ma być ustawiony. Im większa jest ta wartość, tym większa jest wartość kontrastu.im jaśniejszy będzie ekran.
2: polecenie 0XAE/0XAF: 0XAE do wyłączenia polecenia wyświetlania; 0XAF do włączenia polecenia wyświetlania.
3: polecenie 0X8D: zawiera 2 bajty, pierwszy jest słowem polecenia, drugi jest wartością ustawioną, drugi bajt BIT2 wskazuje stan przełączania pompy ładowania, bit wynosi 1,pompa ładowania jest włączona, a 0 jest wyłączone. Gdy moduł jest inicjowany, musi być włączony, w przeciwnym razie nie zobaczysz wyświetlacza ekranu.
4: polecenie 0XB0~B7: Używane do ustawienia adresu strony, a dolne trzy cyfry odpowiadają adresowi strony GRAM.
5: polecenie 0X00~0X0F: Używane do ustawienia dolnych czterech cyfr adresu kolumny początkowej podczas wyświetlania.
6: polecenie 0X10~0X1F: Używane do ustawienia adresu kolumny startowej wyświetlacza o cztery cyfry wyżej.
Aby uzyskać więcej poleceń, prosimy o zapoznanie się z tym, zaleca się, aby zobaczyć go, jest bardzo szczegółowy: SSD1306 (OLED chip sterownika) instrukcje w szczegółach
Po wprowadzeniu trybu pracy i chipa sterownika, możemy zacząć używać tego modułu IIC OLED
Szczegółowy kod
#define OLED_CMD 0 // zapisz polecenie
#define OLED_DATA 1 //Wpisz dane
Inicjalizować OLED
Inicjalizuj SSD1306
nieważne OLED_Init (nieważne)
GPIO_InitTypeDef GPIO_InitStructure
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, Włączony); Włączyć zegar na porcie A
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; wyjście Push-pull
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; Prędkość 50MHz
GPIO_Init ((GPIOA, &GPIO_InitStructure); Inicjalizować GPIO
GPIO_SetBits ((GPIOA,GPIO_Pin_5 w GPIO_Pin_7);
delay_ms(200);
W przypadku, gdy urządzenie jest wyłączone, urządzenie może być wyłączone.
Odpowiedź na pytanie:
Odpowiedź na pytanie:
Odpowiedź na pytanie:
Odpowiedź na pytanie:
Zmiany w systemach operacyjnych
Zmiany i zmiany w systemie monitoringu
Zmiany zestawu segmentów
Zmiany pomiarów
Zmiany zestawu w celu uzyskania wyników
Zastosowanie:
Odpowiedź na pytanie:
Zmiana widzenia
Zmiany i zmiany:
Zmiany w zakresie opcji
Zmiany i zmiany:
W przypadku, gdy urządzenie jest wyłączone w trybie kolorów, należy wyłączyć tryb kolorów.
Zmiany i zmiany:
W przypadku, gdy urządzenie nie jest w stanie wykonać wymaganego pomiaru, należy określić, czy jest ono w stanie wykonać wymagane pomiary.
Zmiany i zmiany w systemie
Wymagania dotyczące optymalizacji
Zmiany i zmiany w systemie
W przypadku, gdy wprowadzone są nowe urządzenia, w przypadku gdy wprowadzone są nowe urządzenia, należy wprowadzić nowe urządzenia.
Zmiany i zmiany:
Wymagania w odniesieniu do urządzeń do ładowania
Wykorzystanie urządzeń do monitorowania
Wykorzystanie urządzeń oświetleniowych (z wyłączeniem urządzeń oświetleniowych)
OLED_Clear ((); Wyczyść ekran, zaleca się, aby oczyścić ekran najpierw po zakończeniu każdej inicjalizacji
Funkcja oczyszczania ekranu, po oczyszczeniu ekranu cały ekran jest czarny!
nieważne OLED_Clear (nieważne)
{
u8 i, n;
dla ((i=0; i<8; i++)
{
Odpowiedź na pytanie:
OLED_WR_Byte (0x00,OLED_CMD); Ustawić pozycję wyświetlania dolny adres kolumny
OLED_WR_Byte (0x10,OLED_CMD); Ustawić pozycję wyświetlania adres wysokości kolumny
dla n=0; n<128; n++)OLED_WR_Byte ((0,OLED_DATA);
} // Aktualizuj wyświetlacz
}
W samomodule, który zwykle używamy, istnieją dwa typowe sposoby, aby wziąć moduł, jeden jest 6 * 8, a drugi jest 8 * 16,Pierwszym z nich jest wyjęcie znaków, które chcemy w prostokątnej tabeli z 8 wierszy i 6 kolumnami, a drugie polega na wyjęciu znaków z prostokątnej tabeli z 16 wierszami i 8 kolumnami.przestrzeń do następnej strony musi być wykorzystanaMamy więc rozmiar czcionki, którą zazwyczaj używamy, oczywiście, są to powszechnie używane rozmiary czcionki, możemy również zrobić własny ulubiony rozmiar czcionki za pomocą oprogramowania modulacji znaków.
/* Wyświetla znak w określonym miejscu, w tym niektóre znaki
x:0~127
y:0~63
rozmiar: wybierz czcionkę 16/12*/
nieważne OLED_ShowChar ((u8 x,u8 y,u8 chr,u8 Char_Size)
{
niepodpisany char c=0,i=0;
c=chr-' '; Wartość przesunięcia można uzyskać z wzoru czcionki, pierwsza z nich to " ", a odpowiedni znak można uzyskać poprzez odjęcie
if(x>Max_Column-1) {x=0; y=y+2; } //Max_Column: Maksymalna kolumna: 128; x: ustawić liczbę kolumn; y: Ustawić liczbę stron
if(Char_Size ==16) // W tym przypadku wymagana jest ta sama kolumna z dwóch stron, a macierza kropkowa 8*16
{
OLED_Set_Pos ((x,y); Jeśli x = y = 2, a następnie ustawić go w kolumnie 3 na stronie 3, uwaga: istnieje tylko osiem wierszy na stronie
dla ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i],OLED_DATA); poprzez zwiększenie liczby i, kropki są rysowane w pętli, a wszystkie 8 wierszy drugiej kolumny na stronie 2 są zapisywane do danych
OLED_Set_Pos(x,y+1); Ponieważ liczba kropek nie jest wystarczająca, należy kontynuować kropki w kolumnie 2 na stronie 3
dla ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i+8],OLED_DATA); Kontynuuj kończenie rysunku do końca punktu 16
}
inne
{
OLED_Set_Pos ((x,y); macierzy kropkowej 6x8, nie ma potrzeby dalszych stron do kontynuowania malowania
dla ((i=0; i<6; i++)
OLED_WR_Byte ((F6x8[c][i],OLED_DATA); W dwuwymiarowym zestawie, C kontroluje wiersze, a I kontroluje kolumny, więc do zakończenia rysunku nie są potrzebne żadne inne operacje
}
}
Następujące if(x>120) nie jest błędem, ponieważ poprzednie x+=8; Jest wyjaśnienie w poniższych uwagach, więc możesz o tym pomyśleć.
void OLED_ShowString ((u8 x,u8 y,u8 *chr,u8 Char_Size) // Wyświetla ciąg
{
niepodpisany char j=0;
while (chr[j]!='0') // Sprawdź, czy ciąg kończy się
{
OLED_ShowChar ((x,y,chr[j],Char_Size); narysować znaki jeden po drugim
x+=8; x jest ustawione na kolumnę, rozmiar znaku jest 8*16, czyli wiersz jest 16 i kolumna jest 8, i za każdym razem, gdy jest wyświetlana jako jeden, trzeba przenieść 8 kolumn do wyższej kolumny
if(x>120) {x=0; y+=2; } // Maksymalny wynosi 128 kolumn, jeśli zostanie przekroczony, musisz zacząć od kolumny zerowej ponownie, ponieważ potrzebujesz innych stron, aby kontynuować malowanie w tym czasie,aby uniknąć nakładania się, potrzebujesz y + = 2.
j++; narysowanie ciągów w pętli
}
}
Wyświetlane są 2 liczby, obie zapisane w poniższym kodzie, i należy zauważyć, że poniższe "" reprezentuje wartość ASCII 32
m^n funkcja
U32 oled_pow ((u8 m,u8 n)
{
u32 wynik=1;
podczas gdy n-- wynik*=m;
wynik zwrotu;
}
Wyświetlanie 2 liczb
x,y: współrzędne początkowe
len: liczba cyfr numeru
rozmiar: rozmiar czcionki
tryb: tryb 0, tryb napełnienia; 1. tryb nakładania
num: wartość numeryczna (0~4294967295);
nieważne OLED_ShowNum ((u8 x,u8 y,u32 num,u8 len,u8 size2)
{
u8 t,temp;
u8 enshow=0;
dla t=0; t { temp=(num/oled_pow(10,len-t-1))%10; if(wskazać==0&&t<(len-1)) { jeśli ((temp==0) { Wymagania w zakresie monitorowania i monitorowania kontynuować; {C:$0000FF}inaczej pokaż=1; } Wykrycie wzorów z systemów OLED Char ((x+(size2/2) *t,y,temp+'0',size2); } Powyższe kilka są nasze najbardziej podstawowe wykorzystanie, niektóre Xi chcą użyć go do zakończenia więcej różnych operacji, następuje, przed wprowadzeniem,Najpierw przedstawimy nasze powszechnie używane oprogramowanie do modelowania. PC do LCD 2002 Oto jak to działa! Kiedy używamy go, najpierw otworzymy plik w lewym górnym rogu i utworzymy nowy. Wprowadź naszą szerokość i wysokość, 6 * 8 lub 8 * 16 są oparte na tym, aby wziąć formę, można ustawić rozmiar samodzielnie.W górnym rogu jest coś w rodzaju biegówJak pokazano na rysunku: Kiedy już wszystko masz na górze, możesz narysować, co chcesz. ponieważ OLED to 128 x 64, nasz maksymalny rozmiar to ten, możemy pisać na 128 x 64, narysować itp, co wychodzi jest cały obraz,który jest również sposobem na wypełnienie ekranu, a z tyłu znajduje się rodzaj oprogramowania do odwzorowania, które jest uzyskiwane jako obraz, na przykład niektóre postacie anime. Teraz, gdy wprowadziliśmy narzędzia, jesteśmy gotowi do przejścia do naszych operacji! 1/ Narysować prostą linię 2: Pokaż zdjęcia (np. niektóre postacie z anime) Jest więcej sposobów na grę, aby zaktualizować następny.
Zazwyczaj używamy tego samego punktu, co na rysunku poniżej, kiedy chcemy narysować prostą linię, zawsze otrzymujemy punkt, ponieważ rozmiar znaku, który zazwyczaj używamy to 6 * 8 lub 8 * 16,i wielkość punktu wewnątrz nie jest pełna całego prostokąta (wyjaśnione powyżej), to co musimy zrobić to otworzyć nasze oprogramowanie postaci i zrobić punkt większy!
Osoba kontaktowa: Mrs. Christina
Tel: +8618922869670
Faks: 86-755-2370-9419