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条回答
天空淡云
1楼-- · 2019-07-21 04:21
你插上OLED屏的时候实际上是把OLED屏上下颠倒了,刚好Page0是在最底下,从上依次增加的,有因为列地址是remap,所以列地址并没有变
天空淡云
2楼-- · 2019-07-21 15:20
你得先设置好你的起始页地址和列地址,然后再设置扫描方向,这两个都会决定你的画点轨迹
正点原子
3楼-- · 2019-07-20 22:21
请自行验证+仿真找答案。  这种纯软件问题,不要再一问再问了。自己动手有多难?
littlecrow
4楼-- · 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
kds955796
5楼-- · 2019-07-21 10:06
 精彩回答 2  元偷偷看……
天空淡云
6楼-- · 2019-07-21 10:59
 精彩回答 2  元偷偷看……

一周热门 更多>