先说问题再贴代码,写颜 {MOD}都是正确的,在读点的时候只能读出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;
}
因为出错,所以读颜 {MOD}的时候就连读两个16位数据组成32位的,然后串口输出出来看,
printf ("FFFF write %x
",Lcd_re_colour(1,1));
这是读取函数其他颜 {MOD}都一样的
再贴串口数据结果
00 1f blue fc 00
ff e0 yellow fc fc 00 fc
ff ff write fc fc fc fc
0000 black 0
前面是写进去的颜 {MOD},后面是读出来的颜 {MOD}
真心百爪挠心,烦躁的不行,不然不会麻烦大家的,辛苦了,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
我就把BGR位设置为0了,以后遇到问题再说,测试了为0没影响,现在在看那个画直线和画圆的Bresenham算法推导
---------------------------------
发现问题了 ,BGR位必须设为1 才能按照RGB顺序处理颜 {MOD}
---------------------------------
原子哥 你们的读点函数都是针对 液晶的数据脚是16个的吧 我的数据引脚只有8根啊 怎么读呢 写的时候写16位的数据都要写两次啊。。。。。。。。。。。
---------------------------------
那就读2次啊。
---------------------------------
这应该会严重影响速度吧
一周热门 更多>