yuesheng1991 发表于 2014-3-31 14:38:32

12864显示图片,中间正常,上下有噪点


如图
恳请有遇到过这问题的朋友,帮忙解决。

yuesheng1991 发表于 2014-3-31 14:40:10

/*~~~~~~~~~~~~~~~~~~~~
绘图函数
~~~~~~~~~~~~~~~~~~~~*/
void DrawImg(const uchar *pImg)
{
        uchar i,j;
        ClearScreen();
        WriteLCD(COMM,0x34);//扩充指令,G=OFF
        Delayms(10);
        for(i=0;i<32;i++)//画上半屏
        {        
                WriteLCD(COMM,0x80+i);//垂直坐标
                WriteLCD(COMM,0x80);//水平坐标       
                for(j=0;j<16;j++)
                {       
                        //Delayus(5);
                        WriteLCD(DATA,*pImg);
                        pImg++;
                }
        }
        for(i=0;i<32;i++)//画下半屏
        {
                WriteLCD(COMM,0x80+i);//垂直坐标
                WriteLCD(COMM,0x88);//水平坐标
                for(j=0;j<16;j++)
                {
                        //Delayus(5);
                        WriteLCD(DATA,*pImg);
                        pImg++;
                }
        }
        WriteLCD(COMM,0x36);//G=ON
        WriteLCD(COMM,0X30);
}

yuesheng1991 发表于 2014-3-31 14:41:19

2L 是我的绘图函数
在51单片机中使用时显示正常,我移植到AVR 则显示有问题{:cry:}

hyghyg1234 发表于 2014-3-31 14:55:49

yuesheng1991 发表于 2014-3-31 14:41
2L 是我的绘图函数
在51单片机中使用时显示正常,我移植到AVR 则显示有问题 ...

AVR移植做忙检查了吗。

yuesheng1991 发表于 2014-3-31 14:56:33

hyghyg1234 发表于 2014-3-31 14:55
AVR移植做忙检查了吗。

首先感谢你的回复。
忙检查有了。。

yuesheng1991 发表于 2014-3-31 14:59:05

显示字符 都是正常的

无级电工 发表于 2014-3-31 15:27:27

AVR中 RS RW E CS 等 跳变间隔延时变短了。

祥子 发表于 2014-3-31 15:34:08

楼主试下,全屏点亮,是否可行~~

weichao4808335 发表于 2014-3-31 15:35:46

写数据时没有加延时吧,单片机管脚反转的速度大于lcd的速度了

yuesheng1991 发表于 2014-3-31 15:48:29

无级电工 发表于 2014-3-31 15:27
AVR中 RS RW E CS 等 跳变间隔延时变短了。

谢谢回复,应该不是延时的问题。延时时间跟51是一样的。

yuesheng1991 发表于 2014-3-31 15:48:48

祥子 发表于 2014-3-31 15:34
楼主试下,全屏点亮,是否可行~~

全屏点亮可以的

yuesheng1991 发表于 2014-3-31 15:50:22

本帖最后由 yuesheng1991 于 2014-3-31 15:51 编辑

weichao4808335 发表于 2014-3-31 15:35
写数据时没有加延时吧,单片机管脚反转的速度大于lcd的速度了

加了延时还是一样啊
况且中间部分显示是正常的
{:dizzy:} 弄了一下午,还没弄好 郁闷

woshigeshuai 发表于 2014-3-31 15:57:31

热传印的?效果不错,可否分享下经验

祥子 发表于 2014-3-31 16:10:02

yuesheng1991 发表于 2014-3-31 15:48
全屏点亮可以的

数组里的数换成全0xFF(假设1点亮), 可以全部点亮;

——多测试几次,如果都是OK的话, 那就说明是你 图片取模时出错了

yuesheng1991 发表于 2014-3-31 16:38:00

祥子 发表于 2014-3-31 16:10
数组里的数换成全0xFF(假设1点亮), 可以全部点亮;

——多测试几次,如果都是OK的话, 那就说明是你...


换成0xff之后是这样的效果,这块液晶是好的。

yuesheng1991 发表于 2014-3-31 16:38:37

woshigeshuai 发表于 2014-3-31 15:57
热传印的?效果不错,可否分享下经验

不是,雕刻机雕刻的

浮华一生 发表于 2014-3-31 16:42:39

