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

2019-07-20 22:57发布

我根据 实验13 (tft显示实验库函数版) ,自己写的代码。在附件里。
因为源代码lcd.c为了兼容其他型号的lcd加了有好多没用的语句,我就是想只用9341的那部分代码,所以自己改了一下。
但是下载到开发板上发现液晶的蓝 {MOD}和红 {MOD}恰好相反,我想可能是RGB颜 {MOD}数据的高位变成低位了。。。但是ILI9341的颜 {MOD}格式确实是R5G6B5啊,已经看了半天自己的代码了,主要是u16 color这个参数,真的想不通我到底哪里错了。有朋友可以看下我的代码,指点一下我么?谢谢了...

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
sammy902583
1楼-- · 2019-07-21 03:53
 精彩回答 2  元偷偷看……
杨树林
2楼-- · 2019-07-21 06:47
现象是在2.8寸液晶上,字符是对的,但是颜 {MOD}显示不对
杨树林
3楼-- · 2019-07-21 11:02
杨树林 发表于 2018-8-6 19:22
现象是在2.8寸液晶上,字符是对的,但是颜 {MOD}显示不对

老哥,太谢谢了!经你提醒我按你说的改了后颜 {MOD}显示就正确了。手册里,的bit3:(0=RGB color filter pannel,1=BGR color filter pannel),要想使颜 {MOD}数据格式为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,这是咋回事,相矛盾了.....


杨树林
4楼-- · 2019-07-21 12:31
sammy902583 发表于 2018-8-6 20:35
LCD_WR_REG(0x36);    // Memory Access Control
                LCD_WR_DATA(0x48);
...

开窗函数LCD_Open_Window(0,0,239,319)
杨树林
5楼-- · 2019-07-21 16:25
杨树林 发表于 2018-8-6 21:52
开窗函数LCD_Open_Window(0,0,239,319)

函数原型LCD_Open_Window(u16 x,u16 y,u16 xx,u16 yy)
sammy902583
6楼-- · 2019-07-21 18:26
 精彩回答 2  元偷偷看……

一周热门 更多>