【STM32F412-DISCO 开发板试用体验】BMP位图显示实验

  • 图片
  • 开发
  • 彩屏
  • 汉字
  • 表情
  • donatello
  • LV6工程师
  • |      2017-05-22 23:21:17
  • 浏览量 1672
  • 回复:2
上次我用电容屏显示汉字,这次来点更好玩的,显示图片表情。LCD点阵显示汉字和图片其实区别不大,唯一的区别就是,汉字点阵的色彩单调,只需要1种或几种的颜色即可完成显示,但是图片的颜色是千变万化的,每一个像素点的颜色都不一定完全相同,按照16位真彩色标准,每一个像素点都可以指定为RGB565标准中的任意一种颜色,这种RGB颜色的数据长度为16位,对应红绿蓝三种色彩的位数为5、6、5,即每个点的红绿蓝灰度都分别为2^5、2^6、2^5,总色彩数为2^16=65536,即一个点可以显示65536种颜色,所以这种颜色排布方式又称为RGB565排布。 既然每个点都要显示65536种颜色,那么如果是采用串行通信给彩屏一位一位那样传送数据的话,即使是MB级别的高速SPI接口也受不了这个工作,多图片刷新也会非常慢,因此,点阵刷屏必须采用高速并行总线通信。板子对像素点填充使用的是FMC/FSMC高速总线,这种总线一个时钟周期可以发送16位的数据,即一个时钟周期就可以填充一个像素点,填充240*240=57600个像素点也仅需要57600个时钟周期,而IIC、SPI这种串行总线填充一个16位色的像素点需要65536个时钟周期,填满全屏需要57600*65536=3774873600个时钟周期,当然,如今市面上的串口屏当然不可能采用这种逐个像素点逐个比特的填充方式,而是采用串口指令总控制+ARM MCU做数据处理+FPGA芯片做底层处理,即繁重的底层填充点阵比特流的工作都交给FPGA芯片处理了,FPGA芯片虽然在数据处理能力上不及ARM MCU芯片,但是人家有“三头六臂”,拥有海量的逻辑门“小弟”,这些逻辑门的电平翻转速度极快,在处理彩屏显示方面完全没有任何压力,因此串口屏的瓶颈就在串口通信速度方面和MCU的数据处理方面。 图片取模我用的是Image2lcd这个软件,可以选择取模的行列方向,以及生成的数据是16位、24位或是32位,这里采用默认配置:逐行扫描取模,16位数据。 扯远了,继续回到F412Disco板子上面。LCD彩屏我只会显示BMP图片文件,而官方例程中显示SD卡JPG文件的方式也是先将JPG文件解码,再编码成BMP文件数组,最后打印到显示屏上面,BMP数组的数据格式为8位char型,相邻的前后两个字节的数据合成16位数据,即为1个像素点的色彩数据。除此之外,BMP数组也要跟字模数据一样,添加const关键字修饰,以便存储在flash的数据存储区里面而不是程序存储区里面。由于官方例程对于直接显示BMP数组存在BUG,因此我还重写了BMP显示位图的函数。 上传工程文件和头文件。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:2
铭心科技 2017-05-25
不错。
0   回复
举报
发布
Eagleson 2017-05-25
不错~
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子