/** * @brief Displays a bitmap picture. * @param BmpAddress: Bmp picture address. * @param Xpos: Bmp X position in the LCD * @param Ypos: Bmp Y position in the LCD * @retval None */ void ili9325_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp) { uint32_t index = 0, size = 0; /* Read bitmap size */ size = *(volatile uint16_t *) (pbmp + 2); size |= (*(volatile uint16_t *) (pbmp + 4)) << 16; /* Get bitmap data address offset */ index = *(volatile uint16_t *) (pbmp + 10); index |= (*(volatile uint16_t *) (pbmp + 12)) << 16; size = (size - index)/2; pbmp += index; /* Set GRAM write direction and BGR = 1 */ /* I/D=00 (Horizontal : decrement, Vertical : decrement) */ /* AM=1 (address is updated in vertical writing direction) */ ili9325_WriteReg(LCD_REG_3, 0x1008); /* Set Cursor */ ili9325_SetCursor(Xpos, Ypos); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); for(index = 0; index < size; index++) { /* Write 16-bit GRAM Reg */ LCD_IO_WriteData(*(volatile uint16_t *)pbmp); pbmp += 2; } /* Set GRAM write direction and BGR = 1 */ /* I/D = 01 (Horizontal : increment, Vertical : decrement) */ /* AM = 1 (address is updated in vertical writing direction) */ ili9325_WriteReg(LCD_REG_3, 0x1018); }
/** * @brief Draw vertical line. * @param RGBCode: Specifies the RGB color * @param Xpos: specifies the X position. * @param Ypos: specifies the Y position. * @param Length: specifies the Line length. * @retval None */ void spfd5408_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length) { uint16_t counter = 0; /* set GRAM write direction and BGR = 1 */ /* I/D=00 (Horizontal : increment, Vertical : decrement) */ /* AM=1 (address is updated in vertical writing direction) */ spfd5408_WriteReg(LCD_REG_3, 0x1010); /* Set Cursor */ spfd5408_SetCursor(Xpos, Ypos); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); /* Fill a complete vertical line */ for(counter = 0; counter < Length; counter++) { ArrayRGB[counter] = RGBCode; } /* Write 16-bit GRAM Reg */ LCD_IO_WriteData((uint8_t*)&ArrayRGB[0], Length * 2); /* set GRAM write direction and BGR = 1 */ /* I/D=00 (Horizontal : increment, Vertical : decrement) */ /* AM=1 (address is updated in vertical writing direction) */ spfd5408_WriteReg(LCD_REG_3, 0x1018); }
/** * @brief Draw vertical line. * @param RGB_Code: Specifies the RGB color * @param Xpos: specifies the X position. * @param Ypos: specifies the Y position. * @param Length: specifies the Line length. * @retval None */ void ili9325_DrawVLine(uint16_t RGB_Code, uint16_t Xpos, uint16_t Ypos, uint16_t Length) { uint16_t i = 0; /* 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, 0x1010); /* Set Cursor */ ili9325_SetCursor(Xpos, Ypos); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); for(i = 0; i < Length; i++) { /* Write 16-bit GRAM Reg */ LCD_IO_WriteData(RGB_Code); } /* 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); }
/** * @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 ili9325_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue) { LCD_IO_WriteReg(LCD_Reg); /* Write 16-bit GRAM Reg */ LCD_IO_WriteData(LCD_RegValue); }
/** * @brief Writes to the selected LCD register. * @param LCDReg: address of the selected register. * @param LCDRegValue: value to write to the selected register. * @retval None */ void spfd5408_WriteReg(uint8_t LCDReg, uint16_t LCDRegValue) { LCD_IO_WriteReg(LCDReg); /* Write 16-bit GRAM Reg */ LCD_IO_WriteData((uint8_t*)&LCDRegValue, 2); }
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 Write pixel. * @param Xpos: specifies the X position. * @param Ypos: specifies the Y position. * @param RGB_Code: the RGB pixel color * @retval None */ void ili9325_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGB_Code) { /* Set Cursor */ ili9325_SetCursor(Xpos, Ypos); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); /* Write 16-bit GRAM Reg */ LCD_IO_WriteData(RGB_Code); }
/** * @brief Write pixel. * @param Xpos: specifies the X position. * @param Ypos: specifies the Y position. * @param RGBCode: the RGB pixel color * @retval None */ void spfd5408_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode) { /* Set Cursor */ spfd5408_SetCursor(Xpos, Ypos); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); /* Write 16-bit GRAM Reg */ LCD_IO_WriteData((uint8_t*)&RGBCode, 2); }
/** * @brief Draw vertical line. * @param RGB_Code: Specifies the RGB color * @param Xpos: specifies the X position. * @param Ypos: specifies the Y position. * @param Length: specifies the Line length. * @retval None */ void ili9325_DrawHLine(uint16_t RGB_Code, uint16_t Xpos, uint16_t Ypos, uint16_t Length) { uint16_t i = 0; /* Set Cursor */ ili9325_SetCursor(Xpos, Ypos); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); for(i = 0; i < Length; i++) { /* Write 16-bit GRAM Reg */ LCD_IO_WriteData(RGB_Code); } }
/** * @brief Displays picture. * @param pdata: picture address. * @param Xpos: Image X position in the LCD * @param Ypos: Image Y position in the LCD * @param Xsize: Image X size in the LCD * @param Ysize: Image Y size in the LCD * @retval None */ void ili9325_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata) { uint32_t index = 0, size = 0; size = (Xsize * Ysize); /* Set Cursor */ ili9325_SetCursor(Xpos, Ypos); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); for(index = 0; index < size; index++) { /* Write 16-bit GRAM Reg */ LCD_IO_WriteData(*(volatile uint16_t *)pdata); pdata += 2; } }
/** * @brief Draw vertical line. * @param RGBCode: Specifies the RGB color * @param Xpos: specifies the X position. * @param Ypos: specifies the Y position. * @param Length: specifies the Line length. * @retval None */ void spfd5408_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length) { uint32_t i = 0; /* Set Cursor */ spfd5408_SetCursor(Xpos, Ypos); /* Prepare to write GRAM */ LCD_IO_WriteReg(LCD_REG_34); /* Sent a complete line */ for(i = 0; i < Length; i++) { ArrayRGB[i] = RGBCode; } LCD_IO_WriteData((uint8_t*)&ArrayRGB[0], Length * 2); }
/** * @brief Writes data to the selected LCD register. * @param LCD_Reg: address of the selected register. * @retval None */ void ili9341_WriteData(uint16_t RegValue) { LCD_IO_WriteData(RegValue); }
/** * @brief Writes data to the selected LCD register. * @param LCD_Reg: address of the selected register. * @retval None */ void st7789v_WriteData(uint8_t RegValue) { LCD_IO_WriteData(RegValue); }