OLED实验画点函数确定页数问题

2019-07-20 17:22发布

标准例程里面的画点函数如下:
void OLED_DrawPoint(u8 x,u8 y,u8 t)
{
        u8 pos,bx,temp=0;
        if(x>127||y>63)return;//超出范围了.
        pos=7-y/8;
        bx=y%8;
        temp=1<<(7-bx);
        if(t)OLED_GRAM[x][pos]|=temp;
        else OLED_GRAM[x][pos]&=~temp;            
}

STM32F4开发指南-库函数版本的解释为

OLED_GRAM[128][8]中的 128 代表列数( x 坐标),而 8 代表的是页, 每页又包含 8 行,
总共 64 行( y 坐标)。从高到低对应行数从小到大。比如,我们要在 x=100, y=29 这个点写入
1,则可以用这个句子实现:
OLED_GRAM[100][4]|=1<<2;
一个通用的在点( x, y)置 1 表达式为:
OLED_GRAM[x][7-y/8]|=1<<(7-y%8);
其中 x 的范围为: 0~127; y 的范围为: 0~63。


我的问题是:假如x=100,y=8,t=1,按照上述描述,则该点将被画到第6页上面去;但正确的是应该在第1页上面啊?
求解?






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
littlecrow
2019-07-21 01:47
OLED page0~page7是从上往下排列,每一page中数据DB7--DB0 的排列方向是从下向上排列的,最低位 D0 是在最上面,最高位 D7 是在最下面,也就是说OLED_GRAM中y的方向是从上往下的,与我们平时用的坐标系y的正方向相反,所以才有了pos=7-y/8; bx=y%8转换成OLED_GRAM的坐标,按你的假设y=8,如附件图片所示,将page7的D7作为y=0,往上y=8时,是不是pos对应page6,去看下LED相关的spec

一周热门 更多>