生活随笔
收集整理的這篇文章主要介紹了
lcd显示外部flash内的图片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
lcd顯示外部flash內的圖片
1、把圖片用 Img2Lcd 轉換位數組,數組高位在前,低位在后。
2、把生成的文件轉為bin文件燒錄到外部flash。
生成的數組里面前面4個Byte時在flash里的地址,5-8大小,9-10是寬,11-12是高。
3、調用下面函數顯示燒錄到外部flash的圖片。(在這之前需把底層驅動寫好)
例:lcd_show_image(10,20,(void*)dy);
/*************************************************
// x0:
// y0:
// *p_image:數組
//*************************************************/
void lcd_show_image(uint16_t x0, uint16_t y0, const Image_Info_1 *p_image)
{uint8_t REFLASH_LINE_SZ = read_line_num_case(p_image->width) ;//根據圖片寬度,動態判定每次讀取行數uint32_t data_addr = 0; //extern flash image addr offsetuint8_t line_yu = p_image->high%REFLASH_LINE_SZ; //余數行uint8_t line_zheng = p_image->high/REFLASH_LINE_SZ; //整數行uint32_t reflash_size = p_image->width*2*REFLASH_LINE_SZ; //一次讀flash的字節數for(uint8_t line = 0; line <line_zheng;line++)//整數行{memset(image_buff,0,reflash_size);data_addr = p_image->start_addr+p_image->width*2*line*REFLASH_LINE_SZ;SPI_Flash_Read_4(data_addr, reflash_size, image_buff );LCD_CS_CLR_1;LCD_DC_COM;oled_set_pos_1(x0, y0+line*REFLASH_LINE_SZ, x0+p_image->width-1, y0+line*REFLASH_LINE_SZ+(REFLASH_LINE_SZ-1)); LCD_CS_SET_1;LCD_DC_DATA;LCD_CS_CLR_1;spi_write(image_buff, reflash_size);LCD_CS_SET_1;}if(line_yu)//余數行{data_addr = p_image->start_addr+p_image->width*2*line_zheng*REFLASH_LINE_SZ;SPI_Flash_Read_4(data_addr, p_image->width*2*line_yu, image_buff );LCD_CS_CLR_1;LCD_DC_COM;oled_set_pos_1(x0, y0+line_zheng*REFLASH_LINE_SZ, x0+p_image->width-1, y0+line_zheng*REFLASH_LINE_SZ+line_yu-1); LCD_CS_SET_1;LCD_DC_DATA;LCD_CS_CLR_1;spi_write(image_buff, p_image->width*2*line_yu);LCD_CS_SET_1;}
}
總結
以上是生活随笔為你收集整理的lcd显示外部flash内的图片的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。