新手入门
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2014-9-26
- 在线时间
- 0 小时
|
5金钱
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 if(lcddev.id==0X5510)LCD_WR_REG(0X2E00); //5510 发送读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||lcddev.id==0X5510) //9341/NT35310/NT35510要分2次读出
{
opt_delay(2);
b=LCD->LCD_RAM;
g=r&0XFF; //对于9341/5310/5510,第一次读取的是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)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
}
求助各位大神,本人菜鸟,这段代码是LCD显示实验那一节lcd.c文件中的一段代码,主要作用是读取某个点的颜色值,标红的那句我不明白为什么要判断LCD驱动芯片的ID?还有后面那个发送读指令里面参数为什么是0X2E?同样if(lcddev.id==0X5510)LCD_WR_REG(0X2E00);这个参数为什么是0X2E00? ps:原子哥后面的视频讲解代码都没怎么讲,不是说讲的不好,实在是好多代码看不懂啊,求助有什么方法么?谢谢各位了!!! |
最佳答案
查看完整内容[请看2#楼]
1,因为不同的LCD,读取GRAM的指令和方式不完全一样,所以要分别判断。
2,0X2E,0X2E00,是数据手册规定的,具体的,请看对应驱动器的数据手册。
|