关于对OLED例程中OLED_DrawPoint画点函数的修改

2019-07-20 01:48发布

本帖最后由 学习stm32f4 于 2016-9-27 20:08 编辑

在原子哥探索板的OLED例程中,许多初学者对画点函数不太理解。
事实上,初学者尽管阅读了SSD1306的芯片手册和M00750用户手册,但是由于SSD1306中的re-mapping指令,给不少初学者带来了困惑,re-mapping是造成初学者困惑的原因所在。
在原例程中,正对OLED显示屏时,PAGE0位于屏幕的最底部,而PAGE7位于屏幕的最高部,这可以通过下面的代码试验:[mw_shl_code=c,true]
int main(void)
{
        delay_init(168);   
        uart_init(115200);        
        LED_Init();                                
        OLED_Init();                        
        OLED_ShowString(0,0,"TEST",16);  
        OLED_Refresh_Gram();
        OLED_WR_Byte(0x26,OLED_CMD);//向右平移
        OLED_WR_Byte(0x00,OLED_CMD);
        OLED_WR_Byte(0x07,OLED_CMD);//起始页,这里为第7页
        OLED_WR_Byte(0x00,OLED_CMD);//平移速率设置
        OLED_WR_Byte(0x07,OLED_CMD);//结束页,这里也为第7页
        OLED_WR_Byte(0x00,OLED_CMD);//起始列
        OLED_WR_Byte(0x7f,OLED_CMD);//结束列
        OLED_WR_Byte(0x2f,OLED_CMD);//启动平移
}
[/mw_shl_code]

经过试验,可以将画点函数改成比较容易理解的方式,在用户正对着OLED模块的显示屏幕时,这种显示方式与SSD1306中显存存放格式(no-mapping)相一致,如图1所示。并且OLED_GRAM[][]写到OLED显存里时,也与OLED显存里低位在上,高位在下的图示说明一致,如图2所示。
注意:需要修改OLED初始化函数中的一个配置指令,如图3所示。补充:OLED屏的坐标方向如图4所示。
[mw_shl_code=c,true]
void OLED_DrawPoint(u8 x,u8 y,u8 t)
{
        u8 pos,bx,temp=0;
        if(x>127||y>63)return;
        pos=y/8;
        bx=y%8;
        temp=1<<bx;
        if(t)OLED_GRAM[x][pos]|=temp;
        else OLED_GRAM[x][pos]&=~temp;            
}
[/mw_shl_code]

补充2:为例使初学者易于理解OLED的显示过程,我将原子哥的代码稍作了修改,如图5、图6、图7、图8所示,这使得OLED_GRAM不再反着定义大小,而保持与显存的存放格式一致,还望原子哥见谅,

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
LHYLHY
1楼-- · 2019-07-20 07:09
谢谢,解决了我的困惑,原来的128行,8列,还有page的颠倒,逻辑上很绕
924583269
2楼-- · 2019-07-20 07:18
 精彩回答 2  元偷偷看……
924583269
3楼-- · 2019-07-20 11:38
 精彩回答 2  元偷偷看……
学习stm32f4
4楼-- · 2019-07-20 17:14
924583269 发表于 2017-10-12 10:09
请问下OLED_WR_BYTE(0xC8,OLED_CMD)中,原来是C0,为从com0扫描到com(N-1)。现在是C8,从com(N-1)扫描 ...

这个。。。我当时是来回试的,对从哪扫描也没搞清楚。原子哥的例程比较庞大,不是几个小时就学懂的,需要将庞大的程序拆分成一个一个的小块,再分别独立进行debug看看运行效果
学习stm32f4
5楼-- · 2019-07-20 22:51
 精彩回答 2  元偷偷看……
曾新明
6楼-- · 2019-07-21 04:08
多谢楼主分享,解决了我的困惑。

一周热门 更多>