寻思 发表于 2022-4-2 14:39:38

51单片机存储图片必须用TF卡+25X16之类的方案吗

如题,我要做几个图片显示,实际并不大,但是肯定超过了64K,现在看到的方案是把图片存在TF卡里,然后单片机读取TF卡存到flash里面,再读出来,显示到TFT显示屏上。
因为显示板尺寸有限,有没有其他方案,不想用到TF卡,能否有其他方案把图片存在FLASH里面,然后显示在屏幕上。

t3486784401 发表于 2022-4-2 14:46:37

分辨率? 色彩位深度?刷新速度?
上压缩算法可以小很多,但对算力有要求

寻思 发表于 2022-4-2 15:00:26

t3486784401 发表于 2022-4-2 14:46
分辨率? 色彩位深度?刷新速度?
上压缩算法可以小很多,但对算力有要求 ...
(引用自2楼)

目前对速度要求不高吧,目前要解决存储问题,就是2.8寸普通的9341驱动芯片的屏幕

yyts 发表于 2022-4-2 15:13:36

你是想问,不通过tf卡,怎么样才能把图片下载到flash里面吗?你可以用个串口,接到电脑上,用电脑发图片下来保存到flash。

寻思 发表于 2022-4-2 15:29:18

yyts 发表于 2022-4-2 15:13
你是想问,不通过tf卡,怎么样才能把图片下载到flash里面吗?你可以用个串口,接到电脑上,用电脑发图片下 ...
(引用自4楼)

嗯嗯,谢谢大佬指点,这样的话还得单独写一个串口转发数据的程序吧{:lol:}

shiva_shiva 发表于 2022-4-2 15:30:24

图片可以直接编译到固化文件内

lovejp1981 发表于 2022-4-2 15:37:03

寻思 发表于 2022-4-2 15:29
嗯嗯,谢谢大佬指点,这样的话还得单独写一个串口转发数据的程序吧...
(引用自5楼)

可以用CH341之类的工具直接写进Flash。

lovejp1981 发表于 2022-4-2 15:37:18

shiva_shiva 发表于 2022-4-2 15:30
图片可以直接编译到固化文件内
(引用自6楼)

单片机Flash没那么大哦。

modbus 发表于 2022-4-2 15:48:12

寻思 发表于 2022-4-2 15:29
嗯嗯,谢谢大佬指点,这样的话还得单独写一个串口转发数据的程序吧...
(引用自5楼)

有SPI闪存编程器,焊接前先把图片烧写进去

yyts 发表于 2022-4-2 16:09:30

寻思 发表于 2022-4-2 15:29
嗯嗯,谢谢大佬指点,这样的话还得单独写一个串口转发数据的程序吧...
(引用自5楼)

那就把spi flash的接口留出来,用spi flash的烧写器接到电脑下载进去(一般有配软件)

shiva_shiva 发表于 2022-4-2 16:21:12

寻思 发表于 2022-4-2 15:29
嗯嗯,谢谢大佬指点,这样的话还得单独写一个串口转发数据的程序吧...
(引用自5楼)

xmodem标准协议不用写

shiva_shiva 发表于 2022-4-2 16:22:16

lovejp1981 发表于 2022-4-2 15:37
单片机Flash没那么大哦。
(引用自8楼)

啊?我看楼主也没说外部flash,就认为是片内flash了。51 flash没有128KB的?

lovejp1981 发表于 2022-4-2 16:37:20

shiva_shiva 发表于 2022-4-2 16:22
啊?我看楼主也没说外部flash,就认为是片内flash了。51 flash没有128KB的?
(引用自12楼)

没用过51不太清楚,AVR反正是想放个图片难。既然楼主外挂Flash,那肯定是不够用。

kundi 发表于 2022-4-2 20:28:23

shiva_shiva 发表于 2022-4-2 16:22
啊?我看楼主也没说外部flash,就认为是片内flash了。51 flash没有128KB的?
(引用自12楼)

STC32可以,128KB,有8/16位TFT接口和DMA,KEIL需要安装C251编译器.
如果只能是要STC8系列的话,就可以考虑STC8A8K64D4,以及STC8H8K64U(B版),STC8H4K64TLR等,这些都有8/16位TFT接口和DMA.以保证速度足够快

