再次求助!!LCD显示问题

2019-07-16 04:43发布

前几天发过帖子求助,问题没有解决,经自己排查,锁定原因是在画点、擦点函数问题,但不懂其原理,还请各位大侠不吝赐教。
金鹏OCM12864-2,控制芯片KS0107
原帖地址:http://bbs.elecfans.com/jishu_272992_1_1.html
程序:
void DrawxPixel(uchar x,uchar y)  //擦除点
{
     if(x<=0)x=0;
     else if(x>127)x=127;
     if(y<=0)y=0;
     else if(y>63)y=63;
     if(x<64)
     {
           CSAPin=1;
           CSBPin=0;  
      }
      else if(x>=64)
      {
           CSAPin=0;
           CSBPin=1;  
           x=x-64;
      }
      Page(y/8);
      List(x);
      if(LastX==x)
      {
            if(LastPage==y/8)
            {
                   LastData&=~1<<(7-y%8);         //不懂这的逻辑关系是什么意思??
             }
            else
            {
                  LastPage=y/8;
                  LastData&=~1<<(7-y%8);
            }
     }
     else
     {
            LastData&=~1<<(7-y%8);
            LastX=x;
     }
     wr_lcd(LastData);
     delayNop(100);            //这是自己加的延迟,不知是否有必要,合适不合适?
     CSAPin=0;
     CSBPin=0;  
}
void DrawPixel(uchar x,uchar y)        //画点
{
      if(x<=0)x=0;
      else if(x>127)x=127;
      if(y<=0)y=0;
      else if(y>63)y=63;
      if(x<64)
      {
              CSAPin=1;
              CSBPin=0;  
      }
      else if(x>=64)
      {
             CSAPin=0;
             CSBPin=1;  
             x=x-64;
      }
      Page(y/8);
      List(x);
      if(LastX==x)
      {
              if(LastPage==y/8)
              {
                        LastData|=1<<(y%8);                 //不懂??
              }
              else
              {
                       LastPage=y/8;
                       LastData=1<<(y%8);
              }
       }
       else
      {
               LastData=1<<(y%8);
               LastX=x;
       }
       wr_lcd(LastData);
       delayNop(100);
       CSAPin=0;
       CSBPin=0;  
}
程序从网上看的,画点擦点会存在丢点或者擦不掉的问题,比如
DrawPixel(17,58);
DrawPixel(18,57);
DrawxPixel(17,58);
DrawxPixel(18,57);

液晶屏按理论分析应该没有显示,写完了又擦掉了,白屏的,但实际显示(17,64)和(18,64)两个点,且会把屏上其他的点擦掉,这是什么原因,程序编写问题还是怎样?请教如何修改?
之前一直以为是自己调用的问题,可单纯写点擦点也会出问题,请指教!~~多谢!
期待早日解决!!!纠结了若干天了,新人,请大家多多指教~~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
lstcspring
1楼-- · 2019-07-16 09:38
没看控制器的说明
       LastData|=1<<(y%8);       这句的意思是取出Y的低三位左移一位再与lastdata或运算
Lovedanpianji
2楼-- · 2019-07-16 14:23
这是12864吗?
胸无点墨
3楼-- · 2019-07-16 14:48
 精彩回答 2  元偷偷看……
shmilyly1985
4楼-- · 2019-07-16 18:59
lstcspring 发表于 2012-9-7 21:15
没看控制器的说明
       LastData|=1

多谢回答,周末有朋友结婚,出去了一趟,今天才看到,不好意思。

不知版主意思,LastData这句话这样描述对不对呢?从网上down的资料大多是ST7920相关系列的,有KS0107控制器的介绍的大都比较简单,还请版主不吝赐教!

再次感谢!!
shmilyly1985
5楼-- · 2019-07-16 19:07
Lovedanpianji 发表于 2012-9-7 22:04
这是12864吗?

嗯,是12864,多谢答复!~ 用的是金鹏OCM12864-2
15213374216
6楼-- · 2019-07-16 22:35
12864?

一周热门 更多>