取模軟件使用Img2LCD,附上下載連接。web
首先準備一張用於顯示的圖片,修改圖片像素值爲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); }
測試結果以下:
svg