OpenEdv-开源电子网

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

ili9341的某个点的颜色的读取程序出错,求大神指正,谢谢

[复制链接]

9

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-8-3
在线时间
2 小时
发表于 2014-9-27 22:39:04 | 显示全部楼层 |阅读模式
5金钱
先说问题再贴代码,写颜色都是正确的,在读点的时候只能读出FC和00 这个值,程序看了一遍又一遍就是找不出哪有错,已经卡住一天了,求帮忙,谢谢了

是9341驱动的

我把牵涉到的程序都贴上,大家帮忙看看

//写命令,一般写寄存器编号
void Lcd_wr_cmd(u16 cmd)
{
LCD->lcd_cmd=cmd; //写入要写的寄存器序号
}

//读数据
u16 Lcd_re_data(void)
{
return LCD->lcd_data;  //读数据
}

//设置区间起始位置
u8 Lcd_interval_star(u16 sx,u16 sy)
{
if(sx>lcd_dev.width-1||sy>lcd_dev.height-1) return 1;
Lcd_wr_cmd(SETX_REG);
Lcd_wr_data(sx>>8);
Lcd_wr_data(sx&0x00FF);
Lcd_wr_cmd(SETY_REG);
Lcd_wr_data(sy>>8);
Lcd_wr_data(sy&0x00FF);
return 0;
}

u32 Lcd_re_colour(u16 x,u16 y)
{
u32 point_colour=0;
Lcd_interval_star(x,y);
Lcd_wr_cmd(0X002E);
Delay_us(5);
Lcd_re_data();//第一个读数丢弃
Delay_us(5);
point_colour=((u32)Lcd_re_data()<<16);
Delay_us(5);
point_colour|=(u32)Lcd_re_data();
return point_colour;
}
因为出错,所以读颜色的时候就连读两个16位数据组成32位的,然后串口输出出来看,

printf ("FFFF write %x\r\n",Lcd_re_colour(1,1));
这是读取函数其他颜色都一样的

再贴串口数据结果
00 1f blue fc 00
ff e0 yellow fc fc 00 fc
ff ff    write fc fc fc fc
0000 black 0
前面是写进去的颜色,后面是读出来的颜色

真心百爪挠心,烦躁的不行,不然不会麻烦大家的,辛苦了,谢谢



最佳答案

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

 请参考我们的例程。 9341读点,数据手册上面的介绍,完全就是错误的!!! [mw_shl_code=c,true]//读取个某点的颜色值 //x,y:坐标 //返回值:此点的颜色 u16 LCD_ReadPoint(u16 x,u16 y) { u16 r,g,b; 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 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-9-27 22:39:05 | 显示全部楼层
 请参考我们的例程。
9341读点,数据手册上面的介绍,完全就是错误的!!!
[mw_shl_code=c,true]//读取个某点的颜色值 //x,y:坐标 //返回值:此点的颜色 u16 LCD_ReadPoint(u16 x,u16 y) { u16 r,g,b; 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/5310发送读GRAM指令 else if(lcddev.id==0X5510)LCD_WR_REG(0X2E00); //5510 发送读GRAM指令 else LCD_WR_REG(R34); //其他IC发送读GRAM指令 GPIOB->CRL=0X88888888; //PB0-7 上拉输入 GPIOB->CRH=0X88888888; //PB8-15 上拉输入 GPIOB->ODR=0XFFFF; //全部输出高 LCD_RS_SET; LCD_CS_CLR; //读取数据(读GRAM时,第一次为假读) LCD_RD_CLR; delay_us(1);//延时1us LCD_RD_SET; //dummy READ LCD_RD_CLR; delay_us(1);//延时1us r=DATAIN; //实际坐标颜色 LCD_RD_SET; if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510) //9341/NT35310/NT35510要分2次读出 { LCD_RD_CLR; b=DATAIN;//读取蓝色值 LCD_RD_SET; g=r&0XFF;//对于9341,第一次读取的是RG的值,R在前,G在后,各占8位 g<<=8; }else if(lcddev.id==0X6804) { LCD_RD_CLR; LCD_RD_SET; r=DATAIN;//6804第二次读取的才是真实值 } LCD_CS_SET; GPIOB->CRL=0X33333333; //PB0-7 上拉输出 GPIOB->CRH=0X33333333; //PB8-15 上拉输出 GPIOB->ODR=0XFFFF; //全部输出高 if(lcddev.id==0X9325||lcddev.id==0X4535||lcddev.id==0X4531||lcddev.id==0X8989||lcddev.id==0XB505)return r; //这几种IC直接返回颜色值 else if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510)return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));//ILI9341/NT35310/NT35510需要公式转换一下 else return LCD_BGR2RGB(r); //其他IC }[/mw_shl_code]


我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-8-3
在线时间
2 小时
 楼主| 发表于 2014-9-27 22:39:05 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
在纠结两天的抓耳挠腮之后,终于搞清楚了,其实原因很简单,9341会在红色和蓝色的后面多余3位补上100,而不是000,在绿色后面补上00,所以如果按照满色全写1来输出的话,读取出来的就会是FC。为这个问题纠结两天,好浪费啊
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-28 08:07:59 | 显示全部楼层
原子哥说的对,资料上面是错的,我被坑了两天,真是坑爹
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-28 08:08:22 | 显示全部楼层
不知道哪里正确的资料可以下载的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-3-7
在线时间
0 小时
发表于 2015-3-19 11:08:55 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
ILI9341英文手册读点指令2Eh介绍是错误的?上边没有介绍先读的是哪个色。。。搞不懂啊,手册连个初始化流程都没有。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-3-19 23:31:27 | 显示全部楼层
回复【6楼】xiaojiasb:
---------------------------------
所以我干脆不看.
浪费时间.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2015-3-15
在线时间
4 小时
发表于 2015-4-27 21:44:22 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
怪不得一直看不懂。原子哥!!数据手册都有问题,那开发过程中可以参考那些资料去编写这些程序呢??
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-4-28 00:39:47 | 显示全部楼层
回复【8楼】QKX607:
---------------------------------
还是数据手册。或者问厂家要资料。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

