OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 21759|回复: 12

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

[复制链接]

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
发表于 2016-9-26 10:28:15 | 显示全部楼层 |阅读模式
本帖最后由 学习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不再反着定义大小,而保持与显存的存放格式一致,还望原子哥见谅,

1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg

oled.rar

3.27 KB, 下载次数: 1158

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
407
金钱
407
注册时间
2016-5-26
在线时间
108 小时
发表于 2019-9-24 15:44:34 | 显示全部楼层
我是烦死了,我想在其它单片机上运行这个程序。原来认为这个屏幕没什么难度。这个屏幕的程序 我看了整整两天了。”视频是说我相信 学到这里的同学一定会看得懂的“妈的,然后就讲后面去了。 画点程序 套着 画字符串的程序,各种套。
回复 支持 2 反对 0

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2017-5-25
在线时间
3 小时
发表于 2017-5-25 01:14:36 来自手机 | 显示全部楼层
谢谢,解决了我的困惑,原来的128行,8列,还有page的颠倒,逻辑上很绕
回复 支持 反对

使用道具 举报

6

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2017-9-20
在线时间
27 小时
发表于 2017-10-12 10:09:56 | 显示全部楼层
请问下OLED_WR_BYTE(0xC8,OLED_CMD)中,原来是C0,为从com0扫描到com(N-1)。现在是C8,从com(N-1)扫描到com0。这两种扫描方式对点阵有什么影响呢?
比如第一页写数据0x01,从0到N-1的扫描是第一页第一个点亮,从N-1到0的扫描是第七页第八个点亮么(从下向上数)?
回复 支持 反对

使用道具 举报

6

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2017-9-20
在线时间
27 小时
发表于 2017-10-15 17:11:36 | 显示全部楼层
楼主,这样是好理解了,那后面的取模值全部都要改了么?
回复 支持 反对

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2017-10-24 11:13:13 | 显示全部楼层
924583269 发表于 2017-10-12 10:09
请问下OLED_WR_BYTE(0xC8,OLED_CMD)中,原来是C0,为从com0扫描到com(N-1)。现在是C8,从com(N-1)扫描 ...

这个。。。我当时是来回试的,对从哪扫描也没搞清楚。原子哥的例程比较庞大,不是几个小时就学懂的,需要将庞大的程序拆分成一个一个的小块,再分别独立进行debug看看运行效果
回复 支持 反对

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2017-10-24 11:14:17 | 显示全部楼层
924583269 发表于 2017-10-15 17:11
楼主,这样是好理解了,那后面的取模值全部都要改了么?

只改圈中的就行了,来回试试
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-2-28
在线时间
9 小时
发表于 2019-3-16 11:09:08 | 显示全部楼层
多谢楼主分享,解决了我的困惑。
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-4-29
在线时间
4 小时
发表于 2019-5-19 13:57:10 | 显示全部楼层
明白了
333.png
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2020-1-29
在线时间
12 小时
发表于 2020-2-17 13:43:28 | 显示全部楼层
老哥  你的图四是更改之后的坐标系么   还是还之前 原子哥的例程里面的坐标系?
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2020-1-29
在线时间
12 小时
发表于 2020-2-17 13:45:39 | 显示全部楼层

老哥  请问你画的这个坐标系是原子哥原来例程的么?
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2020-1-29
在线时间
12 小时
发表于 2020-2-17 13:53:45 | 显示全部楼层
请问原子哥例程中哪句话是开启了re-mapping呢?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2022-11-28
在线时间
1 小时
发表于 2022-11-28 14:26:10 | 显示全部楼层
dianzixiaobai 发表于 2019-9-24 15:44
我是烦死了,我想在其它单片机上运行这个程序。原来认为这个屏幕没什么难度。这个屏幕的程序 我看了整整两 ...

就是真是特码气人,我也困惑好久,明明几句话就能点拨一下,害我浪费那么多时间
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 23:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表