前几天发过帖子求助,问题没有解决,经自己排查,锁定原因是在画点、擦点函数问题,但不懂其原理,还请各位大侠不吝赐教。
金鹏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)两个点,且会把屏上其他的点擦掉,这是什么原因,程序编写问题还是怎样?请教如何修改?
之前一直以为是自己调用的问题,可单纯写点擦点也会出问题,请指教!~~多谢!
期待早日解决!!!纠结了若干天了,新人,请大家多多指教~~
多谢回答,周末有朋友结婚,出去了一趟,今天才看到,不好意思。
不知版主意思,LastData这句话这样描述对不对呢?从网上down的资料大多是ST7920相关系列的,有KS0107控制器的介绍的大都比较简单,还请版主不吝赐教!
再次感谢!!
一周热门 更多>