/******************************************************************************* * Function Name : LCD_DrawBMP * Description : Displays a bitmap picture loaded in the SPI Flash. * Input : - BmpAddress: Bmp picture address in the SPI Flash. * Output : None * Return : None *******************************************************************************/ void LCD_DrawBMP(uc16 *BmpAddress) { u32 i = 0, size = 0; /* Read bitmap size */ size = BmpAddress[1] | (BmpAddress[2] << 16); /* get bitmap data address offset */ i = BmpAddress[5] | (BmpAddress[6] << 16); size = (size - i)/2; BmpAddress += i/2; /* Set GRAM write direction and BGR = 1 */ /* I/D=00 (Horizontal : decrement, Vertical : decrement) */ /* AM=1 (address is updated in vertical writing direction) */ LCD_WriteReg(R3, 0x1008); LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ /* Read bitmap data from SPI Flash and send them to LCD */ for(i = 0; i < size; i++) { LCD_WriteRAM(BmpAddress[i]); } LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET); /* Set GRAM write direction and BGR = 1 */ /* I/D = 01 (Horizontal : increment, Vertical : decrement) */ /* AM = 1 (address is updated in vertical writing direction) */ LCD_WriteReg(R3, 0x1018); }
/** * @brief Draws a character on LCD. * @param Xpos: the Line where to display the character shape. * @param Ypos: start column address. * @param c: pointer to the character data. * @retval None */ void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c) { uint32_t index = 0, i = 0; uint8_t Xaddress = 0; Xaddress = Xpos; LCD_SetCursor(Xaddress, Ypos); for(index = 0; index < 24; index++) { LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ for(i = 0; i < 16; i++) { if((c[index] & (1 << i)) == 0x00) { LCD_WriteRAM(BackColor); } else { LCD_WriteRAM(TextColor); } } LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET); Xaddress++; LCD_SetCursor(Xaddress, Ypos); } }
/** * @brief Reset LCD control line(/CS) and Send Start-Byte * @param Start_Byte: the Start-Byte to be sent * @retval None */ void LCD_nCS_StartByte(uint8_t Start_Byte) { LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_RESET); SPI_I2S_SendData(LCD_SPI, Start_Byte); while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET) { } }
/** * @brief Clears the hole LCD. * @param Color: the color of the background. * @retval None */ void LCD_Clear(uint16_t Color) { uint32_t index = 0; if(LCDType == LCD_HX8347D) { LCD_SetCursor(0, 0); } else { LCD_SetCursor(0, 319); } /* Prepare to write GRAM */ LCD_WriteRAM_Prepare(); for(index = 0; index < (uint32_t)320*240; index++) { LCD_WriteRAM(Color); } /* Wait until a data is sent(not busy), before config /CS HIGH */ while (SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET); LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET); }
/** * @brief Sets or reset LCD control lines. * @param GPIOx: where x can be B or D to select the GPIO peripheral. * @param CtrlPins: the Control line. * This parameter can be one of the following values: * @arg - LCD_CtrlPin_NCS: Chip Select pin * @arg - CtrlPin_NWR: Read/Write Selection pin * @arg - CtrlPin_RS: Register/RAM Selection pin * @param BitVal: specifies the value to be written to the selected bit. * This parameter can be one of the following values: * @arg - GL_LOW: to clear the port pin * @arg - GL_HIGH: to set the port pin * @retval None */ void GL_LCD_CtrlLinesWrite(GPIO_TypeDef* GPIOx, uint16_t CtrlPins, GL_SignalActionType BitVal) { #if defined(USE_STM3210C_EVAL) || defined (USE_STM3210B_EVAL) ||\ defined (USE_STM32100B_EVAL) || defined(USE_STM32L152_EVAL) /* Set or Reset the control line */ LCD_CtrlLinesWrite(GPIOx, CtrlPins, (BitAction)BitVal); #endif }
/******************************************************************************* * Function Name : LCD_WriteRAMWord * Description : Writes 1 word to the LCD RAM. * Input : - RGB_Code: the pixel color in RGB mode (5-6-5). * Output : None * Return : None *******************************************************************************/ void LCD_WriteRAMWord(u16 RGB_Code) { LCD_WriteRAM_Prepare(); LCD_WriteRAM(RGB_Code); LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET); }
/******************************************************************************* * Function Name : LCD_ReadReg * Description : Reads the selected LCD Register. * Input : None * Output : None * Return : LCD Register Value. *******************************************************************************/ u16 LCD_ReadReg(u8 LCD_Reg) { vu16 tmp = 0; vu8 i = 0; /* SPI3 prescaler: 4 */ SPI3->CR1 &= 0xFFC7; SPI3->CR1 |= 0x0008; /* Write 16-bit Index (then Read Reg) */ LCD_WriteRegIndex(LCD_Reg); /* Read 16-bit Reg */ /* Reset LCD control line(/CS) and Send Start-Byte */ LCD_nCS_StartByte(START_BYTE | LCD_READ_REG); for(i = 0; i < 5; i++) { SPI_I2S_SendData(SPI3, 0xFF); while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY) != RESET) { vBlockToWait( 1 ); } /* One byte of invalid dummy data read after the start byte */ while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET) { vBlockToWait( 1 ); } SPI_I2S_ReceiveData(SPI3); } SPI_I2S_SendData(SPI3, 0xFF); /* Read upper byte */ while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY) != RESET) { vBlockToWait( 1 ); } /* Read lower byte */ while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET) { vBlockToWait( 1 ); } tmp = SPI_I2S_ReceiveData(SPI3); SPI_I2S_SendData(SPI3, 0xFF); while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY) != RESET) { vBlockToWait( 1 ); } /* Read lower byte */ while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET) { vBlockToWait( 1 ); } tmp = ((tmp & 0xFF) << 8) | SPI_I2S_ReceiveData(SPI3); LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET); /* SPI3 prescaler: 2 */ SPI3->CR1 &= 0xFFC7; return tmp; }
/******************************************************************************* * Function Name : LCD_nCS_StartByte * Description : Reset LCD control line(/CS) and Send Start-Byte * Input : - Start_Byte: the Start-Byte to be sent * Output : None * Return : None *******************************************************************************/ void LCD_nCS_StartByte(u8 Start_Byte) { LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_RESET); SPI_I2S_SendData(SPI3, Start_Byte); while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY) != RESET) { vBlockToWait( 1 ); } }
/** * @brief Clears the whole LCD. * @param Color: the color of the background. * @retval None */ void LCD_Clear(uint16_t Color) { uint32_t index = 0; LCD_SetCursor(0x00, 0x0000); LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ for(index = 0; index < 76800; index++) { LCD_WriteRAM(Color); } LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET); }
/** * @brief Reads the selected LCD Register. * @param None * @retval LCD Register Value. */ uint16_t LCD_ReadReg(uint8_t LCD_Reg) { uint16_t tmp = 0; uint8_t i = 0; /* LCD_SPI prescaler: 4 */ LCD_SPI->CR1 &= 0xFFC7; LCD_SPI->CR1 |= 0x0008; /* Write 16-bit Index (then Read Reg) */ LCD_WriteRegIndex(LCD_Reg); /* Read 16-bit Reg */ /* Reset LCD control line(/CS) and Send Start-Byte */ LCD_nCS_StartByte(START_BYTE | LCD_READ_REG); for(i = 0; i < 5; i++) { SPI_I2S_SendData(LCD_SPI, 0xFF); while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET) { } /* One byte of invalid dummy data read after the start byte */ while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET) { } SPI_I2S_ReceiveData(LCD_SPI); } SPI_I2S_SendData(LCD_SPI, 0xFF); /* Read upper byte */ while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET) { } /* Read lower byte */ while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET) { } tmp = SPI_I2S_ReceiveData(LCD_SPI); SPI_I2S_SendData(LCD_SPI, 0xFF); while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET) { } /* Read lower byte */ while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET) { } tmp = ((tmp & 0xFF) << 8) | SPI_I2S_ReceiveData(LCD_SPI); LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET); /* LCD_SPI prescaler: 2 */ LCD_SPI->CR1 &= 0xFFC7; return tmp; }
/** * @brief Writes index to select the LCD register. * @param LCD_Reg: address of the selected register. * @retval None */ void LCD_WriteRegIndex(uint8_t LCD_Reg) { /* Reset LCD control line(/CS) and Send Start-Byte */ LCD_nCS_StartByte(START_BYTE | SET_INDEX); /* Write 16-bit Reg Index (High Byte is 0) */ SPI_I2S_SendData(LCD_SPI, 0x00); while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET) { } SPI_I2S_SendData(LCD_SPI, LCD_Reg); while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET) { } LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET); }
/******************************************************************************* * Function Name : LCD_Clear * Description : Clears the hole LCD. * Input : Color: the color of the background. * Output : None * Return : None *******************************************************************************/ void LCD_Clear(u16 Color) { vu32 index = 0; LCD_SetCursor(0x00, 0x013F); LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ for(index = 0; index < 76800; index++) { LCD_WriteRAM(Color); } LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET); }
/** * @brief Writes to the selected LCD register. * @param LCD_Reg: address of the selected register. * @param LCD_RegValue: value to write to the selected register. * @retval None */ void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue) { /* Write 16-bit Index (then Write Reg) */ LCD_WriteRegIndex(LCD_Reg); /* Write 16-bit Reg */ /* Reset LCD control line(/CS) and Send Start-Byte */ LCD_nCS_StartByte(START_BYTE | LCD_WRITE_REG); SPI_I2S_SendData(LCD_SPI, LCD_RegValue>>8); while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET) { } SPI_I2S_SendData(LCD_SPI, (LCD_RegValue & 0xFF)); while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET) { } LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET); }
/******************************************************************************* * Function Name : LCD_WriteRegIndex * Description : Writes index to select the LCD register. * Input : - LCD_Reg: address of the selected register. * Output : None * Return : None *******************************************************************************/ void LCD_WriteRegIndex(u8 LCD_Reg) { /* Reset LCD control line(/CS) and Send Start-Byte */ LCD_nCS_StartByte(START_BYTE | SET_INDEX); /* Write 16-bit Reg Index (High Byte is 0) */ SPI_I2S_SendData(SPI3, 0x00); while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY) != RESET) { vBlockToWait( 1 ); } SPI_I2S_SendData(SPI3, LCD_Reg); while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY) != RESET) { vBlockToWait( 1 ); } LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET); }
void LCDTFTConf::LCD_WriteData(uint8_t value) { /* Set WRX to send data */ LCD_CtrlLinesWrite(LCD_WRX_GPIO_PORT, LCD_WRX_PIN, Bit_SET); /* Reset LCD control line(/CS) and Send data */ LCD_ChipSelect(DISABLE); SPI_I2S_SendData(LCD_SPI, value); /* Wait until a data is sent(not busy), before config /CS HIGH */ while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_TXE) == RESET) ; while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET); LCD_ChipSelect(ENABLE); }
/******************************************************************************* * Function Name : LCD_DrawMonoPict * Description : Displays a monocolor picture. * Input : - Pict: pointer to the picture array. * Output : None * Return : None *******************************************************************************/ void LCD_DrawMonoPict(uc32 *Pict) { u32 index = 0, i = 0; LCD_SetCursor(0, 319); LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ for(index = 0; index < 2400; index++) { for(i = 0; i < 32; i++) { if((Pict[index] & (1 << i)) == 0x00) { LCD_WriteRAM(BackColor); } else { LCD_WriteRAM(TextColor); } } } LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET); }
/******************************************************************************* * Function Name : LCD_WriteReg * Description : Writes to the selected LCD register. * Input : - LCD_Reg: address of the selected register. * - LCD_RegValue: value to write to the selected register. * Output : None * Return : None *******************************************************************************/ void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue) { /* Write 16-bit Index (then Write Reg) */ LCD_WriteRegIndex(LCD_Reg); /* Write 16-bit Reg */ /* Reset LCD control line(/CS) and Send Start-Byte */ LCD_nCS_StartByte(START_BYTE | LCD_WRITE_REG); SPI_I2S_SendData(SPI3, LCD_RegValue>>8); while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY) != RESET) { vBlockToWait( 1 ); } SPI_I2S_SendData(SPI3, (LCD_RegValue & 0xFF)); while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY) != RESET) { vBlockToWait( 1 ); } LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET); }
/******************************************************************************* * Function Name : LCD_Clear * Description : Clears the hole LCD. * Input : Color: the color of the background. * Output : None * Return : None *******************************************************************************/ void LCD_Clear(uint16_t Color) { uint32_t index = 0; LCD_SetCursor(0x00, 0x013F); if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408)) { LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ } for(index = 0; index < 76800; index++) { LCD_WriteRAM(Color); } if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408)) { LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET); } }
/** * @brief Displays a monocolor picture. * @param Pict: pointer to the picture array. * @retval None */ void LCD_DrawMonoPict(const uint32_t *Pict) { uint32_t index = 0, i = 0; LCD_SetCursor(0, 319); LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ for(index = 0; index < 2400; index++) { for(i = 0; i < 32; i++) { if((Pict[index] & (1 << i)) == 0x00) { LCD_WriteRAM(BackColor); } else { LCD_WriteRAM(TextColor); } } } LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET); }
/******************************************************************************* * Function Name : LCD_DrawLine * Description : Displays a line. * Input : - Xpos: specifies the X position. * - Ypos: specifies the Y position. * - Length: line length. * - Direction: line direction. * This parameter can be one of the following values: Vertical * or Horizontal. * Output : None * Return : None *******************************************************************************/ void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction) { u32 i = 0; LCD_SetCursor(Xpos, Ypos); if(Direction == Horizontal) { LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ for(i = 0; i < Length; i++) { LCD_WriteRAM(TextColor); } LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET); } else { for(i = 0; i < Length; i++) { LCD_WriteRAMWord(TextColor); Xpos++; LCD_SetCursor(Xpos, Ypos); } } }
void LCDTFTConf::LCD_CtrlLinesConfig(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOs clock*/ RCC_AHB1PeriphClockCmd(LCD_NCS_GPIO_CLK | LCD_WRX_GPIO_CLK, ENABLE); /* Configure NCS in Output Push-Pull mode */ GPIO_InitStructure.GPIO_Pin = LCD_NCS_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure); /* Configure WRX in Output Push-Pull mode */ GPIO_InitStructure.GPIO_Pin = LCD_WRX_PIN; GPIO_Init(LCD_WRX_GPIO_PORT, &GPIO_InitStructure); /* Set chip select pin high */ LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET); }
/** * @brief Displays a line. * @param Xpos: specifies the X position. * @param Ypos: specifies the Y position. * @param Length: line length. * @param Direction: line direction. * This parameter can be one of the following values: Vertical or Horizontal. * @retval None */ void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction) { uint32_t i = 0; LCD_SetCursor(Xpos, Ypos); if(Direction == Horizontal) { LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ for(i = 0; i < Length; i++) { LCD_WriteRAM(TextColor); } LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET); } else { for(i = 0; i < Length; i++) { LCD_WriteRAMWord(TextColor); Xpos++; LCD_SetCursor(Xpos, Ypos); } } }
/******************************************************************************* * Function Name : LCD_DrawChar * Description : Draws a character on LCD. * Input : - Xpos: the Line where to display the character shape. * This parameter can be one of the following values: * - Linex: where x can be 0..9 * - Ypos: start column address. * - c: pointer to the character data. * Output : None * Return : None *******************************************************************************/ void LCD_DrawChar(u8 Xpos, u16 Ypos, uc16 *c) { vu32 index = 0, i = 0; vu8 Xaddress = 0; Xaddress = Xpos; LCD_SetCursor(Xaddress, Ypos); for(index = 0; index < 24; index++) { LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ for(i = 0; i < 16; i++) { if((c[index] & (1 << i)) == 0x00) { LCD_WriteRAM(BackColor); } else { LCD_WriteRAM(TextColor); } } LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET); Xaddress++; LCD_SetCursor(Xaddress, Ypos); } }
void LCD_Setup(void) { /* Configure the LCD Control pins --------------------------------------------*/ LCD_CtrlLinesConfig(); /* Configure the LCD_SPI interface ----------------------------------------------*/ LCD_SPIConfig(); _delay_(5); /* Delay 50 ms */ /* Start Initial Sequence ------------------------------------------------*/ LCD_WriteReg(R229, 0x8000); /* Set the internal vcore voltage */ LCD_WriteReg(R0, 0x0001); /* Start internal OSC. */ LCD_WriteReg(R1, 0x0100); /* set SS and SM bit */ LCD_WriteReg(R2, 0x0700); /* set 1 line inversion */ LCD_WriteReg(R3, 0x1030); /* set GRAM write direction and BGR=1. */ LCD_WriteReg(R4, 0x0000); /* Resize register */ LCD_WriteReg(R8, 0x0202); /* set the back porch and front porch */ LCD_WriteReg(R9, 0x0000); /* set non-display area refresh cycle ISC[3:0] */ LCD_WriteReg(R10, 0x0000); /* FMARK function */ LCD_WriteReg(R12, 0x0000); /* RGB interface setting */ LCD_WriteReg(R13, 0x0000); /* Frame marker Position */ LCD_WriteReg(R15, 0x0000); /* RGB interface polarity */ /* Power On sequence -----------------------------------------------------*/ LCD_WriteReg(R16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ LCD_WriteReg(R17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */ LCD_WriteReg(R18, 0x0000); /* VREG1OUT voltage */ LCD_WriteReg(R19, 0x0000); /* VDV[4:0] for VCOM amplitude */ _delay_(20); /* Dis-charge capacitor power voltage (200ms) */ LCD_WriteReg(R16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ LCD_WriteReg(R17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */ _delay_(5); /* Delay 50 ms */ LCD_WriteReg(R18, 0x0139); /* VREG1OUT voltage */ _delay_(5); /* Delay 50 ms */ LCD_WriteReg(R19, 0x1d00); /* VDV[4:0] for VCOM amplitude */ LCD_WriteReg(R41, 0x0013); /* VCM[4:0] for VCOMH */ _delay_(5); /* Delay 50 ms */ LCD_WriteReg(R32, 0x0000); /* GRAM horizontal Address */ LCD_WriteReg(R33, 0x0000); /* GRAM Vertical Address */ /* Adjust the Gamma Curve ------------------------------------------------*/ LCD_WriteReg(R48, 0x0006); LCD_WriteReg(R49, 0x0101); LCD_WriteReg(R50, 0x0003); LCD_WriteReg(R53, 0x0106); LCD_WriteReg(R54, 0x0b02); LCD_WriteReg(R55, 0x0302); LCD_WriteReg(R56, 0x0707); LCD_WriteReg(R57, 0x0007); LCD_WriteReg(R60, 0x0600); LCD_WriteReg(R61, 0x020b); // /* Set GRAM area ---------------------------------------------------------*/ // LCD_WriteReg(R80, 0x0000); /* Horizontal GRAM Start Address */ // LCD_WriteReg(R81, 0x00EF); /* (240-1) Horizontal GRAM End Address */ // LCD_WriteReg(R82, 0x0000); /* Vertical GRAM Start Address */ // LCD_WriteReg(R83, 0x013F); /* (320-1) Vertical GRAM End Address */ /* Set GRAM area ---------------------------------------------------------*/ LCD_WriteReg(R80, 0x0000); /* Horizontal GRAM Start Address */ LCD_WriteReg(R81, 0x00EF); /* Horizontal GRAM End Address */ LCD_WriteReg(R82, 0x0000); /* Vertical GRAM Start Address */ LCD_WriteReg(R83, 0x013F); /* Vertical GRAM End Address */ LCD_WriteReg(R96, 0xA700); /* Gate Scan Line */ LCD_WriteReg(R97, 0x0001); /* NDL,VLE, REV */ LCD_WriteReg(R106, 0x0000); /* set scrolling line */ /* Partial Display Control -----------------------------------------------*/ LCD_WriteReg(R128, 0x0000); LCD_WriteReg(R129, 0x0000); LCD_WriteReg(R130, 0x0000); LCD_WriteReg(R131, 0x0000); LCD_WriteReg(R132, 0x0000); LCD_WriteReg(R133, 0x0000); /* Panel Control ---------------------------------------------------------*/ LCD_WriteReg(R144, 0x0010); LCD_WriteReg(R146, 0x0000); LCD_WriteReg(R147, 0x0003); LCD_WriteReg(R149, 0x0110); LCD_WriteReg(R151, 0x0000); LCD_WriteReg(R152, 0x0000); /* Set GRAM write direction and BGR = 1 */ /* I/D=01 (Horizontal : increment, Vertical : decrement) */ /* AM=1 (address is updated in vertical writing direction) */ LCD_WriteReg(R3, 0x1018); LCD_WriteReg(R7, 0x0173); /* 262K color and display ON */ LCD_CtrlLinesWrite(LCD_BL_GPIO_PORT, LCD_BL_PIN, Bit_SET); }
/** * @brief Writes 1 word to the LCD RAM. * @param RGB_Code: the pixel color in RGB mode (5-6-5). * @retval None */ void LCD_WriteRAMWord(uint16_t RGB_Code) { LCD_WriteRAM_Prepare(); LCD_WriteRAM(RGB_Code); LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET); }