OpenEdv-开源电子网

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

求助,实验13 TFTLCD显示实验。RGB三色颠倒

[复制链接]

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
发表于 2013-11-24 20:29:23 | 显示全部楼层 |阅读模式
用的液晶控制器是s6d1162

得到ID为1162
if(lcddev.id==0x1162)

。。。

在初始化加入1162的初始化。


在别的程序里正常。
移植到原子的程序里就RGB三色颠倒

红色变成蓝色
蓝色变成红色

原子大大帮忙点破一下
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
 楼主| 发表于 2013-11-24 21:23:46 | 显示全部楼层
//LCD??GRAM
//RGB_Code:??????
void LCD_WriteRAM(u16 RGB_Code)
{     
LCD->LCD_RAM = RGB_Code;//?????ù??GRAM
}

在这里加入16位颜色取反 可以吗?
回复 支持 反对

使用道具 举报

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
 楼主| 发表于 2013-11-24 21:55:32 | 显示全部楼层
怎么样让颜色的16位 颠倒过来啊????
回复 支持 反对

使用道具 举报

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
 楼主| 发表于 2013-11-24 21:55:42 | 显示全部楼层
没人吗?????????????????
回复 支持 反对

使用道具 举报

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
 楼主| 发表于 2013-11-24 22:07:39 | 显示全部楼层
原本是这样就可以了:POINT_COLOR=RED;


现在要改成:POINT_COLOR=LCD_BGR2RGB(RED);才显示正常红色。


求解啊!!无助啊~~~~
回复 支持 反对

使用道具 举报

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
 楼主| 发表于 2013-11-24 22:11:04 | 显示全部楼层
求关键!求核心啊!!
代码太多了~~眼睛都看疼了~~~
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-11-25 10:26:13 | 显示全部楼层
回复【6楼】chiakipolo:
---------------------------------
LCD_ReadPoint(u16 x,u16 y)改这个函数就好了
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
 楼主| 发表于 2013-11-25 12:42:26 | 显示全部楼层
回复【7楼】xiaoyan:
---------------------------------
太感谢了!!
我晚上回去试一试~~~~
回复 支持 反对

使用道具 举报

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
 楼主| 发表于 2013-11-25 13:09:59 | 显示全部楼层
//读取个某点的颜色值  
//x,y:坐标
//返回值:此点的颜色
u16 LCD_ReadPoint(u16 x,u16 y)
{
  u16 r=0,g=0,b=0;
if(x>=lcddev.width||y>=lcddev.height)return 0; //超过了范围,直接返回   
LCD_SetCursor(x,y);    
if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310)LCD_WR_REG(0X2E);//9341/6804/3510 发送读GRAM指令
else LCD_WR_REG(R34);       //其他IC发送读GRAM指令
  if(lcddev.id==0X9320)opt_delay(2); //FOR 9320,延时2us    
if(LCD->LCD_RAM)r=0; //dummy Read   
opt_delay(2);  
  r=LCD->LCD_RAM;     //实际坐标颜色
  if(lcddev.id==0X9341||lcddev.id==0X5310) //9341/NT35310要分2次读出
  {
opt_delay(2);  
b=LCD->LCD_RAM; 
g=r&0XFF;//对于9341/5310,第一次读取的是RG的值,R在前,G在后,各占8位
g<<=8;
}else if(lcddev.id==0X6804)r=LCD->LCD_RAM; //6804第二次读取的才是真实值 
if(lcddev.id==0X9325||lcddev.id==0X4535||lcddev.id==0X4531||lcddev.id==0X8989||lcddev.id==0XB505||lcddev.id==0X1162)return r;//这几种IC直接返回颜色值
else if(lcddev.id==0X9341||lcddev.id==0X5310)return (((r>>11)<<11)|((g>>10)<<5)|(b>>11)); //ILI9341/NT35310需要公式转换一下
else return LCD_BGR2RGB(r); //其他IC  
}


不是上面的原因??应该是直接返回颜色值。而我没有定义0x1162 所以为其他IC而取反了???
现在在外面,不能 回去试。

回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-11-25 14:48:44 | 显示全部楼层
回复【9楼】chiakipolo:
---------------------------------
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
 楼主| 发表于 2013-11-25 18:55:10 | 显示全部楼层
回复【10楼】xiaoyan:
---------------------------------
谢谢了。。。
还是不行。不过我已经在全部添加了函数。
可以正常显示了。
我现在发出来给大家共享一下。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 17:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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