OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11012|回复: 50

TFT_LCD显示彩色图片,自己写底层函数

[复制链接]

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2017-2-8 11:42:02 | 显示全部楼层 |阅读模式
本帖最后由 aiyeba 于 2017-2-16 15:15 编辑

1、先从网上下载240*320的图片

2、然后用画图软件转成BMP格式的


3、用软件输出数组


4、最后调用一个函数



void DisplayPicture(void)
{           
                u16 temp,pos,t;  
                LCD_SetCursor(0x00,0x0000);
                LCD_WriteRAM_Prepare();
               for(pos=0;pos<320;pos++)
                {
                        for(t=0;t<240*2;t++)
                        {
                                temp=gImage[pos*480+t]*256+gImage[pos*480+t+1];  //这个地方  改成gImage[pos*480+t]<<8+gImage[pos*480+t+1];  好像有问题
                                t++;                                
                               LCD_WriteRAM(temp);      //理解这个函数  对摄像头那一章才能有真正的理解                           
                        }                                
                }               
}
QQ图片20170208113438.png
QQ图片20170208114103.png
自己选择的路,成家前走完。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2017-2-8
在线时间
14 小时
发表于 2017-2-8 12:01:01 | 显示全部楼层
void DisplayPicture(void)大哥你这个函数插到原子学习板的LCD显示的地方是不是可以通用的呢?
回复 支持 反对

使用道具 举报

12

主题

336

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1571
金钱
1571
注册时间
2015-8-9
在线时间
624 小时
发表于 2017-2-8 13:37:30 | 显示全部楼层
一个简单粗暴有效的函数
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-2-8 13:42:45 | 显示全部楼层
zshron 发表于 2017-2-8 12:01
void DisplayPicture(void)大哥你这个函数插到原子学习板的LCD显示的地方是不是可以通用的呢?

可以的。只要你的lcd驱动没有问题就行。你试试就知道了。

自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

3

主题

400

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1746
金钱
1746
注册时间
2015-6-11
在线时间
308 小时
发表于 2017-2-14 20:09:58 来自手机 | 显示全部楼层
这种写法如果图片切换的话,会有明显的刷新感,可以优化下应该
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-2-16 11:49:12 | 显示全部楼层
zc123 发表于 2017-2-14 20:09
这种写法如果图片切换的话,会有明显的刷新感,可以优化下应该

老哥 ,你太小看stm32的能力了。
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

15

主题

36

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2016-3-25
在线时间
49 小时
发表于 2017-2-16 13:20:13 | 显示全部楼层
请教一下,你说的软件输出数组,是用什么软件?
回复 支持 反对

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2017-2-16 14:07:26 | 显示全部楼层
老哥,按照操作输出这个const unsigned char gImage_bmp[153608]数组了。。

为啥下载进去黑屏了~~~
亦余心之所善,
虽九死其犹未悔。
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-2-16 14:08:23 | 显示全部楼层
Gareth 发表于 2017-2-16 13:20
请教一下,你说的软件输出数组,是用什么软件?

就是我上图给的软件啊   

Image2Lcd v2.9   原子哥的软件包里面有
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-2-16 14:11:44 | 显示全部楼层
南有乔木 发表于 2017-2-16 14:07
老哥,按照操作输出这个const unsigned char gImage_bmp[153608]数组了。。

为啥下载进去黑屏了~~~

153600  你的多了8个字节

把最前面的8个字节去掉  

还有就是不应该是黑屏   黑屏说明你基本的驱动都有问题
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2017-2-16 14:31:23 | 显示全部楼层
调试出来了,为啥是这样的 老哥~~
813053872278829449.jpg
11.jpg
亦余心之所善,
虽九死其犹未悔。
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-2-16 14:36:48 | 显示全部楼层
南有乔木 发表于 2017-2-16 14:31
调试出来了,为啥是这样的 老哥~~

你先下载一个原子哥的例程 看看硬件是不是ok的


然后,往下找问题。  应该是生成数组的的时候 ,你软件没设置好。

