取模软件使用Img2LCD,附上下载链接。
首先准备一张用于显示的图片,修改图片像素值为240*240
:
在取模软件中打开图片:
/**
* @brief 显示图片函数
* @param x,y 起点坐标
* @param width 图片宽度
* @param height 图片高度
* @param p —— 图片缓存数据起始地址
* @note Image2Lcd取模方式:C语言数据/水平扫描/16位真彩色(RGB565)/高位在前 其他的不要选
* @return none
*/
void LCD_Show_Image(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t *p)
{
uint32_t img_size = width * height * 2; //图片所占字节数
uint32_t remain_size = img_size; //图片每次发送后剩余的字节数
uint8_t i = 0;
/* 错误检测 */
if(x + width > LCD_Width || y + height > LCD_Height)
{
return;
}
LCD_Address_Set(x, y, x + width - 1, y + height - 1);
LCD_WR_RS(1);
/* SPI每次最大发送2^16 = 65536个数据,图片最大大小为240*240*2 = 115200,会超过此大小,所以设计循环发送算法 */
for(i = 0;i <= img_size / 65536; i++)
{
if(remain_size / 65536 >= 1)
{
LCD_SPI_Send((uint8_t *)p, 65535);
p += 65535;
remain_size -= 65535;
}
else
{
LCD_SPI_Send((uint8_t *)p, remain_size % 65535);
}
}
}
测试代码:
int main(void)
{
HAL_Init();
LCD_Init();
LCD_Show_Image(0,0,240,240,gImage_bear);
LCD_ShowCharStr(70,240-24,140,"Starting...",WHITE,BLUE,24);
while (1);
}
测试结果如下: