OpenEdv-开源电子网

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

战舰板子+ili9341 (2.8寸TFT液晶) 显示的颜色反了

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-7-20
在线时间
2 小时
发表于 2018-8-6 19:19:30 | 显示全部楼层 |阅读模式
5金钱
我根据 实验13 (tft显示实验库函数版) ,自己写的代码。在附件里。
因为源代码lcd.c为了兼容其他型号的lcd加了有好多没用的语句,我就是想只用9341的那部分代码,所以自己改了一下。
但是下载到开发板上发现液晶的蓝色和红色恰好相反,我想可能是RGB颜色数据的高位变成低位了。。。但是ILI9341的颜色格式确实是R5G6B5啊,已经看了半天自己的代码了,主要是u16 color这个参数,真的想不通我到底哪里错了。有朋友可以看下我的代码,指点一下我么?谢谢了...

LCD+RTC.zip

3.1 MB, 下载次数: 168

最佳答案

查看完整内容[请看2#楼]

LCD_WR_REG(0x36); // Memory Access Control LCD_WR_DATA(0x48); 试试看把0x48改成0x40, 可以参考ILI9341的参考手册, 这个Bit 3设1, Red和Blue位置是交换的.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2018-8-6 19:19:31 | 显示全部楼层
本帖最后由 sammy902583 于 2018-8-6 20:42 编辑

                LCD_WR_REG(0x36);    // Memory Access Control
                LCD_WR_DATA(0x48);

试试看把0x48改成0x40, 可以参考ILI9341的参考手册, 这个Bit 3设1, Red和Blue位置是交换的.
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-7-20
在线时间
2 小时
 楼主| 发表于 2018-8-6 19:22:23 | 显示全部楼层
现象是在2.8寸液晶上,字符是对的,但是颜色显示不对
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-7-20
在线时间
2 小时
 楼主| 发表于 2018-8-6 21:49:07 | 显示全部楼层
杨树林 发表于 2018-8-6 19:22
现象是在2.8寸液晶上,字符是对的,但是颜色显示不对

老哥,太谢谢了!经你提醒我按你说的改了后颜色显示就正确了。手册里,的bit3:(0=RGB color filter pannel,1=BGR color filter pannel),要想使颜色数据格式为R5G6B5,并且扫描格式为从左到右从上到下,确实在写命令0x36后,应该写数据0b00。bit3位应该为0。

但是我的问题又来了,lcd_init函数里最后是开窗函数+清屏,void LCD_OLCD_Open_Window(0,0,239,319);LCD_Clear(WHITE);函数原型是:

void LCD_OLCD_Open_Window(0,0,239,319)
{
    LCD_WR_REG(0x36);
    LCD_WR_DATA(0X08);
   
    LCD_WR_REG(0X2A);
    LCD_WR_DATA(x>>8);
    LCD_WR_DATA(x&0xff);
    LCD_WR_DATA(xx>>8);
    LCD_WR_DATA(xx&0xff);

    LCD_WR_REG(0X2B);
    LCD_WR_DATA(y>>8);
    LCD_WR_DATA(y&0xff);
    LCD_WR_DATA(yy>>8);
    LCD_WR_DATA(yy&0xff);
      
}

void LCD_Clear(u16 color)
{    u32 i;
    LCD_WR_REG(0x2c);
    for(i=0;i<320*240;i++)
        LCD_WR_DATA(color);

}
还是要写指令0x36 后写数据0x08才能正确显示啊。bit3为1,这是咋回事,相矛盾了.....


QQ图片20180806213143.jpg
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-7-20
在线时间
2 小时
 楼主| 发表于 2018-8-6 21:52:14 | 显示全部楼层
sammy902583 发表于 2018-8-6 20:35
LCD_WR_REG(0x36);    // Memory Access Control
                LCD_WR_DATA(0x48);
...

开窗函数LCD_Open_Window(0,0,239,319)
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-7-20
在线时间
2 小时
 楼主| 发表于 2018-8-6 21:54:27 | 显示全部楼层
杨树林 发表于 2018-8-6 21:52
开窗函数LCD_Open_Window(0,0,239,319)

函数原型LCD_Open_Window(u16 x,u16 y,u16 xx,u16 yy)
回复

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2018-8-7 09:11:46 | 显示全部楼层
本帖最后由 sammy902583 于 2018-8-7 09:15 编辑

其实后来我看了我的代码, 0x36的Bit 3是1的, 我只是依据以往经验回答, 通常RGB顺序相反是设置的问题...
我自己的代码0x36 register只有设置一次, 所以不会有您类似的冲突. 其他地方的代码, 除非是转向, 看起来也没有需要多次设置的必要... 只要把正确的设置回填到一开始Initialize的地方基本上就可以了.
如果还有其他问题的话, 就只能比对其他可以正常运行的代码来找出问题了.


回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-7-20
在线时间
2 小时
 楼主| 发表于 2018-8-7 14:24:34 | 显示全部楼层
sammy902583 发表于 2018-8-7 09:11
其实后来我看了我的代码, 0x36的Bit 3是1的, 我只是依据以往经验回答, 通常RGB顺序相反是设置的问题...
我 ...

en ,感谢!我一直以为是我代码的问题,对着代码眼都看花掉了,竟没想到去看芯片数据手册,长经验了!也怪那个原子开发指南上 没说明指令0x36后 发送的数据位bit3的作用
回复

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2019-7-9
在线时间
23 小时
发表于 2019-7-9 23:05:42 | 显示全部楼层
杨树林 发表于 2018-8-6 21:52
开窗函数LCD_Open_Window(0,0,239,319)

我想问一下清屏函数改变背景色之后,再开一个小窗显示字符是直接调用开窗函数和写字符数组的像素点,还是用别的0x30指令开一个局部窗口呢?因为我直接开窗被清屏函数覆盖掉了,不能显示字符。ili9340模拟时序写的。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 09:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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