这个地方  改成gImage[pos*480+t]<<8+gImage[pos*480+t+1];  好像有问题
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2017-2-16 14:43:04 | 显示全部楼层
aiyeba 发表于 2017-2-16 14:36
你先下载一个原子哥的例程 看看硬件是不是ok的

哎呀,妥了,谢谢啦!!!

能讲解下思路么
亦余心之所善,
虽九死其犹未悔。
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-2-16 14:56:30 | 显示全部楼层
南有乔木 发表于 2017-2-16 14:43
哎呀,妥了,谢谢啦!!!

能讲解下思路么

思路就是:
单色和彩色
先说一下TFT的彩色    一个点占2个字节   RGB  565   也就是一个点 可以有2^16种色调
那么240*320个点  就需要240*320*2个字节  
生成的数组  我们把2个字节合成一个u16的temp 也就是调好的一个点的颜色
一个一个的写入LCD里面    这里有一个函数LCD_WriteRAM(temp);     

自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-2-16 14:59:51 | 显示全部楼层
aiyeba 发表于 2017-2-16 14:56
思路就是:
单色和彩色
先说一下TFT的彩色    一个点占2个字节   RGB  565   也就是一个点 可以有2^16 ...

单色的话 其实只是描点了

因为这个temp是固定的

也就是 只有240*320     temp=RED;  用宏定义就可以   

看看原子哥的写子的时候   这个temp就是固定了各种颜色  也就是具体的值   

其实 我们还可以自己调出一些很偏的颜色   根据RGB 565来就行
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2017-2-16 15:10:33 | 显示全部楼层
mark。先看下
本人交流群:136045527,欢迎各位大佬和萌新
回复 支持 反对

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2017-2-16 16:54:16 | 显示全部楼层
在原子的硬件和驱动下是成立的,但是如果考虑通用性,需要注意两个方面:
1、颜色是RGB还是GBR,在不同地方是不一样的,比如EMWIN就是用的BGR
2、16位颜色就需要注意大、小端模式了,STM32默认小端,而比如微软WINDOWS中生成的BMP就是大端模式,FATFS也可能是被设定为大端模式
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-2-16 19:46:30 | 显示全部楼层
yyx112358 发表于 2017-2-16 16:54
在原子的硬件和驱动下是成立的,但是如果考虑通用性,需要注意两个方面:
1、颜色是RGB还是GBR,在不同地 ...

那BGR是不是生成数组的软件也就不一样了  因为对我们而言  
我们是不会具体去关注rgb的数值的 。

大小端  就是2字节合成u16的时候  那个是高字节?
这个软件上面有设置
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

9

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2016-11-6
在线时间
38 小时
发表于 2017-4-4 15:54:06 | 显示全部楼层
本帖最后由 479123159 于 2017-4-4 16:01 编辑

temp=gImage[pos*480+t]*256+gImage[pos*480+t+1];
老哥,能讲解一下这句的意思吗?
回复 支持 反对

使用道具 举报

9

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2016-11-6
在线时间
38 小时
发表于 2017-4-4 16:14:51 | 显示全部楼层
本帖最后由 479123159 于 2017-4-4 16:38 编辑

我显示图片的时候,无论怎么弄边上都会有重复的部分图片,也不知道什么原因。
QQ截图20170404163659.jpg
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-4-5 08:42:58 | 显示全部楼层
479123159 发表于 2017-4-4 16:14
我显示图片的时候,无论怎么弄边上都会有重复的部分图片,也不知道什么原因。

我的 是竖屏
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

22

主题

103

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2017-2-23
在线时间
205 小时
发表于 2017-4-5 11:00:32 | 显示全部楼层
cool
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-4-6 20:51:14 | 显示全部楼层
479123159 发表于 2017-4-4 15:54
temp=gImage*256+gImage;
老哥,能讲解一下这句的意思吗?

一个像素需要2个字节,那么每一行呢就是  480个字节    。

