再次求助!!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条回答
草根白骨精
1楼-- · 2019-07-16 23:28
程序不及细看,但有一点,你的操作是否有问题,单纯的擦除某一点是不可行的,12864均采用的是行每8点一个字节,如果你知道原来显示的是某一点那就去擦除那个字节,否则你就只能清除刷新某一行的全部数据
shmilyly1985
2楼-- · 2019-07-16 23:38
 精彩回答 2  元偷偷看……

一周热门 更多>