86

主题

982

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1846
金钱
1846
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-8-4 14:27:44 | 显示全部楼层
回复【3楼】八度空间:
---------------------------------
我算是发现了
1.对ILI9341来说,读GRAM,第一个数据是无效的,所以要多读一次。
2.对ILI9341来说,所有的读都是在RD低电平的时候读,千万别等RD上升沿之后再读,否则是错误的。
3.对ILI9341来说,所有的写是正常的时序,都是WR的上升沿的时候写。
合肥-文盲
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-8-5 08:04:39 | 显示全部楼层
回复【10楼】合肥-文盲:
---------------------------------
嗯,好久没搞这厮了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

86

主题

982

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1846
金钱
1846
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-8-5 08:44:30 | 显示全部楼层
回复【11楼】八度空间:
---------------------------------
BGA为啥设为1    而不是0?      我设为0和设为1  发现没影响   难道要读点的时候才能看出影响吗   但是读点函数的设计也是按照RGB的顺序读点的啊
合肥-文盲
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-8-5 12:36:29 | 显示全部楼层
回复【12楼】合肥-文盲:
---------------------------------
会处理一下的吧,9341这货数据手册原子哥说是错的,不知道哪个是对的


你说的这个问题我那时侯也遇到了,就是奇怪不知道怎么没影响
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

86

主题

982

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1846
金钱
1846
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-8-5 12:54:32 | 显示全部楼层
回复【13楼】八度空间:
---------------------------------
我就把BGR位设置为0了,以后遇到问题再说,测试了为0没影响,现在在看那个画直线和画圆的Bresenham算法推导
合肥-文盲
回复

使用道具 举报

86

主题

982

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1846
金钱
1846
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-8-6 10:24:56 | 显示全部楼层
回复【13楼】八度空间:
---------------------------------
发现问题了  ,BGR位必须设为1  才能按照RGB顺序处理颜色
合肥-文盲
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-8-6 22:14:05 | 显示全部楼层
回复【15楼】合肥-文盲:
---------------------------------
呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2014-5-31
在线时间
7 小时
发表于 2015-11-9 14:38:52 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥   你们的读点函数都是针对 液晶的数据脚是16个的吧   我的数据引脚只有8根啊  怎么读呢   写的时候写16位的数据都要写两次啊。。。。。。。。。。。
置之死地而后生,放手一搏............
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-11-9 22:44:30 | 显示全部楼层
回复【17楼】放手一搏:
---------------------------------
那就读2次啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2014-5-31
在线时间
7 小时
发表于 2015-11-10 11:30:49 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
这应该会严重影响速度吧
置之死地而后生,放手一搏............
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-11-11 23:27:44 | 显示全部楼层
回复【19楼】放手一搏:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2015-10-11
在线时间
45 小时
发表于 2016-3-7 19:48:22 | 显示全部楼层
放手一搏 发表于 2015-11-9 14:38
回复【2楼】正点原子:
---------------------------------
原子哥&nbsp;&nbsp;&nbsp;你们的读点函数都是针 ...

8引脚的LCD屏   写入后一直显示一半,,我写入俩次也是如此,,而且   多次复位会显示结果不同??
回复

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2016-6-21 11:53:53 | 显示全部楼层
合肥-文盲 发表于 2015-8-4 14:27
回复【3楼】八度空间:
---------------------------------
我算是发现了
1.对ILI9341来说,读GRAM,第一个 ...

读确实要在RRD低电平时读
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
发表于 2016-10-6 15:46:59 | 显示全部楼层
ynhdate 发表于 2014-9-27 22:39
回复【2楼】正点原子:
---------------------------------
在纠结两天的抓耳挠腮之后,终于搞清楚了,其实 ...

请问还在吗? 为什么还要在后面补几位,这是什么意思?
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
发表于 2016-10-6 15:47:33 | 显示全部楼层
八度空间 发表于 2014-9-28 08:07
原子哥说的对,资料上面是错的,我被坑了两天,真是坑爹

请问,在后面补几位是为什么?
回复

使用道具 举报

3

主题

34

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
223
金钱
223
注册时间
2014-3-13
在线时间
64 小时
发表于 2016-12-1 18:28:37 | 显示全部楼层
ynhdate 发表于 2014-9-27 22:39
回复【2楼】正点原子:
---------------------------------
在纠结两天的抓耳挠腮之后,终于搞清楚了,其实 ...

楼主,我也遇到了这个问题,写全FFFF的时候读出来的值为fcfc,可是我不明白你说的是什么意思,什么在红色和蓝色的后面多余3位补上100,而不是000,在绿色后面补上00?这怎么理解?可以再详细点吗?谢谢。
回复

使用道具 举报

12

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2017-6-10
在线时间
36 小时
发表于 2017-7-25 23:50:19 | 显示全部楼层
我读出的也是FC,困惑了好久没解决。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-23 12:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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