本帖最后由 eltonchang2001 于 2022-11-9 11:53 编辑
在使用显示屏显示图像时,往往是将图像数据存放到数组中,然后再通过相应的显示函数将其显示到屏幕上。当图像数据比较大,且程序存储空间又有限的情况下,则会限制正常的实现。那如何来解决此类问题呢?那就需要借助外部的存储器件来解决,由于ESK32-21001扩展板上配有FLASH型存储器MX25L6406E,为此可以使用它来存放图像数据以解决存储空间不知的问题。ESK32-21001上的MX25L6406E电路连接关系,如图1所示。
图1 接口电路
有了存储介质,那又该如何来解决数据的来源问题呢? 将图像数据存放到数值的方式显然是行不通的,为此只好借助串行通讯来提供数据。 使用串口来发送数据文件并加以输出测试的效果,见图2所示。 图2数据文件收发测试 实现图像文件转存到FLASH来再现图像的主程序如下: int main(void)
{
u16 i,j,k,dat;
u8 sj[80]={0x00};
UxART_Configuration(); //串口初始化
app_tft_init();
ili9341_init(); // 显示屏初始化
ili9341_clear(RED); // 清屏
set_cursor(0,0);
gram_prepare();
SPI_FLASH_Init(); // FLASH初始化
SPI_FLASH_WriteStatus(0x00);
SPI_FLASH_SectorErase(FLASH_TEST_ADDR);
// 接收图像数据并转存到FLASH
k=0;
while(k<40)
{
i=0;
while(i<80)
{
if(USART_GetFlagStatus(HTCFG_UART_PORT, USART_FLAG_RXDR) == SET)
{
dat = USART_ReceiveData(HTCFG_UART_PORT); // 接收串口数据
sj[i]=(u8) dat;
i=i+1;
}
}
SPI_FLASH_BufferWrite(sj, FLASH_TEST_ADDR+k*80, 80); // 将接收数据存入FLASH
k=k+1;
}
// 从FLASH读取数据以再现图像,图片规格为40*40像素点。
k=0;
while(k<40)
{
set_cursor(0,k);
gram_prepare();
SPI_FLASH_BufferRead(sj, FLASH_TEST_ADDR+k*80, 80); // 读取FLASH数据
for(j=0;j<80;j++)
{
write_data(sj[j]); // 再现图像
}
k=k+1;
}
while (1);
}
经程序的编译与下载,其显示效果见图3所示。 这样再有高分辨率的图像显示问题,通过该处理方式就都可以较好地解决了。 图3 图像再现
|