关于原子的源码OLED ,有几句不太懂,大神给解释一下。。。。。。

2019-07-21 07:11发布


关于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;

然后字符可以正常的显示出来,但是在屏幕上显示一堆字符的时候,有时候会出现乱码

大神给讲讲原子的这段代码把。。。。。。。。。





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
力志强
2019-07-21 12:44
回复【2楼】229382777@qq.com:
---------------------------------
我把屏幕的左上角定为原点,整个屏幕的分布如下  ,以下是我的理解。
                       
                         原点 。--------------------------------------------------  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");  

               这是啥问题了,。。。>

一周热门 更多>