|
本帖最后由 慕名而来 于 2021-2-18 09:20 编辑
年假期间继续弄玩了很久的彩屏,这个彩屏的故事曾经在此发帖说过:煮熟的鸭子就这样飞走了,单片机板子也白焊了https://www.mydigit.cn/forum.php?mod=viewthread&tid=201706(出处: 数码之家) ;;;再买鸭子重新煮,继续玩TFT彩屏https://www.mydigit.cn/forum.php?mod=viewthread&tid=208210(出处: 数码之家)
这个屏配合自己打样的板子已经玩过了时间模块、温湿度模块、W25Q**字库、通过简单的FAT系统读取TF卡显示图片,这几天一直弄读取屏幕色素点,原本以为挺简单的结果弄了一周竟然没有弄通,俗话说:有事不决问百度,百度无解问坛友;希望高手先知们不吝赐教,先谢了!
系统环境:
STC8A8K64S4A12+ILI9806_4.5"_854*480彩屏
接线方式=P0;P2两个8位端口构成16bit驱动模式。注:除了初始化代码稍有不同外、ILI9341的基础代码可兼容驱动此屏幕,已经调试完成了刷屏、各种字符、文字、图片的显示。
现在的测试方法为:
1.定位写入一个像素点。
2.定位读取这个像素点。
问题为:无法正确读出像素值!不知道问题出在哪里以及接下来的工作方向。
实验方法:
调用读屏函数之前已经在坐标100,100之处画了一个值为0x1234的像素点。
而后调用如下函数读取LCD_Read(100,100)之处的像素值,读取函数如下,实验结果在最下侧。
u16 LCD_Read(u16 x,u16 y)
{
u16 r,g,b;
LCD_SetCursor(x,y);
LCD_WR_REG(0X2E);
RS=1;
CS=0;
RD=0;
delay_us(20); //延时
//空操作、假读一次
RD=1;
RD=0;
delay_us(20); //延时
//以下分两次读取数据
r=DH; //读取高8位
r=r<<8;//移入高8位
r|=DL;//读取低8位并合成16bit数据
RD=1;
RD=0;
delay_us(20);//延时
b=DH;
b=b<<8;
b|=DL;
RD=1;
g=r&0XFF;//第一次读取的是 RG 的值,R 在前,G 在后,各占 8 位
g<<=8;
CS=1;
return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));//公式转换
}
实验结果:
返回值不是0x1234;
当前返回值为0x0120;其他变量值r=0x0024;g=0x2400;b=0x0034;补充资料:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|