Il codice di inizializzazione del display LCD TFT viene utilizzato principalmente per impostare i parametri di funzionamento e lo stato del display, al fine di garantire la corretta visualizzazione di immagini e testo. Il ruolo e il principio del codice di inizializzazione includono principalmente i seguenti aspetti:
Ripristino hardware
All'inizio dell'inizializzazione, di solito viene eseguita un'operazione di reset hardware (tirando il pin di reset verso il basso e verso l'alto), che garantisce che il display LCD inizi a funzionare da uno stato noto.
Configurazione dell'interfaccia
Il codice di inizializzazione solitamente configura l'interfaccia di comunicazione (ad esempio SPI, I²C o parallela) tra il display LCD e il microcontrollore. Moduli LCD diversi possono supportare interfacce di comunicazione diverse, che devono essere configurate correttamente durante l'inizializzazione affinché i dati successivi possano essere trasferiti senza problemi.
Configurazione Potenza
Gli LCD di solito devono essere configurati con parametri di potenza come tensione di alimentazione, tensione di polarizzazione e pompa di carica. Queste configurazioni influiscono direttamente su luminosità, contrasto e stabilità del display.
Impostazioni della modalità di visualizzazione
Ciò include l'impostazione della risoluzione dello schermo, della profondità del colore, della direzione di scansione (orizzontale o verticale), del formato pixel (RGB565, RGB666, ecc.) e di altri parametri relativi alla visualizzazione delle immagini.
Configurazione del registro
Durante il processo di inizializzazione, è necessario scrivere valori specifici nei vari registri di controllo del display LCD, che gestiscono le varie funzioni del display, come la regolazione del contrasto, la correzione gamma, la regolazione della luminosità, l'impostazione del formato colore, ecc.
Funzionamento a schermo pulito
Al termine dell'inizializzazione solitamente viene eseguita un'operazione di pulizia, ovvero tutti i pixel sullo schermo vengono impostati su neri o bianchi per garantire che lo schermo sia pulito e privo di contenuti residui.
Accensione del display
Dopo aver completato la configurazione di cui sopra, l'ultimo passaggio consiste solitamente nell'attivare la funzione di visualizzazione in modo che il display LCD possa iniziare a ricevere e visualizzare i dati delle immagini.
Riassumere
Il codice di inizializzazione è la base per il corretto funzionamento del display LCD. Eseguendo il codice di inizializzazione, vengono impostati diversi parametri operativi del display LCD per garantire che il display funzioni nella modalità corretta e sia in grado di visualizzare i contenuti in modo stabile e chiaro. Se la fase di inizializzazione è incompleta o errata, potrebbero verificarsi anomalie di visualizzazione, come l'impossibilità di visualizzare le immagini, la distorsione dei contenuti o la visualizzazione di colori non corretti.
Codice 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