12864CGRAM,DDRAM,有什么区别二?

2019-07-16 01:33发布

看了好多例程,对于地址始终不理解,
void DisplayImage (unsigned char code *DData){ unsigned char x,y,i;
unsigned int tmp=0;
for(i=0;i<9;){  //分两屏,上半屏和下半屏,因为起始地址不同,需要分开
for(x=0;x<32;x++){    //32行
  WriteCommandLCD(0x34,1);
  WriteCommandLCD((0x80+x),1);//列地址
  WriteCommandLCD((0x80+i),1); //行地址,下半屏,即第三行地址0X88
  WriteCommandLCD(0x30,1);  
  for(y=0;y<16;y++)
   WriteDataLCD(DData[tmp+y]);//读取数据写入LCD
  tmp+=16;  
}
i+=8;
}
WriteCommandLCD(0x36,1); //扩充功能设定
WriteCommandLCD(0x30,1);
}
对于这个程序,为什么那么确定0x80+x为列地址,?当x=8时,那么地址不是为0x88了吗?0x88不就是第三行首地址吗?怎么回事?
还有为什么y要循环16次? for(y=0;y<16;y++) ???
CGRAM有什么用?看使用手册说当0x40时将CGRAM地址传给计数器AC,但是不显示啊,只有设0X80才好使,那么将CGRAM传递给AC还有什么用?
麻烦大神们耐心解答,谢谢;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
笑傲天下
1楼-- · 2019-07-16 06:35
 精彩回答 2  元偷偷看……
j478278600
2楼-- · 2019-07-16 10:32
楼主解释的不完全。首先0x34使用了扩充指令,然后0x80是在设定绘图RAM地址,在说明书里有,1000XXXX后四位写列起始地址,前四位固定,所以转换成16进制就是0X80开始累加。接下来设定横坐标为1XXXXXXX,后七位为横坐标的起始位所以为0X80开始,由于每写输入2个16进制数据,内部横坐标自动加一,所以就不用像列那样设置累加循环了。
j478278600
3楼-- · 2019-07-16 12:50
我也是不懂,看了楼主的的解释,感觉还是迷惑,再自己研究了半天,才顿悟的。
笑傲天下
4楼-- · 2019-07-16 16:40
j478278600 发表于 2013-7-5 12:54
楼主解释的不完全。首先0x34使用了扩充指令,然后0x80是在设定绘图RAM地址,在说明书里有,1000XXXX后四位 ...

您所说的 1000****和1********我在说明书里面没有看见啊,我完全是看代码,还有一张坐标图然后自己推断的,其实这么说我只是看表象推论而已,具体内部情况是否这样也无从验证,请指导
j478278600
5楼-- · 2019-07-16 17:22
捕获.JPG
在扩充指令的设定绘图RAM地址中,你的说明书里应该有,只是说的不详细
j478278600
6楼-- · 2019-07-16 21:03
 精彩回答 2  元偷偷看……

一周热门 更多>