OpenEdv-开源电子网

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

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

[复制链接]

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-1-17
在线时间
18 小时
发表于 2016-8-22 17:15:33 | 显示全部楼层 |阅读模式
5金钱
标准例程里面的画点函数如下:
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页上面啊?
求解?






oled

oled

最佳答案

查看完整内容[请看2#楼]

请自行验证+仿真找答案。 这种纯软件问题,不要再一问再问了。自己动手有多难?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-8-22 17:15:34 | 显示全部楼层
请自行验证+仿真找答案。  这种纯软件问题,不要再一问再问了。自己动手有多难?
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2016-8-24
在线时间
33 小时
发表于 2016-8-24 23:22:27 | 显示全部楼层
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
QQ截图20160824231557.jpg
回复

使用道具 举报

26

主题

105

帖子

0

精华

高级会员

Rank: 4

积分
894
金钱
894
注册时间
2015-10-25
在线时间
117 小时
发表于 2016-8-25 10:29:40 | 显示全部楼层
你插上OLED屏的时候实际上是把OLED屏上下颠倒了,刚好Page0是在最底下,从上依次增加的,有因为列地址是remap,所以列地址并没有变
回复

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2017-1-6
在线时间
57 小时
发表于 2017-1-9 15:44:30 | 显示全部楼层
天空淡云 发表于 2016-8-25 10:29
你插上OLED屏的时候实际上是把OLED屏上下颠倒了,刚好Page0是在最底下,从上依次增加的,有因为列地址是rem ...

您好,请问下列地址是remap是怎么看出来的,谢谢
回复

使用道具 举报

26

主题

105

帖子

0

精华

高级会员

Rank: 4

积分
894
金钱
894
注册时间
2015-10-25
在线时间
117 小时
发表于 2017-1-13 10:53:07 | 显示全部楼层
在OLED的初始化程序里面有对许多寄存器的初始化,具体哪一个是设置remap的,你可以查一下数据手册,我也忘了
回复

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2017-1-6
在线时间
57 小时
发表于 2017-1-14 08:27:10 | 显示全部楼层
天空淡云 发表于 2017-1-13 10:53
在OLED的初始化程序里面有对许多寄存器的初始化,具体哪一个是设置remap的,你可以查一下数据手册,我也忘 ...

谢谢您,现在的remap指令和扫描指令完全把我搞蒙了,完全看不懂啊
回复

使用道具 举报

26

主题

105

帖子

0

精华

高级会员

Rank: 4

积分
894
金钱
894
注册时间
2015-10-25
在线时间
117 小时
发表于 2017-1-14 10:13:35 | 显示全部楼层
你得先设置好你的起始页地址和列地址,然后再设置扫描方向,这两个都会决定你的画点轨迹
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 05:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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