/********************************************************************* * * LCD_X_Config * * Function description: * Called during the initialization process in order to set up the * display driver configuration. * */ void LCD_X_Config(void) { GUI_DEVICE *pDevice; CONFIG_FLEXCOLOR Config = {0}; GUI_PORT_API PortAPI = {0}; // // Set display driver and color conversion // pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0); // // Display driver configuration, required for Lin-driver // LCD_SetSizeEx(0, XSIZE_PHYS , YSIZE_PHYS); LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS); // // Orientation // if (spfd5408_drv.ReadID() == SPFD5408_ID) { Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y; } else { Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y | GUI_MIRROR_X; } GUIDRV_FlexColor_Config(pDevice, &Config); // // Set controller and operation mode // PortAPI.pfWrite16_A0 = LcdWriteReg; PortAPI.pfWrite16_A1 = LcdWriteData; PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple; PortAPI.pfReadM16_A1 = LcdReadDataMultiple; // Find the current LCD and initialize GUIDRV LCD_IO_Init(); if (spfd5408_drv.ReadID() == SPFD5408_ID) { GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66708, GUIDRV_FLEXCOLOR_M16C0B16); } else { GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66712, GUIDRV_FLEXCOLOR_M16C0B16); } }
uint8_t u8g_com_stm32duino_fsmc_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) { if (msgInitCount) { if (msg == U8G_COM_MSG_INIT) msgInitCount--; if (msgInitCount) return -1; } static uint8_t isCommand; switch (msg) { case U8G_COM_MSG_STOP: break; case U8G_COM_MSG_INIT: u8g_SetPIOutput(u8g, U8G_PI_RESET); LCD_IO_Init(u8g->pin_list[U8G_PI_CS], u8g->pin_list[U8G_PI_A0]); u8g_Delay(100); if (arg_ptr != NULL) *((uint32_t *)arg_ptr) = LCD_IO_ReadData(LCD_READ_ID, 3); isCommand = 0; break; case U8G_COM_MSG_ADDRESS: // define cmd (arg_val = 0) or data mode (arg_val = 1) isCommand = arg_val == 0 ? 1 : 0; break; case U8G_COM_MSG_RESET: u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val); break; case U8G_COM_MSG_WRITE_BYTE: if (isCommand) LCD_IO_WriteReg(arg_val); else LCD_IO_WriteData((uint16_t)arg_val); break; case U8G_COM_MSG_WRITE_SEQ: for (uint8_t i = 0; i < arg_val; i += 2) LCD_IO_WriteData(*(uint16_t *)(((uint32_t)arg_ptr) + i)); break; } return 1; }
/** * @brief Get the ILI9325 ID. * @param None * @retval The ILI9325 ID */ uint16_t ili9325_ReadID(void) { LCD_IO_Init(); return (ili9325_ReadReg(0x00)); }
/** * @brief Initialize the ILI9325 LCD Component. * @param None * @retval None */ void ili9325_Init(void) { /* Initialize ILI9325 low level bus layer ----------------------------------*/ LCD_IO_Init(); /* Start Initial Sequence --------------------------------------------------*/ ili9325_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */ ili9325_WriteReg(LCD_REG_1, 0x0100); /* Set SS and SM bit */ ili9325_WriteReg(LCD_REG_2, 0x0700); /* Set 1 line inversion */ ili9325_WriteReg(LCD_REG_3, 0x1018); /* Set GRAM write direction and BGR=1. */ ili9325_WriteReg(LCD_REG_4, 0x0000); /* Resize register */ ili9325_WriteReg(LCD_REG_8, 0x0202); /* Set the back porch and front porch */ ili9325_WriteReg(LCD_REG_9, 0x0000); /* Set non-display area refresh cycle ISC[3:0] */ ili9325_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */ ili9325_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */ ili9325_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */ ili9325_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */ /* Power On sequence -------------------------------------------------------*/ ili9325_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ ili9325_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */ ili9325_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */ ili9325_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */ ili9325_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ ili9325_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */ ili9325_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */ ili9325_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */ ili9325_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */ ili9325_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */ ili9325_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */ /* Adjust the Gamma Curve (ILI9325) ----------------------------------------*/ ili9325_WriteReg(LCD_REG_48, 0x0007); ili9325_WriteReg(LCD_REG_49, 0x0302); ili9325_WriteReg(LCD_REG_50, 0x0105); ili9325_WriteReg(LCD_REG_53, 0x0206); ili9325_WriteReg(LCD_REG_54, 0x0808); ili9325_WriteReg(LCD_REG_55, 0x0206); ili9325_WriteReg(LCD_REG_56, 0x0504); ili9325_WriteReg(LCD_REG_57, 0x0007); ili9325_WriteReg(LCD_REG_60, 0x0105); ili9325_WriteReg(LCD_REG_61, 0x0808); /* Set GRAM area -----------------------------------------------------------*/ ili9325_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */ ili9325_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */ ili9325_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */ ili9325_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */ ili9325_WriteReg(LCD_REG_96, 0xA700); /* Gate Scan Line(GS=1, scan direction is G320~G1) */ ili9325_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */ ili9325_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */ /* Partial Display Control -------------------------------------------------*/ ili9325_WriteReg(LCD_REG_128, 0x0000); ili9325_WriteReg(LCD_REG_129, 0x0000); ili9325_WriteReg(LCD_REG_130, 0x0000); ili9325_WriteReg(LCD_REG_131, 0x0000); ili9325_WriteReg(LCD_REG_132, 0x0000); ili9325_WriteReg(LCD_REG_133, 0x0000); /* Panel Control -----------------------------------------------------------*/ ili9325_WriteReg(LCD_REG_144, 0x0010); ili9325_WriteReg(LCD_REG_146, 0x0000); ili9325_WriteReg(LCD_REG_147, 0x0003); ili9325_WriteReg(LCD_REG_149, 0x0110); ili9325_WriteReg(LCD_REG_151, 0x0000); ili9325_WriteReg(LCD_REG_152, 0x0000); /* set GRAM write direction and BGR = 1 */ /* I/D=00 (Horizontal : increment, Vertical : decrement) */ /* AM=1 (address is updated in vertical writing direction) */ ili9325_WriteReg(LCD_REG_3, 0x1018); /* 262K color and display ON */ ili9325_WriteReg(LCD_REG_7, 0x0173); /* Set the Cursor */ ili9325_SetCursor(0, 0); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); }
/** * @brief Get the SPFD5408 ID. * @param None * @retval The SPFD5408 ID */ uint16_t spfd5408_ReadID(void) { LCD_IO_Init(); return (spfd5408_ReadReg(0x00)); }
/** * @brief Initialise the SPFD5408 LCD Component. * @param None * @retval None */ void spfd5408_Init(void) { if(Is_spfd5408_Initialized == 0) { Is_spfd5408_Initialized = 1; /* Initialise SPFD5408 low level bus layer --------------------------------*/ LCD_IO_Init(); /* Start Initial Sequence --------------------------------------------------*/ spfd5408_WriteReg(LCD_REG_227, 0x3008); /* Set internal timing */ spfd5408_WriteReg(LCD_REG_231, 0x0012); /* Set internal timing */ spfd5408_WriteReg(LCD_REG_239, 0x1231); /* Set internal timing */ spfd5408_WriteReg(LCD_REG_1, 0x0100); /* Set SS and SM bit */ spfd5408_WriteReg(LCD_REG_2, 0x0700); /* Set 1 line inversion */ spfd5408_WriteReg(LCD_REG_3, 0x1030); /* Set GRAM write direction and BGR=1. */ spfd5408_WriteReg(LCD_REG_4, 0x0000); /* Resize register */ spfd5408_WriteReg(LCD_REG_8, 0x0202); /* Set the back porch and front porch */ spfd5408_WriteReg(LCD_REG_9, 0x0000); /* Set non-display area refresh cycle ISC[3:0] */ spfd5408_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */ spfd5408_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */ spfd5408_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */ spfd5408_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */ /* Power On sequence -------------------------------------------------------*/ spfd5408_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ spfd5408_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */ spfd5408_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */ spfd5408_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */ LCD_Delay(200); /* Dis-charge capacitor power voltage (200ms) */ spfd5408_WriteReg(LCD_REG_17, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0] */ LCD_Delay(50); /* Delay 50 ms */ spfd5408_WriteReg(LCD_REG_16, 0x12B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ LCD_Delay(50); /* Delay 50 ms */ spfd5408_WriteReg(LCD_REG_18, 0x01BD); /* External reference voltage= Vci */ LCD_Delay(50); /* Delay 50 ms */ spfd5408_WriteReg(LCD_REG_19, 0x1400); /* VDV[4:0] for VCOM amplitude */ spfd5408_WriteReg(LCD_REG_41, 0x000E); /* VCM[4:0] for VCOMH */ LCD_Delay(50); /* Delay 50 ms */ spfd5408_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */ spfd5408_WriteReg(LCD_REG_33, 0x013F); /* GRAM Vertical Address */ /* Adjust the Gamma Curve --------------------------------------------------*/ spfd5408_WriteReg(LCD_REG_48, 0x0007); spfd5408_WriteReg(LCD_REG_49, 0x0302); spfd5408_WriteReg(LCD_REG_50, 0x0105); spfd5408_WriteReg(LCD_REG_53, 0x0206); spfd5408_WriteReg(LCD_REG_54, 0x0808); spfd5408_WriteReg(LCD_REG_55, 0x0206); spfd5408_WriteReg(LCD_REG_56, 0x0504); spfd5408_WriteReg(LCD_REG_57, 0x0007); spfd5408_WriteReg(LCD_REG_60, 0x0105); spfd5408_WriteReg(LCD_REG_61, 0x0808); /* Set GRAM area -----------------------------------------------------------*/ spfd5408_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */ spfd5408_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */ spfd5408_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */ spfd5408_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */ spfd5408_WriteReg(LCD_REG_96, 0xA700); /* Gate Scan Line */ spfd5408_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */ spfd5408_WriteReg(LCD_REG_106, 0x0000); /* Set scrolling line */ /* Partial Display Control -------------------------------------------------*/ spfd5408_WriteReg(LCD_REG_128, 0x0000); spfd5408_WriteReg(LCD_REG_129, 0x0000); spfd5408_WriteReg(LCD_REG_130, 0x0000); spfd5408_WriteReg(LCD_REG_131, 0x0000); spfd5408_WriteReg(LCD_REG_132, 0x0000); spfd5408_WriteReg(LCD_REG_133, 0x0000); /* Panel Control -----------------------------------------------------------*/ spfd5408_WriteReg(LCD_REG_144, 0x0010); spfd5408_WriteReg(LCD_REG_146, 0x0000); spfd5408_WriteReg(LCD_REG_147, 0x0003); spfd5408_WriteReg(LCD_REG_149, 0x0110); spfd5408_WriteReg(LCD_REG_151, 0x0000); spfd5408_WriteReg(LCD_REG_152, 0x0000); /* Set GRAM write direction and BGR = 1 I/D=01 (Horizontal : increment, Vertical : decrement) AM=1 (address is updated in vertical writing direction) */ spfd5408_WriteReg(LCD_REG_3, 0x1018); spfd5408_WriteReg(LCD_REG_7, 0x0112); /* 262K color and display ON */ } /* Set the Cursor */ spfd5408_SetCursor(0, 0); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); }
/** * @brief Initialize the ST7735 LCD Component. * @param None * @retval None */ void st7735_Init(void) { uint8_t data = 0; /* Initialize ST7735 low level bus layer -----------------------------------*/ LCD_IO_Init(); /* Out of sleep mode, 0 args, no delay */ st7735_WriteReg(LCD_REG_17, 0x00); /* Frame rate ctrl - normal mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D)*/ LCD_IO_WriteReg(LCD_REG_177); data = 0x01; LCD_IO_WriteMultipleData(&data, 1); data = 0x2C; LCD_IO_WriteMultipleData(&data, 1); data = 0x2D; LCD_IO_WriteMultipleData(&data, 1); /* Frame rate control - idle mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D) */ st7735_WriteReg(LCD_REG_178, 0x01); st7735_WriteReg(LCD_REG_178, 0x2C); st7735_WriteReg(LCD_REG_178, 0x2D); /* Frame rate ctrl - partial mode, 6 args: Dot inversion mode, Line inversion mode */ st7735_WriteReg(LCD_REG_179, 0x01); st7735_WriteReg(LCD_REG_179, 0x2C); st7735_WriteReg(LCD_REG_179, 0x2D); st7735_WriteReg(LCD_REG_179, 0x01); st7735_WriteReg(LCD_REG_179, 0x2C); st7735_WriteReg(LCD_REG_179, 0x2D); /* Display inversion ctrl, 1 arg, no delay: No inversion */ st7735_WriteReg(LCD_REG_180, 0x07); /* Power control, 3 args, no delay: -4.6V , AUTO mode */ st7735_WriteReg(LCD_REG_192, 0xA2); st7735_WriteReg(LCD_REG_192, 0x02); st7735_WriteReg(LCD_REG_192, 0x84); /* Power control, 1 arg, no delay: VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD */ st7735_WriteReg(LCD_REG_193, 0xC5); /* Power control, 2 args, no delay: Opamp current small, Boost frequency */ st7735_WriteReg(LCD_REG_194, 0x0A); st7735_WriteReg(LCD_REG_194, 0x00); /* Power control, 2 args, no delay: BCLK/2, Opamp current small & Medium low */ st7735_WriteReg(LCD_REG_195, 0x8A); st7735_WriteReg(LCD_REG_195, 0x2A); /* Power control, 2 args, no delay */ st7735_WriteReg(LCD_REG_196, 0x8A); st7735_WriteReg(LCD_REG_196, 0xEE); /* Power control, 1 arg, no delay */ st7735_WriteReg(LCD_REG_197, 0x0E); /* Don't invert display, no args, no delay */ LCD_IO_WriteReg(LCD_REG_32); /* Set color mode, 1 arg, no delay: 16-bit color */ st7735_WriteReg(LCD_REG_58, 0x05); /* Column addr set, 4 args, no delay: XSTART = 0, XEND = 127 */ LCD_IO_WriteReg(LCD_REG_42); data = 0x00; LCD_IO_WriteMultipleData(&data, 1); LCD_IO_WriteMultipleData(&data, 1); LCD_IO_WriteMultipleData(&data, 1); data = 0x7F; LCD_IO_WriteMultipleData(&data, 1); /* Row addr set, 4 args, no delay: YSTART = 0, YEND = 159 */ LCD_IO_WriteReg(LCD_REG_43); data = 0x00; LCD_IO_WriteMultipleData(&data, 1); LCD_IO_WriteMultipleData(&data, 1); LCD_IO_WriteMultipleData(&data, 1); data = 0x9F; LCD_IO_WriteMultipleData(&data, 1); /* Magical unicorn dust, 16 args, no delay */ st7735_WriteReg(LCD_REG_224, 0x02); st7735_WriteReg(LCD_REG_224, 0x1c); st7735_WriteReg(LCD_REG_224, 0x07); st7735_WriteReg(LCD_REG_224, 0x12); st7735_WriteReg(LCD_REG_224, 0x37); st7735_WriteReg(LCD_REG_224, 0x32); st7735_WriteReg(LCD_REG_224, 0x29); st7735_WriteReg(LCD_REG_224, 0x2d); st7735_WriteReg(LCD_REG_224, 0x29); st7735_WriteReg(LCD_REG_224, 0x25); st7735_WriteReg(LCD_REG_224, 0x2B); st7735_WriteReg(LCD_REG_224, 0x39); st7735_WriteReg(LCD_REG_224, 0x00); st7735_WriteReg(LCD_REG_224, 0x01); st7735_WriteReg(LCD_REG_224, 0x03); st7735_WriteReg(LCD_REG_224, 0x10); /* Sparkles and rainbows, 16 args, no delay */ st7735_WriteReg(LCD_REG_225, 0x03); st7735_WriteReg(LCD_REG_225, 0x1d); st7735_WriteReg(LCD_REG_225, 0x07); st7735_WriteReg(LCD_REG_225, 0x06); st7735_WriteReg(LCD_REG_225, 0x2E); st7735_WriteReg(LCD_REG_225, 0x2C); st7735_WriteReg(LCD_REG_225, 0x29); st7735_WriteReg(LCD_REG_225, 0x2D); st7735_WriteReg(LCD_REG_225, 0x2E); st7735_WriteReg(LCD_REG_225, 0x2E); st7735_WriteReg(LCD_REG_225, 0x37); st7735_WriteReg(LCD_REG_225, 0x3F); st7735_WriteReg(LCD_REG_225, 0x00); st7735_WriteReg(LCD_REG_225, 0x00); st7735_WriteReg(LCD_REG_225, 0x02); st7735_WriteReg(LCD_REG_225, 0x10); /* Normal display on, no args, no delay */ st7735_WriteReg(LCD_REG_19, 0x00); /* Main screen turn on, no delay */ st7735_WriteReg(LCD_REG_41, 0x00); st7735_WriteReg(LCD_REG_54, 0xC0); }
/** * @brief Power on the LCD. * @param None * @retval None */ void ili9341_Init(void) { if (Is_ili9341_Initialized == 0) { Is_ili9341_Initialized = 1; /* Initialise ILI9341 low level bus layer --------------------------------*/ LCD_IO_Init(); /*Configure LCD*/ ili9341_WriteReg(0xCA); ili9341_WriteData(0xC3); ili9341_WriteData(0x08); ili9341_WriteData(0x50); ili9341_WriteReg(LCD_POWERB); ili9341_WriteData(0x00); ili9341_WriteData(0xC1); ili9341_WriteData(0x30); ili9341_WriteReg(LCD_POWER_SEQ); ili9341_WriteData(0x64); ili9341_WriteData(0x03); ili9341_WriteData(0x12); ili9341_WriteData(0x81); ili9341_WriteReg(LCD_DTCA); ili9341_WriteData(0x85); ili9341_WriteData(0x00); ili9341_WriteData(0x78); ili9341_WriteReg(LCD_POWERA); ili9341_WriteData(0x39); ili9341_WriteData(0x2C); ili9341_WriteData(0x00); ili9341_WriteData(0x34); ili9341_WriteData(0x02); ili9341_WriteReg(LCD_PRC); ili9341_WriteData(0x20); ili9341_WriteReg(LCD_DTCB); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteReg(LCD_FRMCTR1); ili9341_WriteData(0x00); ili9341_WriteData(0x1B); ili9341_WriteReg(LCD_DFC); ili9341_WriteData(0x0A); ili9341_WriteData(0xA2); ili9341_WriteReg(LCD_POWER1); ili9341_WriteData(0x10); ili9341_WriteReg(LCD_POWER2); ili9341_WriteData(0x10); ili9341_WriteReg(LCD_VCOM1); ili9341_WriteData(0x45); ili9341_WriteData(0x15); ili9341_WriteReg(LCD_VCOM2); ili9341_WriteData(0x90); ili9341_WriteReg(LCD_MAC); ili9341_WriteData(0xC8); ili9341_WriteReg(LCD_3GAMMA_EN); ili9341_WriteData(0x00); ili9341_WriteReg(LCD_RGB_INTERFACE); ili9341_WriteData(0xC2); ili9341_WriteReg(LCD_DFC); ili9341_WriteData(0x0A); ili9341_WriteData(0xA7); ili9341_WriteData(0x27); ili9341_WriteData(0x04); /* colomn address set */ ili9341_WriteReg(LCD_COLUMN_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0xEF); /* Page Address Set */ ili9341_WriteReg(LCD_PAGE_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x01); ili9341_WriteData(0x3F); ili9341_WriteReg(LCD_INTERFACE); ili9341_WriteData(0x01); ili9341_WriteData(0x00); ili9341_WriteData(0x06); ili9341_WriteReg(LCD_GRAM); LCD_Delay(200); ili9341_WriteReg(LCD_GAMMA); ili9341_WriteData(0x01); ili9341_WriteReg(LCD_PGAMMA); ili9341_WriteData(0x0F); ili9341_WriteData(0x29); ili9341_WriteData(0x24); ili9341_WriteData(0x0C); ili9341_WriteData(0x0E); ili9341_WriteData(0x09); ili9341_WriteData(0x4E); ili9341_WriteData(0x78); ili9341_WriteData(0x3C); ili9341_WriteData(0x09); ili9341_WriteData(0x13); ili9341_WriteData(0x05); ili9341_WriteData(0x17); ili9341_WriteData(0x11); ili9341_WriteData(0x00); ili9341_WriteReg(LCD_NGAMMA); ili9341_WriteData(0x00); ili9341_WriteData(0x16); ili9341_WriteData(0x1B); ili9341_WriteData(0x04); ili9341_WriteData(0x11); ili9341_WriteData(0x07); ili9341_WriteData(0x31); ili9341_WriteData(0x33); ili9341_WriteData(0x42); ili9341_WriteData(0x05); ili9341_WriteData(0x0C); ili9341_WriteData(0x0A); ili9341_WriteData(0x28); ili9341_WriteData(0x2F); ili9341_WriteData(0x0F); ili9341_WriteReg(LCD_SLEEP_OUT); LCD_Delay(200); ili9341_WriteReg(LCD_DISPLAY_ON); /* GRAM start writing */ ili9341_WriteReg(LCD_GRAM); } }
/** * @brief Initialise the HX8347D LCD Component. * @param None * @retval None */ void hx8347d_Init(void) { if(Is_hx8347d_Initialized == 0) { Is_hx8347d_Initialized = 1; /* Initialise HX8347D low level bus layer --------------------------------*/ LCD_IO_Init(); /* Driving ability setting */ hx8347d_WriteReg(LCD_REG_234, 0x00); hx8347d_WriteReg(LCD_REG_235, 0x20); hx8347d_WriteReg(LCD_REG_236, 0x0C); hx8347d_WriteReg(LCD_REG_237, 0xC4); hx8347d_WriteReg(LCD_REG_232, 0x40); hx8347d_WriteReg(LCD_REG_233, 0x38); hx8347d_WriteReg(LCD_REG_241, 0x01); hx8347d_WriteReg(LCD_REG_242, 0x10); hx8347d_WriteReg(LCD_REG_39, 0xA3); /* Adjust the Gamma Curve */ hx8347d_WriteReg(LCD_REG_64, 0x01); hx8347d_WriteReg(LCD_REG_65, 0x00); hx8347d_WriteReg(LCD_REG_66, 0x00); hx8347d_WriteReg(LCD_REG_67, 0x10); hx8347d_WriteReg(LCD_REG_68, 0x0E); hx8347d_WriteReg(LCD_REG_69, 0x24); hx8347d_WriteReg(LCD_REG_70, 0x04); hx8347d_WriteReg(LCD_REG_71, 0x50); hx8347d_WriteReg(LCD_REG_72, 0x02); hx8347d_WriteReg(LCD_REG_73, 0x13); hx8347d_WriteReg(LCD_REG_74, 0x19); hx8347d_WriteReg(LCD_REG_75, 0x19); hx8347d_WriteReg(LCD_REG_76, 0x16); hx8347d_WriteReg(LCD_REG_80, 0x1B); hx8347d_WriteReg(LCD_REG_81, 0x31); hx8347d_WriteReg(LCD_REG_82, 0x2F); hx8347d_WriteReg(LCD_REG_83, 0x3F); hx8347d_WriteReg(LCD_REG_84, 0x3F); hx8347d_WriteReg(LCD_REG_85, 0x3E); hx8347d_WriteReg(LCD_REG_86, 0x2F); hx8347d_WriteReg(LCD_REG_87, 0x7B); hx8347d_WriteReg(LCD_REG_88, 0x09); hx8347d_WriteReg(LCD_REG_89, 0x06); hx8347d_WriteReg(LCD_REG_90, 0x06); hx8347d_WriteReg(LCD_REG_91, 0x0C); hx8347d_WriteReg(LCD_REG_92, 0x1D); hx8347d_WriteReg(LCD_REG_93, 0xCC); /* Power voltage setting */ hx8347d_WriteReg(LCD_REG_27, 0x1B); hx8347d_WriteReg(LCD_REG_26, 0x01); hx8347d_WriteReg(LCD_REG_36, 0x2F); hx8347d_WriteReg(LCD_REG_37, 0x57); /*****VCOM offset ****/ hx8347d_WriteReg(LCD_REG_35, 0x86); /* Power on setting up flow */ hx8347d_WriteReg(LCD_REG_24, 0x36); /* Display frame rate = 70Hz RADJ = '0110' */ hx8347d_WriteReg(LCD_REG_25, 0x01); /* OSC_EN = 1 */ hx8347d_WriteReg(LCD_REG_28, 0x06); /* AP[2:0] = 111 */ hx8347d_WriteReg(LCD_REG_29, 0x06); /* AP[2:0] = 111 */ hx8347d_WriteReg(LCD_REG_31,0x90); /* GAS=1, VOMG=00, PON=1, DK=0, XDK=0, DVDH_TRI=0, STB=0*/ hx8347d_WriteReg(LCD_REG_39, 1); /* REF = 1 */ LCD_Delay(10); /* 262k/65k color selection */ hx8347d_WriteReg(LCD_REG_23, 0x05); /* default 0x06 262k color, 0x05 65k color */ /* SET PANEL */ hx8347d_WriteReg(LCD_REG_54, 0x09); /* SS_PANEL = 1, GS_PANEL = 0,REV_PANEL = 0, BGR_PANEL = 1 */ /* Display ON flow */ hx8347d_WriteReg(LCD_REG_40, 0x38); /* GON=1, DTE=1, D=10 */ LCD_Delay(60); hx8347d_WriteReg(LCD_REG_40, 0x3C); /* GON=1, DTE=1, D=11 */ /* Set GRAM Area - Partial Display Control */ hx8347d_WriteReg(LCD_REG_1, 0x00); /* DP_STB = 0, DP_STB_S = 0, SCROLL = 0, */ hx8347d_WriteReg(LCD_REG_2, 0x00); /* Column address start 2 */ hx8347d_WriteReg(LCD_REG_3, 0x00); /* Column address start 1 */ hx8347d_WriteReg(LCD_REG_4, 0x01); /* Column address end 2 */ hx8347d_WriteReg(LCD_REG_5, 0x3F); /* Column address end 1 */ hx8347d_WriteReg(LCD_REG_6, 0x00); /* Row address start 2 */ hx8347d_WriteReg(LCD_REG_7, 0x00); /* Row address start 2 */ hx8347d_WriteReg(LCD_REG_8, 0x00); /* Row address end 2 */ hx8347d_WriteReg(LCD_REG_9, 0xEF); /* Row address end 1 */ hx8347d_WriteReg(LCD_REG_22, 0xE0); /* Memory access control: MY = 1, MX = 0, MV = 1, ML = 0 */ } /* Set the Cursor */ hx8347d_SetCursor(0, 0); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); }
/** * @brief Disables the Display. * @param None * @retval LCD Register Value. */ uint16_t st7789v_ReadID(void) { LCD_IO_Init(); return ((uint16_t)st7789v_ReadData(LCD_READ_ID4, LCD_READ_ID4_SIZE)); }
/** * @brief Power on the LCD. * @param None * @retval None */ void st7789v_Init(void) { /* Initialize st7789v low level bus layer ----------------------------------*/ LCD_IO_Init(); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,0x01); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,0x01); LCD_RESET_HIGH(); HAL_Delay(1); //delay 1ms LCD_RESET_LOW(); HAL_Delay(10); //delay 10ms LCD_RESET_HIGH(); HAL_Delay(120); /* Configure LCD */ st7789v_WriteReg(0x11); HAL_Delay(120); st7789v_WriteReg(0x36); //Memory Data Access Control st7789v_WriteData(0x00); st7789v_WriteReg(0x3a);//Interface Pixel Format st7789v_WriteData(0x05);//MCU-16bit 05 st7789v_WriteReg(0x2a); st7789v_WriteData(0x00); st7789v_WriteData(0x00); st7789v_WriteData(0x00); st7789v_WriteData(0xef); st7789v_WriteReg(0x2b); st7789v_WriteData(0x00); st7789v_WriteData(0x00); st7789v_WriteData(0x00); st7789v_WriteData(0xef); /*frame rate setting*/ st7789v_WriteReg(0xb2);//portch st7789v_WriteData(0x0c);//normal BP st7789v_WriteData(0x0c);//normal FP st7789v_WriteData(0x00);//enable seperate st7789v_WriteData(0x33);//idle, BP[7:4], FP[3:0] st7789v_WriteData(0x33);//partial, BP[7:4], FP[3:0] st7789v_WriteReg(0xb7); //gate control st7789v_WriteData(0x56);//VGH=14.06v,VGL=-11.38 /*power setting*/ st7789v_WriteReg(0xbb); //VCOMS Setting st7789v_WriteData(0x1e); st7789v_WriteReg(0xc0); st7789v_WriteData(0x2c); st7789v_WriteReg(0xc2); st7789v_WriteData(0x01); st7789v_WriteReg(0xc3); //VRH Set st7789v_WriteData(0x13); //4.5v st7789v_WriteReg(0xc4); st7789v_WriteData(0x20); st7789v_WriteReg(0xc6); //frame rate control in normal mode st7789v_WriteData(0x0f); st7789v_WriteReg(0xd0); // power control 1 st7789v_WriteData(0xa4);// st7789v_WriteData(0xa1);//AVDD=6.8v, AVCL=-4.8v, VDS=2.3V //----GAMMA------------------------------------ st7789v_WriteReg(0xe0); st7789v_WriteData(0xD0); st7789v_WriteData(0x03); st7789v_WriteData(0x08); st7789v_WriteData(0x0E); st7789v_WriteData(0x11); st7789v_WriteData(0x2B); st7789v_WriteData(0x3B); st7789v_WriteData(0x44); st7789v_WriteData(0x4C); st7789v_WriteData(0x2B); st7789v_WriteData(0x16); st7789v_WriteData(0x15); st7789v_WriteData(0x1E); st7789v_WriteData(0x21); st7789v_WriteReg(0xe1); st7789v_WriteData(0xD0); st7789v_WriteData(0x03); st7789v_WriteData(0x08); st7789v_WriteData(0x0E); st7789v_WriteData(0x11); st7789v_WriteData(0x2B); st7789v_WriteData(0x3B); st7789v_WriteData(0x54); st7789v_WriteData(0x4C); st7789v_WriteData(0x2B); st7789v_WriteData(0x16); st7789v_WriteData(0x15); st7789v_WriteData(0x1E); st7789v_WriteData(0x21); st7789v_WriteReg(0x29); //Display ON // g_LCD = st7789v_ReadID(); // // while (1); }
/** * @brief Disables the Display. * @param None * @retval LCD Register Value. */ uint16_t ili9341_ReadID(void) { LCD_IO_Init(); return ((uint16_t)ili9341_ReadData(LCD_READ_ID4, LCD_READ_ID4_SIZE)); }
/** * @brief Power on the LCD. * @param None * @retval None */ void ili9341_Init(void) { /* Initialize ILI9341 low level bus layer ----------------------------------*/ LCD_IO_Init(); /* Configure LCD */ ili9341_WriteReg(0xCA); ili9341_WriteData(0xC3); ili9341_WriteData(0x08); ili9341_WriteData(0x50); ili9341_WriteReg(LCD_POWERB); ili9341_WriteData(0x00); ili9341_WriteData(0xC1); ili9341_WriteData(0x30); ili9341_WriteReg(LCD_POWER_SEQ); ili9341_WriteData(0x64); ili9341_WriteData(0x03); ili9341_WriteData(0x12); ili9341_WriteData(0x81); ili9341_WriteReg(LCD_DTCA); ili9341_WriteData(0x85); ili9341_WriteData(0x00); ili9341_WriteData(0x78); ili9341_WriteReg(LCD_POWERA); ili9341_WriteData(0x39); ili9341_WriteData(0x2C); ili9341_WriteData(0x00); ili9341_WriteData(0x34); ili9341_WriteData(0x02); ili9341_WriteReg(LCD_PRC); ili9341_WriteData(0x20); ili9341_WriteReg(LCD_DTCB); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteReg(LCD_FRMCTR1); ili9341_WriteData(0x00); ili9341_WriteData(0x1B); ili9341_WriteReg(LCD_DFC); ili9341_WriteData(0x0A); ili9341_WriteData(0xA2); ili9341_WriteReg(LCD_POWER1); ili9341_WriteData(0x10); ili9341_WriteReg(LCD_POWER2); ili9341_WriteData(0x10); ili9341_WriteReg(LCD_VCOM1); ili9341_WriteData(0x45); ili9341_WriteData(0x15); ili9341_WriteReg(LCD_VCOM2); ili9341_WriteData(0x90); ili9341_WriteReg(LCD_MAC); #if 1 // test ili9341_WriteData(0x28); #else ili9341_WriteData(0xC8); #endif ili9341_WriteReg(LCD_3GAMMA_EN); ili9341_WriteData(0x00); #ifndef LCD_IF_MCU_ONLY ili9341_WriteReg(LCD_RGB_INTERFACE); ili9341_WriteData(0xC2); #endif ili9341_WriteReg(LCD_DFC); ili9341_WriteData(0x0A); ili9341_WriteData(0xA7); ili9341_WriteData(0x27); ili9341_WriteData(0x04); #if 1 // test /* Colomn address set */ ili9341_WriteReg(LCD_COLUMN_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x01); ili9341_WriteData(0x3F); /* Page address set */ ili9341_WriteReg(LCD_PAGE_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0xEF); #else /* Colomn address set */ ili9341_WriteReg(LCD_COLUMN_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0xEF); /* Page address set */ ili9341_WriteReg(LCD_PAGE_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x01); ili9341_WriteData(0x3F); #endif #ifdef LCD_IF_MCU_ONLY ili9341_WriteReg(LCD_INTERFACE); ili9341_WriteData(0x01); ili9341_WriteData(0x00); ili9341_WriteData(0x00); #ifdef LCD_RGB_565 ili9341_WriteReg(LCD_PIXEL_FORMAT); ili9341_WriteData(0x55); #endif #else ili9341_WriteReg(LCD_INTERFACE); ili9341_WriteData(0x01); ili9341_WriteData(0x00); ili9341_WriteData(0x06); #endif ili9341_WriteReg(LCD_GRAM); LCD_Delay(200); ili9341_WriteReg(LCD_GAMMA); ili9341_WriteData(0x01); ili9341_WriteReg(LCD_PGAMMA); ili9341_WriteData(0x0F); ili9341_WriteData(0x29); ili9341_WriteData(0x24); ili9341_WriteData(0x0C); ili9341_WriteData(0x0E); ili9341_WriteData(0x09); ili9341_WriteData(0x4E); ili9341_WriteData(0x78); ili9341_WriteData(0x3C); ili9341_WriteData(0x09); ili9341_WriteData(0x13); ili9341_WriteData(0x05); ili9341_WriteData(0x17); ili9341_WriteData(0x11); ili9341_WriteData(0x00); ili9341_WriteReg(LCD_NGAMMA); ili9341_WriteData(0x00); ili9341_WriteData(0x16); ili9341_WriteData(0x1B); ili9341_WriteData(0x04); ili9341_WriteData(0x11); ili9341_WriteData(0x07); ili9341_WriteData(0x31); ili9341_WriteData(0x33); ili9341_WriteData(0x42); ili9341_WriteData(0x05); ili9341_WriteData(0x0C); ili9341_WriteData(0x0A); ili9341_WriteData(0x28); ili9341_WriteData(0x2F); ili9341_WriteData(0x0F); ili9341_WriteReg(LCD_SLEEP_OUT); LCD_Delay(200); ili9341_WriteReg(LCD_DISPLAY_ON); /* GRAM start writing */ ili9341_WriteReg(LCD_GRAM); }
void st7783_Init(void) { // uint16_t data = 0; // m_width = TFTWIDTH; // m_height = TFTHEIGHT; m_height = TFTWIDTH; m_width = TFTHEIGHT; //m_rotation = 0; m_rotation = 1; m_cursor_y = m_cursor_x = 0; m_textsize = 4; m_textcolor = m_textbgcolor = 0xFFFF; m_wrap = 1; /* Initialize st7783 low level bus layer -----------------------------------*/ LCD_IO_Init(); LCD_Reset(); //LCD_WriteRegister16(0xff00, 0x8844); //test data LCD_WriteRegister16(0x0001, 0x0100); LCD_WriteRegister16(0x0002, 0x0700); LCD_WriteRegister16(0x0003, 0x1030); LCD_WriteRegister16(0x0008, 0x0302); LCD_WriteRegister16(0x0009, 0x0000); LCD_WriteRegister16(0x000A, 0x0008); //*******POWER CONTROL REGISTER INITIAL*******// LCD_WriteRegister16(0x0010, 0x0790); LCD_WriteRegister16(0x0011, 0x0005); LCD_WriteRegister16(0x0012, 0x0000); LCD_WriteRegister16(0x0013, 0x0000); //delay //HAL_Delay(10); //********POWER SUPPPLY STARTUP 1 SETTING*******// LCD_WriteRegister16(0x0010, 0x12B0); LCD_WriteRegister16(0x0011, 0x0007); //delay //HAL_Delay(10); //********POWER SUPPLY STARTUP 2 SETTING******// LCD_WriteRegister16(0x0012, 0x008c); LCD_WriteRegister16(0x0013, 0x1700); LCD_WriteRegister16(0x0029, 0x0022); //delay //HAL_Delay(10); //******GAMMA CLUSTER SETTING******// //LCD_WriteRegister16(0x0020, 0x0000); //LCD_WriteRegister16(0x0021, 0x0000); LCD_WriteRegister16(0x0030, 0x0000); LCD_WriteRegister16(0x0031, 0x0505); LCD_WriteRegister16(0x0032, 0x0205); LCD_WriteRegister16(0x0035, 0x0206); LCD_WriteRegister16(0x0036, 0x0408); LCD_WriteRegister16(0x0037, 0x0000); LCD_WriteRegister16(0x0038, 0x0504); LCD_WriteRegister16(0x0039, 0x0206); LCD_WriteRegister16(0x003C, 0x0206); LCD_WriteRegister16(0x003D, 0x0408); // -----------DISPLAY WINDOWS 240*320-------------// LCD_WriteRegister16(0x0050, 0x0000); LCD_WriteRegister16(0x0051, 0x00EF); LCD_WriteRegister16(0x0052, 0x0000); LCD_WriteRegister16(0x0053, 0x013F); //-----FRAME RATE SETTING-------// LCD_WriteRegister16(0x0060, 0xA700); LCD_WriteRegister16(0x0061, 0x0001); LCD_WriteRegister16(0x0090, 0x0033);//RTNI setting //-------DISPLAY ON------// LCD_WriteRegister16(0x0007, 0x0133); LCD_WriteRegister16(0x0001, 0x0100); LCD_WriteRegister16(0x0002, 0x0700); LCD_WriteRegister16(0x0003, 0x1030); LCD_WriteRegister16(0x0008, 0x0302); LCD_WriteRegister16(0x0009, 0x0000); LCD_WriteRegister16(0x000A, 0x0008); //*******POWER CONTROL REGISTER INITIAL*******// // LCD_WriteRegister16(0x0010, 0x0790); // LCD_WriteRegister16(0x0011, 0x0005); // LCD_WriteRegister16(0x0012, 0x0000); // LCD_WriteRegister16(0x0013, 0x0000); // //delay //HAL_Delay(10); //********POWER SUPPPLY STARTUP 1 SETTING*******// LCD_WriteRegister16(0x0010, 0x12B0); LCD_WriteRegister16(0x0011, 0x0007); //delay //HAL_Delay(10); //********POWER SUPPLY STARTUP 2 SETTING******// LCD_WriteRegister16(0x0012, 0x008c); LCD_WriteRegister16(0x0013, 0x1700); LCD_WriteRegister16(0x0029, 0x0022); //delay //HAL_Delay(10); //******GAMMA CLUSTER SETTING******// //LCD_WriteRegister16(0x0020, 0x0000); //LCD_WriteRegister16(0x0021, 0x0000); LCD_WriteRegister16(0x0030, 0x0000); LCD_WriteRegister16(0x0031, 0x0505); LCD_WriteRegister16(0x0032, 0x0205); LCD_WriteRegister16(0x0035, 0x0206); LCD_WriteRegister16(0x0036, 0x0408); LCD_WriteRegister16(0x0037, 0x0000); LCD_WriteRegister16(0x0038, 0x0504); LCD_WriteRegister16(0x0039, 0x0206); LCD_WriteRegister16(0x003C, 0x0206); LCD_WriteRegister16(0x003D, 0x0408); // -----------DISPLAY WINDOWS 240*320-------------// LCD_WriteRegister16(0x0050, 0x0000); LCD_WriteRegister16(0x0051, 0x00EF); LCD_WriteRegister16(0x0052, 0x0000); LCD_WriteRegister16(0x0053, 0x013F); //-----FRAME RATE SETTING-------// LCD_WriteRegister16(0x0060, 0xA700); LCD_WriteRegister16(0x0061, 0x0001); LCD_WriteRegister16(0x0090, 0x0033);//RTNI setting //-------DISPLAY ON------// LCD_WriteRegister16(0x0007, 0x0133); LCD_WriteRegister16(0x0020, 0x0000); LCD_WriteRegister16(0x0021, 0x0000); }