本帖最后由 qqcaiyin 于 2014-2-7 18:34 编辑
问题已查到,P06,P07,电路上皆有个灯到电源
我写入0x80,或0x40,液晶上显示是对的,但是读回的值是0xc0.其他点的写入读取都是对的,就这高两位有问题,找不到原因了。
做了个测试 :
流程如下 //读取 地址 0x80 ,0x80 的值
LCD12864Write(command,0x36);
LCD12864Write(command,0x80);
LCD12864Write(command,0x80);
LCD12864Read();
t1=LCD12864Read();
t2=LCD12864Read();
LCD12864Write(command,0x30);
//串口发送
Send(t1);
Send(t2);
//点亮 第一行第列一
Draw_Dot(0,0,1);
//读取 地址 0x80 ,0x80 的值
LCD12864Write(command,0x36);
LCD12864Write(command,0x80);
LCD12864Write(command,0x80);
LCD12864Read();
t1=LCD12864Read();
t2=LCD12864Read();
LCD12864Write(command,0x30);
Send(t1);
Send(t2);
//灭 掉 第一行第列一
Draw_Dot(0,0,0);
//读取 地址 0x80 ,0x80 的值
LCD12864Write(command,0x36);
LCD12864Write(command,0x80);
LCD12864Write(command,0x80);
LCD12864Read();
t1=LCD12864Read();
t2=LCD12864Read();
LCD12864Write(command,0x30);
Send(t1);
Send(t2);
下面是 Draw_Dot();函数
/***************************************************
点操作
***************************************************/
void Draw_Dot(u8 x,u8 y,u8 color)
{
// u8 dat;
u8 x_byte,x_bit;
u8 y_byte,y_bit;
u8 th,tl;
u8 writedate;
LCD12864Write(command,0x36);
//换算坐标
x_byte=x/16;
x_bit=x&0x0f;
y_byte=y/32;
y_bit=y&0x1f;
//读取数值
LCD12864Write(command,0x80+y_bit);
LCD12864Write(command,0x80+x_byte+8*y_byte);
LCD12864Read();
th=LCD12864Read();
tl=LCD12864Read();
LCD12864Write(command,0x80+y_bit);
LCD12864Write(command,0x80+x_byte+8*y_byte);
if(x_bit<8)
{
if(color==1)
{
LCD12864Write(dat,th|(0x01<<(7-x_bit)));
}
else
{
LCD12864Write(dat,th&(~(0x01<<(7-x_bit))));
;
}
LCD12864Write(dat, tl);
}
else
{
LCD12864Write(dat,th);
if(color==1)
{
LCD12864Write(dat,tl|(0x01<<(15-x_bit)));
}
else
{
LCD12864Write(dat,tl&(~(0x01<<(15-x_bit))));
}
}
LCD12864Write(command,0x30) ;
}
代码流程,先读液晶屏值,然后点亮一个点,读液晶屏值,然后灭掉这个点,再读液晶屏值
做了几组实验 :
对点(0,0)操作时,液晶屏现象 :此点不亮 ,(1,0)亮 串口的值为:0x00,0x00 0xC0,0X00 0XC0,0X00
对点(1,0)操作时,液晶屏现象 :此点不亮 , (0,0)亮,串口的值为:0x00,0x00 0xC0,0X00 0XC0,0X00
对点(2,0)操作时,液晶屏现象 :此点灭 , 串口的值为:0x00,0x00 0x10,0X00 0X00,0X00
列0,1,8,9,16,17.。。。。一样的问题
找不到原因了 ,指点下
|