POS表示的是第几行,pos从0开始    于是  gImage【0】*256+gImage【1】
这俩个字节组成16位   描述的是第一个点   一个彩色的点   

在说细一点   16位  RGB565      可以调出任意颜色来     一个个点组成了图片
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

1

主题

127

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2017-3-10
在线时间
63 小时
发表于 2017-4-6 22:22:54 来自手机 | 显示全部楼层
早上玩过了。
回复 支持 反对

使用道具 举报

22

主题

103

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2017-2-23
在线时间
205 小时
发表于 2017-4-19 09:20:42 | 显示全部楼层
南有乔木 发表于 2017-2-16 14:43
哎呀,妥了,谢谢啦!!!

能讲解下思路么

老师问一下您是怎么解决的
回复 支持 反对

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2017-4-19 11:52:48 | 显示全部楼层
JACK123 发表于 2017-4-19 09:20
老师问一下您是怎么解决的

我的问题好像是底层驱动,坐标设置问题,你的话得一步步自己调试,具体不好说,是底层驱动的问题~~我的底层驱动自己写的
亦余心之所善,
虽九死其犹未悔。
回复 支持 反对

使用道具 举报

70

主题

275

帖子

0

精华

高级会员

Rank: 4

积分
728
金钱
728
注册时间
2017-6-20
在线时间
188 小时
发表于 2017-8-24 22:47:11 | 显示全部楼层
先顶一下
回复 支持 反对

使用道具 举报

70

主题

275

帖子

0

精华

高级会员

Rank: 4

积分
728
金钱
728
注册时间
2017-6-20
在线时间
188 小时
发表于 2017-8-25 10:20:17 | 显示全部楼层
你好楼主,可以给我一份你的程序吗,我调了半天 还是没搞出来
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2017-8-27
在线时间
1 小时
发表于 2017-8-27 17:53:02 | 显示全部楼层
请问我这个图片显示为什么是这样,帮忙看看,谢谢
850630ECEDD7E237566FBF3B6C608E3D.jpg
回复 支持 反对

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
发表于 2017-8-27 18:13:48 | 显示全部楼层
改成改成gImage[pos*480+t]<<8+gImage[pos*480+t+1];  好像有问题
回复 支持 反对

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
发表于 2017-8-27 18:14:37 | 显示全部楼层

改成改成gImage[pos*480+t]<<8+gImage[pos*480+t+1];  好像有问题

对,肯定会有问题,你试试(gImage[pos*480+t]<<8)+gImage[pos*480+t+1];
如果对了,自己看优先级
回复 支持 反对

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
发表于 2017-8-27 18:18:01 | 显示全部楼层
我有个问题,我买的屏幕是4.3寸 像素是800*480的  
我原来自己也写了这个函数,总是不能满屏显示,感觉是数组大小超了,有没有解决办法?
回复 支持 反对

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
发表于 2017-8-27 18:23:17 | 显示全部楼层
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-8-27 19:30:26 | 显示全部楼层
SNEZSTM32 发表于 2017-8-27 18:18
我有个问题,我买的屏幕是4.3寸 像素是800*480的  
我原来自己也写了这个函数,总是不能满屏显示,感觉是 ...

大屏要用专用的驱动芯片才合适.
回复 支持 反对

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
发表于 2017-8-27 21:30:51 | 显示全部楼层
操作系统 发表于 2017-8-27 19:30
大屏要用专用的驱动芯片才合适.

对不起 是我没说清楚 满屏显示不是驱动的问题,是因为数组大小的问题,
你想 我需要800*480*2 = 768000字节  即750KB  但是我看芯片手册FLASH还像只有512
我的芯片是STM103ZE 我就想知道我FLASH是不是只有这么大,或者说除了外加FLASH,有没有办法放下怎么大的数组
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-8-27 21:41:37 | 显示全部楼层
如果只有一张图片,请尝试直接显示JPG,或者PNG.格式.自己解决格式问题.如果图片多,可以增加SPI FLASH.
回复 支持 反对

使用道具 举报

