简介
本次使用基于ST7789芯片的LCD,分辨率为240*240,驱动写好后如下:
#define LCD_XMAX 240
#define LCD_YMAX 240
/**
* @brief 显示图片
*
* @remark Image2Lcd取模方式:C语言数据/水平扫描/16位真彩色(RGB565)/高位在前
*
* @param x,y :Starting coordinates
* @param width:img width
* @param height:img width
* @param p :img source code
*
* @return void
*/
void lcd_show_image(uint16_t x,
uint16_t y,
uint16_t width,
uint16_t height,
const uint8_t *p)
{
if (x + width > LCD_XMAX || y + height > LCD_YMAX)
{
return;
}
lcd_set_window(x, y, x + width - 1, y + height - 1);
st7789_write_buffer((uint8_t *)p, width * height * 2);
}
问题:
当调用此函数显示240*240分辨率的图片时,显示效果只能显示一半。
//初始化LCD后调用此函数
lcd_show_image(0, 0, 240, 240, gImage);
效果如下图:
解决办法:
修改显示图片函数如下:
#define LCD_XMAX 240
#define LCD_YMAX 240
void lcd_show_image(uint16_t x,
uint16_t y,
uint16_t width,
uint16_t height,
const uint8_t *p)
{
if (x + width > LCD_XMAX || y + height > LCD_YMAX)
{
return;
}
lcd_set_window(x, y, x + width - 1, y + height - 1);
if (width * height * 2 > 65535)
{
st7789_write_buffer((uint8_t *)p, 65535);
st7789_write_buffer((uint8_t *)(p + 65535), width * height * 2 - 65535);
}
else
{
st7789_write_buffer((uint8_t *)p, width * height * 2);
}
}
改完后效果如下: