关于OLED的画点函数;
1 void OLED_DrawPoint(u8 x,u8 y,u8 t)
2 {
3 u8 pos,bx,temp=0;
4 if(x>127||y>63)return;//????·??§??.
5 pos=7-y/8;
6 bx=y%8;
7 temp=1<<(7-bx);
8 if(t)OLED_GRAM[x][pos]|=temp;
9 else OLED_GRAM[x][pos]&=~temp;
}
我的控制器是1305,驱动是自己写的没有问题,应用程序按照原子的思想写,用
原子的源码,但是字符显示出来是镜像的,这个画点函数有点不太明白:
假如我在 (100,3)这点 点亮,本应该操作的数据元素是OLED_GRAM[100][0]
按照源码,操作的缓存数组元素是 OLED_[100][7]
我把源码的第5行 和 第 7行 做如下的修改,
5 pos=y/8;
7 temp=1<<bx;
然后字符可以正常的显示出来,但是在屏幕上显示一堆字符的时候,有时候会出现乱码
大神给讲讲原子的这段代码把。。。。。。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
我把屏幕的左上角定为原点,整个屏幕的分布如下 ,以下是我的理解。
原点 。-------------------------------------------------- x轴( 0 ,127)
(0 page) |
(1 page)|
|
|
|
|
|
(7 page)|
y轴( 0,63)
我们定义的 OLED_GRAM[128][7]缓冲,根据原子的OLED_Refresh_Gram函数,我得出,数据元素 OLED_GRAM[0][0]将会写到
第0页的第0列,并且数据的高位写到了 y坐标的高位(0,7)点,比如OLED_GRAM[0][0] = 0x80 ; 那么坐标(0,7)会被点亮,
这也是我看了数据手册以后得到的;
假如我要点亮(0,3)按照原子的代码,将会点亮第7页的(0,61)点,
我这样理解对吗?
ssd1305 和ssd306 我看了数据手册,好像区别不是太大,我按照我的理解,修改了这两句 pos=y/8;
temp=1<<bx;
其他代码都按原子的,点亮任意屏幕上一点,都没有问题,而且坐标也对的
现在的问题是:
显示1608的字符,假如我案如下坐标显示没有问题,显示正常
OLED_ShowString(0,16,"ATOM@ALIENTEK");
OLED_ShowString(0,32,"ATOM@ALIENTEK");
但是当Y坐标是按照整页 ,就会有字符显示不正常 比如
OLED_ShowString(0,17,"ATOM@ALIENTEK");
OLED_ShowString(0,37,"ATOM@ALIENTEK");
这是啥问题了,。。。>
一周热门 更多>