74

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2017-6-7
在线时间
137 小时
发表于 2017-8-28 09:39:43 | 显示全部楼层
操作系统 发表于 2017-8-27 21:41
如果只有一张图片,请尝试直接显示JPG,或者PNG.格式.自己解决格式问题.如果图片多,可以增加SPI FLASH.

谢谢了,你这个应该是图片解码,是高级片的东西,暂时没有学到那里,
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-8-28 16:08:01 | 显示全部楼层

你找240*320的图片嘛,边上的黑掉就黑掉,图片还是可以看得.
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-8-28 16:13:30 | 显示全部楼层
珍惜现在 发表于 2017-8-27 17:53
请问我这个图片显示为什么是这样,帮忙看看,谢谢

弄个干净的工程,感觉你还有别的写入了LCD屏里面
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-8-28 16:14:24 | 显示全部楼层
天天mdk 发表于 2017-8-25 10:20
你好楼主,可以给我一份你的程序吗,我调了半天 还是没搞出来

不要慌,慢慢来.多想想.

把我的步骤看清楚,一定可以出来的.
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-2-4
在线时间
96 小时
发表于 2017-9-19 18:04:29 | 显示全部楼层
楼主,为什么我用那个软件输出240*320的图片数组数据才86400(jpg格式),72600(bmp格式)
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
 楼主| 发表于 2017-9-20 09:13:19 | 显示全部楼层
MrXie 发表于 2017-9-19 18:04
楼主,为什么我用那个软件输出240*320的图片数组数据才86400(jpg格式),72600(bmp格式)

你看软件最下面那行字    输入图像: 240*320     输出图像:240*320  没有这个值就你搞错了


你只要设置成我图上面的不会有错的.
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-2-4
在线时间
96 小时
发表于 2017-9-20 14:40:36 | 显示全部楼层
aiyeba 发表于 2017-9-20 09:13
你看软件最下面那行字    输入图像: 240*320     输出图像:240*320  没有这个值就你搞错了

明白了,谢谢
回复 支持 反对

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
453
金钱
453
注册时间
2016-8-8
在线时间
101 小时
发表于 2017-9-20 15:59:29 | 显示全部楼层
看个热闹
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-2-4
在线时间
96 小时
发表于 2017-9-22 16:54:35 | 显示全部楼层
你好,为什么我用那个软件想输出一张480*800的照片弄不出来?那个最大宽度和高度我填了480*800之后输出他马上就变成了360*360了,而且下面输出那里显示216*360。看图
00.png
回复 支持 反对

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2017-9-22 18:03:27 | 显示全部楼层
//这个地方  改成gImage[pos*480+t]<<8+gImage[pos*480+t+1];  好像有问题

试试加括号(gImage[pos*480+t]<<8)+gImage[pos*480+t+1];  
回复 支持 反对

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
453
金钱
453
注册时间
2016-8-8
在线时间
101 小时
发表于 2017-10-10 12:15:47 | 显示全部楼层
Image2Lcd v2.9 软件的勾选 高位在前是不是表示 比如 数组的Image[1]是红色部分Image[2]是蓝色部分。

如果是 那么gImage[pos*480+t]<<8+gImage[pos*480+t+1]; 这个函数可以不用乘480了。

TFT的扫描模式跟Image2Lcd v2.9 软件的配成一样的 因该也是可行的吧???


只要把Image[1]向左移8位或上Image[2]。

u16 i=0,temp;
for (u16 k=0;k<320;k++)
    {
        temp=(Image[i]<<8) | Image[i+1];
         i=i+2;
    }


可以这样理解吗???
如何拿下蒙住眼的树叶。
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2017-6-20
在线时间
32 小时
发表于 2017-10-10 17:42:55 | 显示全部楼层
已mark
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-1-5
在线时间
2 小时
发表于 2020-1-10 11:11:47 | 显示全部楼层
用哪个画图软件呢
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-1-5
在线时间
2 小时
发表于 2020-1-10 15:59:54 | 显示全部楼层
请问一下函数写好之后,为什么说我image未定义呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 06:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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