TFT LCD 디스플레이의 초기화 코드는 주로 디스플레이의 작동 매개변수와 상태를 설정하여 디스플레이가 이미지와 텍스트를 올바르게 표시할 수 있도록 하는 데 사용됩니다. 초기화 코드의 역할과 원리는 주로 다음과 같습니다.
하드웨어 재설정
초기화가 시작될 때 일반적으로 하드웨어 재설정 작업이 수행됩니다(재설정 핀을 낮음과 높음으로 잡음). 이를 통해 LCD가 알려진 상태에서 작동을 시작하도록 합니다.
인터페이스 구성
초기화 코드는 일반적으로 LCD와 마이크로컨트롤러 간의 통신 인터페이스(예: SPI, I2C 또는 병렬 인터페이스)를 설정합니다. LCD 모듈마다 지원하는 통신 인터페이스가 다를 수 있으며, 이후 데이터가 원활하게 전송될 수 있도록 초기화 과정에서 통신 인터페이스를 올바르게 설정해야 합니다.
전원 구성
LCD는 일반적으로 공급 전압, 바이어스 전압, 충전 펌프와 같은 전력 매개변수를 설정해야 합니다. 이러한 설정은 디스플레이의 밝기, 대비, 안정성에 직접적인 영향을 미칩니다.
디스플레이 모드 설정
여기에는 화면 해상도, 색상 깊이, 스캐닝 방향(가로 또는 세로), 픽셀 형식(RGB565, RGB666 등) 및 이미지 표시와 관련된 기타 매개변수 설정이 포함됩니다.
등록 구성
초기화 과정에서는 LCD의 다양한 제어 레지스터에 특정 값을 써야 합니다. 이 레지스터는 대비 조정, 감마 보정, 밝기 조정, 색상 형식 설정 등 디스플레이의 다양한 기능을 제어합니다.
선명한 화면 조작
초기화가 끝나면 일반적으로 지우기 작업이 수행됩니다. 즉, 화면의 모든 픽셀을 검은색 또는 흰색으로 설정하여 화면을 깨끗하고 잔여 디스플레이 콘텐츠가 없는 상태로 유지합니다.
디스플레이 켜기
위의 구성을 완료한 후 마지막 단계는 일반적으로 디스플레이 기능을 켜서 LCD가 이미지 데이터를 수신하고 표시할 수 있도록 하는 것입니다.
결론
초기화 코드는 LCD 디스플레이가 정상적으로 작동할 수 있는 기반입니다. 초기화 코드를 실행하면 LCD의 다양한 작동 매개변수가 설정되어 디스플레이가 올바른 모드에서 작동하고 안정적이고 선명하게 콘텐츠를 표시할 수 있도록 합니다. 초기화 단계가 불완전하거나 잘못되면 이미지 표시 불가, 디스플레이 콘텐츠 왜곡, 색상 오류 등 디스플레이 이상이 발생할 수 있습니다.
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