找回密码
 注册
关于网站域名变更的通知
查看: 633|回复: 2
打印 上一主题 下一主题

转——【小梅哥FPGA进阶教程】第十四章 TFT屏显示图片 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-28 13:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Zedd 于 2019-3-30 16:03 编辑 / M: f. Z+ K' O! j7 y0 z: j

0 |& G9 q4 L0 i% Z
十四、TFT屏显示图片

$ `+ c) |9 F8 y, H/ K. I. z
本文由杭电网友曾凯峰贡献,特此感谢
3 O+ E8 O$ r/ U6 x8 A7 `
学习了小梅哥的TFT显示屏驱动设计后,想着在此基础上通过TFT屏显示一张图片,有了这个想法就开始动工了。首先想到是利用FPGA内部ROM存储图片数据,然后通过控制读取数据地址将图片数据传给TFT驱动模块,从而将每个图片数据显示在对应的像素点上。整个设计的框图如下:
: F+ a% M" E' Q. \, c
3 M# ?1 V3 l3 @  r' q
主要是在小梅哥TFT驱动设计基础上增加了图片数据发送控制模块Imgdata_send,该模块包括存储图片数据的rom,和一些简单的逻辑控制。具体的rom IP核的建立我这里就不说了,不懂的可以参看小梅哥的相关内容的视频,我这里主要讲如何将图片转换成mif文件。这里有两种方法,可以作为参考,主要用到如下软件:
. _/ E" K3 `; {$ t

8 Z& V0 x) I; L, n9 j步骤1:利用Img2Lcd将图片转化为BMP格式的(当然图片本身为BMP格式就不需要转了,直接进入步骤2); , r' Z- Z% [7 W
步骤2:利用BMP2Mif可将图片转化为mif文件。 7 ^/ G; p" l! g; Y% ?; o
具体实现如下:
+ y* h7 Z% E- C8 I6 ?9 A步骤1:先打开Img2Lcd打开一张图片,选择输出格式为BMP格式,输出灰度选择24位真彩色(由于BMP2Mif软件只能载入24位或8位的,所以这里就没有直接选16位的真彩色),最大宽度和高度根据图片实际的大小进行选择的,由于内部rom能存储的数据量有限,我选择了一张像素为160*120的图片如果想显示大的图片,如480*272图片,用这种方法就不能实现(看到这里有人想,如果想显示大点的图片那应该怎么解决,后面我会有其他方法来实现TFT屏保显示)。 . g7 z- _) |2 a& s1 J7 V  l" f

; }6 u3 o9 c* U: K* w" `( j8 [步骤2:打开BMP2Mif软件,加载刚转换输出的24位BMP格式图片,选择输出图像格式和文件类型,点击一键转换便将图片转换为了mif文件了,可以将mif文件名更改下以区别不同图片mif文件。 / n7 e! m9 H& R5 }2 z
" Z4 M, |9 D5 h8 R" R
可以用Notepad++将转化的mif文件打开看看,截取部分图如下:
( r' ~8 K' g, w6 I% |5 w2 K
9 Q/ ^& ~+ \) S' L  Q
rom IP核设置完成后就是数据发送控制模块Imgdata_send中控制逻辑的编写,主要是让图片显示在屏幕指定的地方,这就需要根据TFT_CTRL模块的TFT行和场扫描计数器输出信号来控制rom的数据地址,从而控制TFT_CTRL的待显示数据data_in。具体代码如下:
5 |& Q& w: x2 p! K
) Z# w/ c# L, }! ]3 c4 n8 q6 r

4 G" g: f( X" e

1 {5 A2 ?; j) ]: u% L! v

# @; k  |& L- ~+ e; i接下来就是仿真验证,利用已有的TFT_CTRL模块的hcount、vcount、tft_de作为Imgdata_send模块的输出进行仿真验证,代码如下: ( u7 w, g; ?, Y' o. Z" B
: P8 A2 k  j+ Z8 G9 f: ~
# d  B9 g8 q+ y

8 A* V8 T( e0 R$ k7 n' E0 B. Z6 r

' g1 u; h* K. j; Z$ I9 L) U
3 D% E) c1 L5 c5 v2 S
2 f+ Y% }, h0 S0 |. C
, @1 O' Z" f6 Y6 i# X+ f* M仿真验证的波形图如下:
& P5 w# r& b- u" a- m* I
$ |/ T4 M3 ]+ V/ }1 a

0 O6 k# x& v: I3 y: T0 L1 c, B
, @+ ?1 e% Z/ \! T& A+ q

- y; A1 |3 m! A' u
6 x. V; H. O6 s3 Z- X从仿真结果可以看出,图片数据是在我们指定的区域输出的。该模块仿真验证正确后,进行顶层电路文件的设计。顶层文件编写如下:
) ~- S* p. A5 |5 m, N) y& O  d- f: w

3 z# Y* ?' ~0 t0 ?5 j4 v& e% ~. }" Y9 T
3 y! U/ a* i. Q, `4 ?4 U

0 D. ?6 A* {/ q' @1 Q& `
) k9 j* }, j1 i6 C9 D+ @1 t2 N
% ^9 q* y( T- ], o

) o- c, O' u+ Q) h$ B, k: s( Z  R; O
$ r" m3 G) n* A8 e4 f
生成的顶层电路图如下:
: X- Y' D9 x7 @/ ?1 I' p
1 o% u4 C7 N2 L0 l
接下来就是仿真验证,仿真验证程序如下: 4 Q3 S( U3 D; T/ z& i2 u
, ^8 N. ?) [  w- @& b, n( d
0 C4 f# h3 _* W) x2 }* i" _

6 x1 w) ]; J& j$ _2 {
6 P8 |8 F1 w3 ~7 S9 I  r, O8 a
1 g0 U  L1 t3 D0 u- [

" v# m" e6 ?# e- }仿真波形如下: : A) G1 V9 Q2 u& n

; b/ _+ W) ^8 f* n. w' [  T- s, N) o; U0 H

) Q! d- {- F+ k% V/ r% K
0 {$ V6 h' q/ p' h4 j- D6 A* h" ], Z7 |8 P% |  [
从波形可以看出,图片数据在指定区域显示。接下来就是板级验证,引脚分配参照芯航线FPGA学习套件引脚分配表进行分配,然后布局布线,板级程序下载最后实现的效果图如下: ( M# _- ]$ U, Y4 h; |) Z8 }* f

1 [2 f! y* v9 K2 r& w( i我们设置的是显示在屏幕的左上角,与预期效果是一致的,想要改变图片的位置,可以更改Imgdata_send模块的28、29行代码: 6 G- H( S1 B$ X. F; [% Q
) _% f7 R% G9 T5 X) m3 X& ~- c
将上面的(0、0)更改为其他的数,图片位置就会改变,如果想让图片在屏幕上自动的移动,可以自己设置一种路径让img_hbegin、img_vbegin的值按你的路径变化就可实现图片的自动移动,读者可以自己改进学习。
) v; K/ C/ B4 r. S0 h% w

( G+ n3 [4 T1 g# x
游客,如果您要查看本帖隐藏内容请回复

8 Z/ X, n& |8 M* j8 ]' g; F- T

该用户从未签到

3#
发表于 2021-9-29 14:03 | 只看该作者
学习学习学习  l) \9 S2 `0 S- x7 |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 21:59 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表