hbzxx 发表于 2022-4-2 21:06:14

51来驱动9341有点费力啊,估计好几秒才能刷一副图片。图片可以放25Q064之类的SPI flash 中,用编程器提前把BMP图片放进去。

tomzbj 发表于 2022-4-2 21:07:54

本帖最后由 tomzbj 于 2022-4-2 21:17 编辑

spiflash呗, w25q16什么的
如果是很简单的图形, 可以用调色板技术,当年dos时代的东西。
不超过16种颜色的话, 一个像素只需要半个字节,320*240的图片可以压到30多k。不超过256种颜色就是一个像素一个字节。

t3486784401 发表于 2022-4-3 01:16:50

除了连硬件,软件上能做的就是压缩了,各种压缩算法。

JPG 就算了,51 那点内存装 huffman 表太费劲,不过也有似乎 elm-chan 也写过类似的精简库,大概需要 KB 级别内存。

针对常见 BMP 的话,开销比较小的是降低颜色数,会损失一部分图像质量。但如果有抖动器的话效果还行。
以一张 bing 每日一图为例,裁剪成 320x240 尺寸,依次压缩至 256色/16色/4色,抛开调色盘数据可以估算数据大小:

原图 24bpp,16M色彩,320*240*3 = 225 KB


抖动压缩至 8bpp,256色彩,320*240*1 = 75 KB


抖动压缩至 4bpp,16色彩,320*240*1/2 = 37.5 KB


抖动压缩至 2bpp,4色彩,320*240*1/4 = 18.75 KB


最后一种 2bpp 可以塞进大多数 51 单片机,效果勉强能看。

iamseer 发表于 2022-4-3 02:12:05

t3486784401 发表于 2022-4-3 01:16
除了连硬件,软件上能做的就是压缩了,各种压缩算法。

JPG 就算了,51 那点内存装 huffman 表太费劲,不过 ...
(引用自17楼)

这种有损压缩的视觉效果肉眼可见。为了省个存储器不是白瞎了一块挺好的彩屏么?毕竟一个屏的钱至少买十个存储器,为了能塞进内部flash压缩太狠不是很值。

banyai 发表于 2022-4-3 08:01:45

如果图是固定的话,直接用烧录器写到FLASH中,再去贴FLASH就可以了。

寻思 发表于 2022-4-3 08:43:31

tomzbj 发表于 2022-4-2 21:07
spiflash呗, w25q16什么的
如果是很简单的图形, 可以用调色板技术,当年dos时代的东西。
不超过16种颜色 ...
(引用自16楼)

谢谢大佬的回复,听懂一点,虽然不明白具体实现的方法。{:lol:}

寻思 发表于 2022-4-3 09:07:50

shiva_shiva 发表于 2022-4-2 16:22
啊?我看楼主也没说外部flash,就认为是片内flash了。51 flash没有128KB的?
(引用自12楼)

51最大64k

tomzbj 发表于 2022-4-3 10:45:44

寻思 发表于 2022-4-3 08:43
谢谢大佬的回复,听懂一点,虽然不明白具体实现的方法。
(引用自20楼)

存储时按每个像素半个字节来存, 0-15, 建个unsigned short palette作为调色板

显示时建个够一行数据的缓冲区, 每次从存储的数据里读取一行, 读到的数据作为调色板索引, 写到行缓冲里再送屏幕

modbus 发表于 2022-4-3 11:58:34

寻思 发表于 2022-4-3 09:07
51最大64k
(引用自21楼)

看你以前的贴子用的是STC8,不如换成STC32G,128K闪存,基本上算是无缝切换

寻思 发表于 2022-4-3 21:27:03

modbus 发表于 2022-4-3 11:58
看你以前的贴子用的是STC8,不如换成STC32G,128K闪存,基本上算是无缝切换
(引用自23楼)

管脚不知道是否pintopin的,回头看下,可以的话 问他们要几个样片试试{:titter:}

小李非刀 发表于 2022-4-4 15:31:49

直接将文件写到FLASH就行了,不用那么麻烦。
页: [1]
查看完整版本: 51单片机存储图片必须用TF卡+25X16之类的方案吗