Code: Select all
/***************************** ILI9488 *****************************/
/**
* @brief Move cursor to designated coordinates, in preparation for drawing on display.
* @param x : X coordinate. Range shoud be [0 - TFT_DISP_WIDTH-1]
* @param y : Y coordinate. Range shoud be [0 - TFT_DISP_HEIGHT-1]
*/
void TFT_Set_Address_ILI9488(unsigned int x, unsigned int y) {
TFT_CS = 0;
TFT_Set_Index_Ptr(0x2A);
TFT_Write_Command_Ptr(x>>8);
TFT_Write_Command_Ptr(x);
TFT_Write_Command_Ptr(0x1);
TFT_Write_Command_Ptr(0xDF);
TFT_Set_Index_Ptr(0x2B);
TFT_Write_Command_Ptr(y>>8);
TFT_Write_Command_Ptr(y);
TFT_Write_Command_Ptr(0x1);
TFT_Write_Command_Ptr(0x3F);
TFT_Set_Index_Ptr(0x2C);
TFT_CS = 1;
}
/**
* @brief Configures sets of TFT controllers register to work with parameters
* assigneg in TFT_Init. Also it resets the TFT controller.
*/
static void TFT_Reset_ILI9488(){
// Hold in reset
TFT_RST = 0;
// Set reset pin as output
TFT_RST_Direction = 0;
// Enable data access
TFT_RS = 1;
// Set RS pin as output
TFT_RS_Direction = 0;
// Disable LCD
TFT_CS = 1;
// Set LCD CS pin as output
TFT_CS_Direction = 0;
TFT_RD_Direction = 0;
TFT_WR_Direction = 0;
TFT_RD = 1;
TFT_WR = 1;
TFT_RST = 1;
Delay_100ms();
TFT_RST = 0;
Delay_100ms();
TFT_RST = 1;
Delay_100ms();
TFT_CS = 0;
//0xE0, 15, 0x00, 0x07, 0x10, 0x09, 0x17, 0x0B, 0x40, 0x8A, 0x4B, 0x0A, 0x0D, 0x0F, 0x15, 0x16, 0x0F,
TFT_Set_Index_Ptr(0xE0);
TFT_Write_Command_Ptr(0x00);
TFT_Write_Command_Ptr(0x07);
TFT_Write_Command_Ptr(0x10);
TFT_Write_Command_Ptr(0x09);
TFT_Write_Command_Ptr(0x17);
TFT_Write_Command_Ptr(0x0B);
TFT_Write_Command_Ptr(0x40);
TFT_Write_Command_Ptr(0x8A);
TFT_Write_Command_Ptr(0x4B);
TFT_Write_Command_Ptr(0x0A);
TFT_Write_Command_Ptr(0x0D);
TFT_Write_Command_Ptr(0x0F);
TFT_Write_Command_Ptr(0x15);
TFT_Write_Command_Ptr(0x16);
TFT_Write_Command_Ptr(0x0F);
//0xE1, 15, 0x00, 0x1A, 0x1B, 0x02, 0x0D, 0x05, 0x30, 0x35, 0x43, 0x02, 0x0A, 0x09, 0x32, 0x36, 0x0F,
TFT_Set_Index_Ptr(0XE1);
TFT_Write_Command_Ptr(0x00);
TFT_Write_Command_Ptr(0x1A);
TFT_Write_Command_Ptr(0x1B);
TFT_Write_Command_Ptr(0x02);
TFT_Write_Command_Ptr(0x0D);
TFT_Write_Command_Ptr(0x05);
TFT_Write_Command_Ptr(0x30);
TFT_Write_Command_Ptr(0x35);
TFT_Write_Command_Ptr(0x43);
TFT_Write_Command_Ptr(0x02);
TFT_Write_Command_Ptr(0x0A);
TFT_Write_Command_Ptr(0x09);
TFT_Write_Command_Ptr(0x32);
TFT_Write_Command_Ptr(0x36);
TFT_Write_Command_Ptr(0x0F);
//0xB1, 1, 0xA0,
TFT_Set_Index_Ptr(0xB1); //Frame rate
TFT_Write_Command_Ptr(0xA0); //60Hz
//0xB4, 1, 0x02,
TFT_Set_Index_Ptr(0xB4); //Display Inversion Control
TFT_Write_Command_Ptr(0x02); //2-dot
//0xC0, 2, 0x17, 0x15,
TFT_Set_Index_Ptr(0XC0); //Power Control 1
TFT_Write_Command_Ptr(0x17); //Vreg1out
TFT_Write_Command_Ptr(0x15); //Verg2out
//0xC1, 1, 0x41,
TFT_Set_Index_Ptr(0xC1); //Power Control 2
TFT_Write_Command_Ptr(0x41); //VGH,VGL
//0xC5, 3, 0x00, 0x0A, 0x80,
TFT_Set_Index_Ptr(0xC5); //Power Control 3
TFT_Write_Command_Ptr(0x00);
TFT_Write_Command_Ptr(0x0A); //Vcom
TFT_Write_Command_Ptr(0x80);
//0xB6, 1, 0x02,
TFT_Set_Index_Ptr(0XB6); //Display Function Control RGB/MCU Interface Control
TFT_Write_Command_Ptr(0x02); //MCU
//0x36, 1, 0x48,
TFT_Set_Index_Ptr(0x36); //Memory Access
TFT_Write_Command_Ptr(0x48);
//0x3A, 1, 0x55,
TFT_Set_Index_Ptr(0x3A); // Interface Pixel Format
TFT_Write_Command_Ptr(0x55); //18 bit
//0xE9, 1, 0x00,
TFT_Set_Index_Ptr(0XE9); // Set Image Functio
TFT_Write_Command_Ptr(0x00); // Disable 24 bit data
//0xF7, 4, 0xA9 ,0x51, 0x2C, 0x82,
TFT_Set_Index_Ptr(0xF7); // Adjust Control
TFT_Write_Command_Ptr(0xA9);
TFT_Write_Command_Ptr(0x51);
TFT_Write_Command_Ptr(0x2C);
TFT_Write_Command_Ptr(0x82); // D7 stream, loose
TFT_Set_Index_Ptr(0x11); //Exit Sleep
Delay_ms(120);
TFT_Set_Index_Ptr(0x29); //Display on
Delay_ms(500);
TFT_CS = 1;
}
/**
* @brief Complete initializing procedure for TFT controller (ILI9486)
* @param display_width : Width of display (in pixels).
* @param display_height : Height of display (in pixels).
*/
void TFT_Init_ILI9488(unsigned int display_width, unsigned int display_height) {
__controller = _16BIT_CONTROLLER;
if (Is_TFT_Set() != 1) {
TFT_Set_Index_Ptr = TFT_Set_Index;
TFT_Write_Command_Ptr = TFT_Write_Command;
TFT_Write_Data_Ptr = TFT_16bit_Write_Data;
}
TFT_DISP_WIDTH = display_width;
TFT_DISP_HEIGHT = display_height;
if (display_width >= display_height)
TFT_Disp_Rotation = 0;
else
TFT_Disp_Rotation = 90;
TFT_Set_Pen(CL_BLACK, 1);
TFT_Set_Brush(0, 0, 0, 0, 0, 0);
TFT_Move_Cursor(0, 0);
ExternalFontSet = 0;
TFT_Set_DataPort_Direction();
// Reset device
TFT_Reset_ILI9488();
TFT_Set_Address_Ptr = TFT_Set_Address_ILI9488;
}
/**
* @brief Complete initializing procedure for TFT controller (ILI9486)
* without setting TFT_DataPort direction.
* This procedure should be used when calls to custom TFT routines are used.
* Must be used with TFT_Set_Active.
* @param display_width : Width of display (in pixels).
* @param display_height : Height of display (in pixels).
*/
void TFT_Init_ILI9488_Custom(unsigned int display_width, unsigned int display_height) {
__controller = _16BIT_CONTROLLER;
if (Is_TFT_Set() != 1) {
TFT_Set_Index_Ptr = TFT_Set_Index;
TFT_Write_Command_Ptr = TFT_Write_Command;
TFT_Write_Data_Ptr = TFT_16bit_Write_Data;
}
TFT_DISP_WIDTH = display_width;
TFT_DISP_HEIGHT = display_height;
if (display_width >= display_height)
TFT_Disp_Rotation = 0;
else
TFT_Disp_Rotation = 90;
TFT_Set_Pen(CL_BLACK, 1);
TFT_Set_Brush(0, 0, 0, 0, 0, 0);
TFT_Move_Cursor(0, 0);
ExternalFontSet = 0;
// Reset device
TFT_Reset_ILI9486();
TFT_Set_Address_Ptr = TFT_Set_Address_ILI9488;
}
/*************************** eof ILI9488 ***************************/
/************************** ILI9488 (8bit) *************************/
/**
* @brief Complete initializing procedure for TFT controller (ILI9486)
* @param display_width : Width of display (in pixels).
* @param display_height : Height of display (in pixels).
*/
void TFT_Init_ILI9488_8bit(unsigned int display_width, unsigned int display_height) {
__controller = _8BIT_CONTROLLER;
if (Is_TFT_Set() != 1) {
TFT_Set_Index_Ptr = TFT_Set_Index;
TFT_Write_Command_Ptr = TFT_Write_Command;
TFT_Write_Data_Ptr = TFT_Write_Data;
}
TFT_DISP_WIDTH = display_width;
TFT_DISP_HEIGHT = display_height;
TFT_Set_Pen(CL_BLACK, 1);
TFT_Set_Brush(0, 0, 0, 0, 0, 0);
TFT_Move_Cursor(0, 0);
ExternalFontSet = 0;
TFT_Set_DataPort_Direction();
// Reset device
TFT_Reset_ILI9488();
TFT_Rotacion( display_width, display_height,180);
TFT_Set_Address_Ptr = TFT_Set_Address_ILI9488;
}
/**
* @brief Complete initializing procedure for TFT controller (ILI9486)
* without setting TFT_DataPort direction.
* This procedure should be used when calls to custom TFT routines are used.
* Must be used with TFT_Set_Active.
* @param display_width : Width of display (in pixels).
* @param display_height : Height of display (in pixels).
*/
void TFT_Init_ILI9488_8bit_Custom(unsigned int display_width, unsigned int display_height) {
__controller = _8BIT_CONTROLLER;
if (Is_TFT_Set() != 1) {
TFT_Set_Index_Ptr = TFT_Set_Index;
TFT_Write_Command_Ptr = TFT_Write_Command;
TFT_Write_Data_Ptr = TFT_Write_Data;
}
TFT_DISP_WIDTH = display_width;
TFT_DISP_HEIGHT = display_height;
TFT_Set_Pen(CL_BLACK, 1);
TFT_Set_Brush(0, 0, 0, 0, 0, 0);
TFT_Move_Cursor(0, 0);
ExternalFontSet = 0;
// Reset device
TFT_Reset_ILI9488();
//TFT_Rotacion( display_width, display_height,0);
TFT_Set_Address_Ptr = TFT_Set_Address_ILI9488;
}
/************************ eof ILI9488 (8bit) ************************/