感觉就像是延时的问题,AVR的晶振和51的一样? 你的延时是让CPU原地打转么?

xiaorenren 发表于 2014-3-31 16:47:38

WriteLCD(DATA,*pImg);
这个指针问题机会大点
本人也试过画图出现问题
后面不知道该那里好了
好像就是这个指针的
楼主你自己改下看看

祥子 发表于 2014-3-31 17:02:22

能设置断点的话就方便多了~~


下一步,建议从两个方面排除:
(1) 操作的延时

(2)数组的指针出发,不断加加,会不会就跑到其他地方去了~~

——可增加测试下,WriteLCD(DATA,*pImg); 直接写OxFF,看下是否正常

祥子 发表于 2014-3-31 17:05:49

如果直接写数据正常的话, 建议多测试几次(一直写如0x00,FF,55,AA,等比较容易看结果的数);
——那么说明操作延时是没有问题的;

操作没问题的话,可能写入的数据有问题啦~
可能的话,每次写数据前,把数组的内容通过串口发送回来~

换单片机啦~~ 可以在线调试的,省时省力

mcu_lover 发表于 2014-3-31 17:48:51

两个方向:
第一,单片机上电初始化GDRAM, 用0x00清除。
如果上面动作无效果,检查忙等待是否使用了读FLAG标志,如有有读,检查输出,输出切换部分有没有问题,
如果没有问题,增加EN控制线之间的延时到us级。

yuesheng1991 发表于 2014-3-31 18:07:38

mcu_lover 发表于 2014-3-31 17:48
两个方向:
第一,单片机上电初始化GDRAM, 用0x00清除。
如果上面动作无效果,检查忙等待是否使用了读FLAG ...

多谢红金龙大哥回复。
初始化GDRAM,我试过了,没有效果。 忙等待也有。 EN控制线的延时我也加了。
当我把绘图函数中,写入字模函数改为写入固定的值时却能够显示正常。
显示效果如下:


yuesheng1991 发表于 2014-3-31 18:16:33

mcu_lover 发表于 2014-3-31 17:48
两个方向:
第一,单片机上电初始化GDRAM, 用0x00清除。
如果上面动作无效果,检查忙等待是否使用了读FLAG ...

将字模数组内容全部设为0x01 ,用指针取字模写入时,显示又有问题。
不知问题到底在哪里


yuesheng1991 发表于 2014-3-31 18:24:57

祥子 发表于 2014-3-31 17:05
如果直接写数据正常的话, 建议多测试几次(一直写如0x00,FF,55,AA,等比较容易看结果的数);
——那么 ...

看看上两楼 问题还没解决。{:sad:}

yuesheng1991 发表于 2014-3-31 18:27:00

xiaorenren 发表于 2014-3-31 16:47
WriteLCD(DATA,*pImg);
这个指针问题机会大点
本人也试过画图出现问题


我也觉得指针问题 可看来看去都发现不了问题在哪里

lusson 发表于 2014-3-31 19:11:20

楼主,你能把你的uchar t改成const uchar t试下吗

yuesheng1991 发表于 2014-3-31 19:34:30

lusson 发表于 2014-3-31 19:11
楼主,你能把你的uchar t改成const uchar t试下吗

我原来就是const uchar t的 以为是这个的问题所以改成了uchar t;

xiaorenren 发表于 2014-4-1 11:14:19

楼主你搞好了吗?
你看下我这个不要把指针累加
直接加j
希望可以
for(i=0;i<8;i++)
{
    led_CS_clr();
    transfer_command(0xb0+i);
    transfer_command(0x10);
    transfer_command(0x00);

for(j=0;j<128;j++)
    {
      //k=*(dp+j);
      transfer_data(*(dp+j));
      //k++;
      //transfer_data(0x33);
    }
}

lixun00 发表于 2014-4-1 11:27:30

个人觉得若全屏清1和清0有问题,那肯定是时序或者硬件有问题

yuesheng1991 发表于 2014-4-1 15:54:15

xiaorenren 发表于 2014-4-1 11:14
楼主你搞好了吗?
你看下我这个不要把指针累加
直接加j


搞好了,谢谢
是编译器问题

yuesheng1991 发表于 2014-4-1 19:44:23

编译器没有设置对造成的 浪费了一个下午的时间
页: [1]
查看完整版本: 12864显示图片,中间正常,上下有噪点