STM32_TFTLCD-获取指定点的颜色

获取TFTLCD-RGB565指定的颜色

u16 LCD_ReadPoint(u16 Xpos,u16 Ypos)//获取 指定点的颜色
{
    
    
	vu16 r,g,b,tmp;
	LCD_setCursor(Xpos,Ypos);
	LCD_WR_REG(0x2E00);
	LCD_RD_DATA();//dummy-无效
	tmp = LCD_RD_DATA();
	r= tmp>>11;
	g= (tmp>>2)&0x3F;
	tmp = LCD_RD_DATA();
	b = tmp>>11;
	return ((r<<11)|(g<<5)|b);
	
}

首先读GRAM读指令-写颜色

	LCD_WR_REG(0x2E00);

接着读取一个无效的数据

	LCD_RD_DATA();

然后通过位运算获取RGB565的颜色

	tmp = LCD_RD_DATA();//读取参数
	r= tmp>>11;//将数据向右移11位,以获取最高位D15~D11;读取5位
	g= (tmp>>2)&0x3F;//将数据向右移2位,以获取D7~D2;读取6位
	tmp = LCD_RD_DATA();//读取下一个参数
	b = tmp>>11;//将数据向右移11位,以获取最高位D15~D11;读取5位
	//以上就是获取rgb各值的代码

最后将rgb通过与运算结合

	return ((r<<11)|(g<<5)|b);

在这里插入图片描述

该指令用于读取 GRAM,如上表所示, NT35510 在收到该指令后,第一次输出的是dummy 数据,也就是无效的数据,第二次开始,读取到的才是有效的 GRAM 数据(从坐标:SC, SP 开始),输出规律为:每个颜色分量占 8 个位,一次输出 2 个颜色分量。比如:第一次输出是 R1G1,随后的规律为:B1R2 G2B2 R3G3 B3R4 G4B4 R5G5… 以此类推。
如果我们只需要读取一个点的颜色值,那么只需要接收到参数 3 即可,如果要连续读取(利用 GRAM 地址自增,方法同上),那么就按照上述规律去接收颜色数据。

猜你喜欢

转载自blog.csdn.net/weixin_53391957/article/details/121329636