W tym artykule pokażemy jak poprawnie podłączyć i zaprogramować wyświetlacz LCD GMG12864-06 SPI. Do skomunikowania wyświetlacza z mikrokontrolerem użyjemy interfejsu SPI.
Spis treści
- Krótki opis
- Specyfikacja
- Kod programu
- Pliki źródłowe
Krótki opis
Wyświetlacz posiada wbudowane podświetlenie w celu polepszenia jakości wyświetlanych informacji. Urządzenie do komunikacji wykorzystuje interfejs SPI. W projekcie zostanie wykorzystana biblioteka u8g2, która posiada szeroki wachlarz możliwości edycji tekstu. Dodatkowym atutem wyświetlacza jest możliwość ustawienia kontrastu, dzięki czemu jesteśmy w stanie uzyskać dokładny i widoczny obraz dla różnych warunków zewnętrznego oświetlenia.
Specyfikacja
W projekcie wykorzystano następujące elementy :
- Arduino NANO,
- 7 kabli typu męsko-żeńskiego,
- rezystor 10 Ω służacy do połączenia katody podświetlacza z masą układu,
- przylutowane złącze szplikowe (niewymagane).
Schemat połączeń
Tabela połączeń odpowiednich pinów przedstawia się następująco:
Wyświetlacz LCD | Arduino |
CS | D10 |
RSE | D8 |
RS | D9 |
SCL | D13 |
SI | D11 |
VDD | 3.3V |
VSS | GND |
A | Połączenie kablem z VDD |
K | Połączenie za pomocą rezystora 10Ω do VSS |
Kod programu
#include <U8g2lib.h> // Biblioteka do obsługi wyświetlacza LCD #include <SPI.h> // Biblioteka do obsługi komunikacji SPI /* Zdefiniowanie pinów do komunikacji przez interfejs SPI */ #define SCL 13 #define SI 11 #define CS 10 #define RS 9 #define RSE 8 /*-------------*/ U8G2_ST7565_ERC12864_1_4W_SW_SPI u8g2(U8G2_R0, SCL, SI, CS, RS, RSE); // Stworzenie obiektu dla ekranu LCD GMG12864-06D SPI v2.0
Na początku należy zaimportować do programu biblioteki służące do obsługi wyświetlacza i interfejsu SPI. Następnie definiujemy piny i tworzymy obiekt, którego argumenty to odpowiednio podłączone piny.
void setup(void) { u8g2.begin(); // Inicjalizacja ekranu u8g2.setContrast (10); // Ustawienie kontrastu na 10 u8g2.enableUTF8Print(); // Urochomienie możliwości wyświetlania }
Po stworzeniu obiektu przechodzimy do inicjalizacji ekranu za pomocą standardowej funkcji u8g2.begin(). Następnie ustawiamy odpowiedni kontrast (w moim przypadku jest to wartość 10, ale może się zmieniać w zależności od zewnętrznego oświetlenia). Na samym końcu włączamy możliwość wyświetlania obrazu na wyświetlaczu.
void loop(void) { u8g2.firstPage(); // Stworzenie pierwszej strony na wyświetlaczu do { // Wyświetlaj dopóki u8g2.setFont(u8g2_font_luBS10_tf); // Ustawienie czcionki Luicida o rozmiarze 10 pikseli u8g2.drawFrame(0,0,128,64); // Narysowanie obwódki o szerokości 64 i długości 128 pikseli u8g2.setCursor(6, 25); // Ustawienie kursora na pozycję x = 6, y = 25 u8g2.print("HELLO WORLD!"); // Wyświetlenie napisu u8g2.setCursor(6, 40); // Ustawienie kursora na pozycję x = 6, y = 25 u8g2.drawLine(6, 35, 120, 35); // Narysowanie linii o początku x = 6, y = 3 i końcu x = 120, y = 35 u8g2.setCursor(14, 55); // Ustawienie kursora na pozycję x = 14, y = 55 u8g2.print("AJMAKER.PL"); // Wyświetlenie napisu } while ( u8g2.nextPage() ); // Pętla wykonująca się dopóki funkcja zwraca wartość 1 delay(1000); // Czekaj 1000ms }
Na początku niezbędne do wyświetlenia tekstu jest stworzenie strony początkowej. Funkcja setFont() służy do wyboru rozmiaru i rodzaju czcionki (pełną listę czcionek znajdziecie tutaj). Pozycja kursora została ustawiona doświadczalnie w celu uzyskania wycentrowanego napisu. Sekwencję powtarzamy dopóki zostanie spełniony warunek while (u8g2.nextPage()) sprawdzający, czy nadal znajdujemy się na aktualnej stronie.