llg1234 发表于 2010-7-24 19:53:32

avr控制 12864

看图中的12864 串口 时序图 下面是我写的avr时序程序
CS=1;
write(5,0xff);
   write(1,0x00);
   if(a==0)
write(1,0x00);
else
write(1,0x80);
write(1,0x00);
   write(4,cmda);
write(4,0x00);
   cmda<<=4;
write(4,cmda);
write(4,0x00);
   CS=0;
void write(unsigned char n,unsigned char data)
{for(;n>0;n--)
{
   
      SCLK=0;
      SCLK=1;
      SID=(data&0x80);
      data<<=1;
}
但是液晶屏却无法显示第一个和最后一个数据,这是为什么呢?
http://cache.amobbs.com/bbs_upload782111/files_31/ourdev_570484.PNG
(原文件名:12864.PNG)

ShenFei 发表于 2010-7-24 20:14:25

可能数据应该在 SCLK 上升沿写进去的, 把 write 函数改成下面试试:

void write(unsigned char n,unsigned char data)
{
    for(;n>0;n--)
    {
      SID=(data&0x80);
      SCLK=1;
      data<<=1;
      SCLK=0;
    }
}
这样整个时序写完后 SCLK 自然保持低电平,和时序图一致.而且无论是上升沿写入还是下降沿写入,这段程序都能正常工作,

而你原来的程序运行后SCLK停留在高电平,好像会导致数据整体错一位吧?
页: [1]
查看完整版本: avr控制 12864