电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区
论坛
开发板专区
【STM32F412-DISCO 开发板试用体验】BMP位图显示实验
【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显示位图的函数。
上传工程文件和头文件。
上次我用电容屏显示汉字,这次来点更好玩的,显示图片表情。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
收藏
举报
分享
×
微信分享
扫描二维码分享
qq分享
QQ空间分享
微博分享
我来回复
登录后可评论,请
登录
或
注册
所有回答
数量:
2
铭心科技
2017-05-25
不错。
0
回复
举报
发布
Eagleson
2017-05-25
不错~
0
回复
举报
发布
×
举报
举报人:
被举报人:donatello
*
类型:
请选择类型
问题质量差
垃圾广告信息
偏离社区主题
违规内容
不友善内容
与社区已有问题重复
以上选项都不是
*
详细原因:
取消
提交
x
收藏成功!点击
我的收藏
查看收藏的全部帖子