lcd12864(st9720)绘图模式写入和读取不一样

[复制链接]
 楼主| qqcaiyin 发表于 2014-2-6 20:21 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 qqcaiyin 于 2014-2-7 18:34 编辑

问题已查到,P06,P07,电路上皆有个灯到电源

我写入0x80,或0x40,液晶上显示是对的,但是读回的值是0xc0.其他点的写入读取都是对的,就这高两位有问题,找不到原因了。


做了个测试 :

流程如下
  1. //读取  地址  0x80   ,0x80     的值      
  2.     LCD12864Write(command,0x36);
  3.         LCD12864Write(command,0x80);
  4.         LCD12864Write(command,0x80);
  5.         LCD12864Read();
  6.         t1=LCD12864Read();        
  7.         t2=LCD12864Read();
  8.         LCD12864Write(command,0x30);
  9. //串口发送   
  10.         Send(t1);
  11.          Send(t2);  
  12. //点亮   第一行第列一
  13.         Draw_Dot(0,0,1);

  14. //读取  地址  0x80   ,0x80     的值      
  15.         LCD12864Write(command,0x36);
  16.         LCD12864Write(command,0x80);
  17.         LCD12864Write(command,0x80);
  18.         LCD12864Read();                    
  19.         t1=LCD12864Read();        
  20.         t2=LCD12864Read();
  21.         LCD12864Write(command,0x30);
  22.         Send(t1);
  23.          Send(t2);
  24. //灭 掉     第一行第列一

  25.         Draw_Dot(0,0,0);
  26. //读取  地址  0x80   ,0x80     的值      
  27.            LCD12864Write(command,0x36);
  28.         LCD12864Write(command,0x80);
  29.         LCD12864Write(command,0x80);
  30.         LCD12864Read();
  31.         t1=LCD12864Read();        
  32.         t2=LCD12864Read();
  33.         LCD12864Write(command,0x30);
  34.         Send(t1);
  35.          Send(t2);
下面是 Draw_Dot();函数  
  1. /***************************************************
  2. 点操作     
  3. ***************************************************/
  4. void   Draw_Dot(u8 x,u8 y,u8  color)
  5. {
  6. //        u8 dat;
  7.         u8 x_byte,x_bit;
  8.         u8 y_byte,y_bit;
  9.         u8 th,tl;
  10.         u8 writedate;
  11.          LCD12864Write(command,0x36);
  12. //换算坐标     
  13.         x_byte=x/16;
  14.         x_bit=x&0x0f;
  15.         y_byte=y/32;
  16.         y_bit=y&0x1f;
  17. //读取数值  
  18.         LCD12864Write(command,0x80+y_bit);
  19.         LCD12864Write(command,0x80+x_byte+8*y_byte);
  20.         LCD12864Read();
  21.         th=LCD12864Read();        
  22.         tl=LCD12864Read();

  23.         LCD12864Write(command,0x80+y_bit);
  24.         LCD12864Write(command,0x80+x_byte+8*y_byte);

  25.         if(x_bit<8)
  26.         {
  27.                 if(color==1)
  28.                 {
  29.                         LCD12864Write(dat,th|(0x01<<(7-x_bit)));        

  30.                 }
  31.                 else
  32.                 {
  33.                         LCD12864Write(dat,th&(~(0x01<<(7-x_bit))));                        
  34.                 ;        
  35.                 }
  36.                 LCD12864Write(dat, tl);

  37.         }
  38.         else
  39.         {
  40.                 LCD12864Write(dat,th);
  41.                 if(color==1)
  42.                 {
  43.                         LCD12864Write(dat,tl|(0x01<<(15-x_bit)));               
  44.                 }
  45.                 else
  46.                 {
  47.                         LCD12864Write(dat,tl&(~(0x01<<(15-x_bit))));        
  48.                 }        
  49.         }
  50.         LCD12864Write(command,0x30)        ;
  51. }
代码流程,先读液晶屏值,然后点亮一个点,读液晶屏值,然后灭掉这个点,再读液晶屏值
做了几组实验  :
对点(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.。。。。一样的问题
找不到原因了 ,指点下







xyz549040622 发表于 2014-2-6 20:29 | 显示全部楼层
你这写的是第几行第几列的点呢
1061zou 发表于 2014-2-6 21:24 | 显示全部楼层
程序放上来
 楼主| qqcaiyin 发表于 2014-2-6 22:00 来自手机 | 显示全部楼层
xyz549040622 发表于 2014-2-6 20:29
你这写的是第几行第几列的点呢

行随便,有问题的列0,1 ,8,9,16  ,17类推
xyz549040622 发表于 2014-2-6 22:13 | 显示全部楼层
1.要不烧别人成熟的驱动试试?
2.是否可以排除液晶的问题?
 楼主| qqcaiyin 发表于 2014-2-7 07:43 来自手机 | 显示全部楼层
1061zou 发表于 2014-2-6 21:24
程序放上来

手机上的,回去用电脑再上代码
 楼主| qqcaiyin 发表于 2014-2-7 07:48 来自手机 | 显示全部楼层
xyz549040622 发表于 2014-2-6 22:13
1.要不烧别人成熟的驱动试试?
2.是否可以排除液晶的问题?

用的就是网上普遍的程序,就一块液晶,关键是只是每个字节高两位列有问题,太有规律性了
zhimagod 发表于 2014-2-7 08:26 | 显示全部楼层
实物还是仿真?仿真的话还需要排除仿真软件的问题
 楼主| qqcaiyin 发表于 2014-2-7 17:30 | 显示全部楼层
zhimagod 发表于 2014-2-7 08:26
实物还是仿真?仿真的话还需要排除仿真软件的问题

实物
ZG11211 发表于 2014-2-7 18:13 | 显示全部楼层
程序问题,写完地址后是否释放了地址线。
 楼主| qqcaiyin 发表于 2014-2-7 18:16 | 显示全部楼层
1061zou 发表于 2014-2-6 21:24
程序放上来

代码放上来了在顶楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

148

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

15

主题

148

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部