获取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 地址自增,方法同上),那么就按照上述规律去接收颜色数据。