【玩轉嵌入式屏幕顯示】(五)TFT-LCD屏幕顯示圖片

1. 使用取模軟件對圖片取模

取模軟件使用Img2LCD,附上下載連接web

首先準備一張用於顯示的圖片,修改圖片像素值爲240*240

在取模軟件中打開圖片:


算法

2. 編寫圖片顯示函數

/** * @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