Kod inicjalizacji wyświetlacza TFT LCD jest głównie używany do ustawiania parametrów roboczych i statusu wyświetlacza, aby zapewnić, że wyświetlacz może prawidłowo wyświetlać obrazy i tekst. Rola i zasada kodu inicjalizacji obejmują głównie następujące aspekty:
Reset sprzętowy
Na początku inicjalizacji zazwyczaj wykonywana jest operacja resetu sprzętowego (poprzez podciągnięcie pinu resetującego do stanu niskiego i wysokiego), co zapewnia rozpoczęcie działania wyświetlacza LCD od znanego stanu.
Konfiguracja interfejsu
Kod inicjalizacji zazwyczaj konfiguruje interfejs komunikacyjny (np. SPI, I2C lub interfejs równoległy) między wyświetlaczem LCD a mikrokontrolerem. Różne moduły LCD mogą obsługiwać różne interfejsy komunikacyjne, które muszą być poprawnie skonfigurowane podczas inicjalizacji, aby kolejne dane mogły być płynnie przesyłane.
Konfiguracja zasilania
LCD zazwyczaj muszą być skonfigurowane za pomocą parametrów zasilania, takich jak napięcie zasilania, napięcie polaryzacji i pompa ładująca. Konfiguracje te bezpośrednio wpływają na jasność, kontrast i stabilność wyświetlacza.
Ustawienia trybu wyświetlania
Obejmuje to ustawienie rozdzielczości ekranu, głębi kolorów, kierunku skanowania (poziomy lub pionowy), formatu pikseli (RGB565, RGB666 itd.) i innych parametrów związanych z wyświetlaniem obrazu.
Konfiguracja rejestru
Podczas procesu inicjalizacji określone wartości muszą zostać zapisane w różnych rejestrach sterujących wyświetlacza LCD, które kontrolują różne funkcje wyświetlacza, takie jak regulacja kontrastu, korekcja gamma, regulacja jasności, ustawienie formatu kolorów itp.
Wyczyść działanie ekranu
Na końcu inicjalizacji zazwyczaj wykonywana jest operacja czyszczenia, tzn. wszystkie piksele na ekranie zostają zmienione na czarne lub białe, aby mieć pewność, że ekran będzie czysty i wolny od resztek wyświetlanej zawartości.
Włączanie wyświetlacza
Po zakończeniu konfiguracji opisanej powyżej ostatnim krokiem jest zazwyczaj włączenie funkcji wyświetlania, tak aby ekran LCD mógł zacząć odbierać i wyświetlać dane obrazu.
Podsumowując
Kod inicjalizacji jest podstawą, aby wyświetlacz LCD mógł działać prawidłowo. Poprzez wykonanie kodu inicjalizacji, różne parametry operacyjne wyświetlacza LCD są ustawiane, aby zapewnić, że wyświetlacz działa w prawidłowym trybie i jest w stanie wyświetlać zawartość stabilnie i wyraźnie. Jeśli krok inicjalizacji jest niekompletny lub błędny, może to prowadzić do nieprawidłowości wyświetlania, takich jak brak możliwości wyświetlania obrazów, zniekształcenie zawartości wyświetlacza lub nieprawidłowe kolory.
Kod ILI9341V
//************* Start Initial Sequence **********//
LCD_CTRL_ILI9341(0xCF);
LCD_DATA_ILI9341(0x00);
LCD_DATA_ILI9341(0xC1);
LCD_DATA_ILI9341(0X30);
LCD_CTRL_ILI9341(0xED);
LCD_DATA_ILI9341(0x64);
LCD_DATA_ILI9341(0x03);
LCD_DATA_ILI9341(0X12);
LCD_DATA_ILI9341(0X81);
LCD_CTRL_ILI9341(0xE8);
LCD_DATA_ILI9341(0x85);
LCD_DATA_ILI9341(0x10);
LCD_DATA_ILI9341(0x78);
LCD_CTRL_ILI9341(0xCB);
LCD_DATA_ILI9341(0x39);
LCD_DATA_ILI9341(0x2C);
LCD_DATA_ILI9341(0x00);
LCD_DATA_ILI9341(0x34);
LCD_DATA_ILI9341(0x02);
LCD_CTRL_ILI9341(0xF7);
LCD_DATA_ILI9341(0x20);
LCD_CTRL_ILI9341(0xEA);
LCD_DATA_ILI9341(0x00);
LCD_DATA_ILI9341(0x00);
LCD_CTRL_ILI9341(0xC0); //Power control
LCD_DATA_ILI9341(0x21); //VRH[5:0]
LCD_CTRL_ILI9341(0xC1); //Power control
LCD_DATA_ILI9341(0x12); //SAP[2:0];BT[3:0]
LCD_CTRL_ILI9341(0xC5); //VCM control
LCD_DATA_ILI9341(0x40); //32
LCD_DATA_ILI9341(0x3c); //3//3c
LCD_CTRL_ILI9341(0xC7); //VCM control2
LCD_DATA_ILI9341(0X94); //0xb2//0x9c
LCD_CTRL_ILI9341(0x36); // Memory Access Control
LCD_DATA_ILI9341(0x08);
LCD_CTRL_ILI9341(0x3A);
LCD_DATA_ILI9341(0x55);
LCD_CTRL_ILI9341(0xB1);
LCD_DATA_ILI9341(0x00);
LCD_DATA_ILI9341(0x17);
LCD_CTRL_ILI9341(0xB6); // Display Function Control
LCD_DATA_ILI9341(0x0A);
LCD_DATA_ILI9341(0xA2);
LCD_CTRL_ILI9341(0xF6);
LCD_DATA_ILI9341(0x01);
LCD_DATA_ILI9341(0x30);
LCD_CTRL_ILI9341(0xF2); // 3Gamma Function Disable
LCD_DATA_ILI9341(0x00);
LCD_CTRL_ILI9341(0x26); //Gamma curve selected
LCD_DATA_ILI9341(0x01);
LCD_CTRL_ILI9341(0xE0); //Set Gamma
LCD_DATA_ILI9341(0x0F);
LCD_DATA_ILI9341(0x20);
LCD_DATA_ILI9341(0x1E);
LCD_DATA_ILI9341(0x07);
LCD_DATA_ILI9341(0x0A);
LCD_DATA_ILI9341(0x03);
LCD_DATA_ILI9341(0x52);
LCD_DATA_ILI9341(0X63);
LCD_DATA_ILI9341(0x44);
LCD_DATA_ILI9341(0x08);
LCD_DATA_ILI9341(0x17);
LCD_DATA_ILI9341(0x09);
LCD_DATA_ILI9341(0x19);
LCD_DATA_ILI9341(0x13);
LCD_DATA_ILI9341(0x00);
LCD_CTRL_ILI9341(0XE1); //Set Gamma
LCD_DATA_ILI9341(0x00);
LCD_DATA_ILI9341(0x16);
LCD_DATA_ILI9341(0x19);
LCD_DATA_ILI9341(0x02);
LCD_DATA_ILI9341(0x0F);
LCD_DATA_ILI9341(0x03);
LCD_DATA_ILI9341(0x2F);
LCD_DATA_ILI9341(0x13);
LCD_DATA_ILI9341(0x40);
LCD_DATA_ILI9341(0x01);
LCD_DATA_ILI9341(0x08);
LCD_DATA_ILI9341(0x07);
LCD_DATA_ILI9341(0x2E);
LCD_DATA_ILI9341(0x3C);
LCD_DATA_ILI9341(0x0F);
LCD_CTRL_ILI9341(0x11); //Exit Sleep
LCD_Delayms(120);
LCD_CTRL_ILI9341(0x29); //Display on