OpenEdv-开源电子网

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

u8 OLED_GRAM[128][8]疑问!

[复制链接]

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
发表于 2016-1-21 20:58:07 | 显示全部楼层 |阅读模式
5金钱
我现在看的是探索者F4库函数开发教程

我想请问一下,u8 OLED_GRAM[128][8];        这句代码的意思是,建立一个128行,8列的二维数组吧?每个元素是一个字节,也就是八位吧?

我现在看OLED章节不太明白,希望大神支支招啊

我的理解是建立一个128行,8列的二维数组,但是时间上,OLED缓存应该是128列,8行啊,这个问题我一直转换不过来,希望高手可以帮帮忙啊,谢谢大家了


最佳答案

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

第0行:xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx, 第1行:xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx, 第2行:xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx, . . 第127行:xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx 定义的是这样的一个数组,请不要把这个 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2021-1-21
在线时间
3 小时
发表于 2016-1-21 20:58:08 | 显示全部楼层
本帖最后由 Arce 于 2021-4-16 16:32 编辑
刘刘先生 发表于 2020-2-13 16:42
请问你也遇到同样问题了么?我有点不明白,求助!

第0行:xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,
第1行:xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,
第2行:xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,
.
.
第127行:xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx
定义的是这样的一个数组,请不要把这个数组和1306内部的字节存储方式对应起来,只要把这个理解成一个简单的待点亮的点的缓存区就好了。
这个数组中的每一行,对应1306内部存储区域的每一列,128行的数组,也就对应了1306中128列的数据,其实就是这样错位对应的。每行数组中的每个“xxxxxxxx”元素,都代表1306存储区中,某一页中的,某列的8行,xxxxxxxx中的每个“x”,代表的是某一列中的某行数据(其实就是一个x对应一个点,一列的一行就是一个点)。即第0行数组中的第0个数据:xxxxxxxx,对应的是1306中page0存储区的seg0的8行数据,而第0行数组中的第1个数据:xxxxxxxx,对应的是1306中page1存储区的seg0的8行数据,依此类推,第0行数组中的第7个数据:xxxxxxxx,对应的是1306中page7存储区的seg0的8行数据。
因此,当刷新完缓存区第0行数组的时候,其实是完成了对1306中page0-page7的seg0的数据的刷新。并不是行对行刷新,而是行对列这样错位刷新。这样数组中的一行数据,对1306中的一列数据刷新。
这个数组是一个内容缓存数组,不是把1306的存储区按实际排列方式定义处理,这是两个完全独立的东西,只不过其中的每个元素,恰好和1306的存储区对应起来而已。不要搞混。

回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-21 22:30:20 | 显示全部楼层
列跟行都是人定义的,线性代数里面 矩阵转置 列就变成了行。 另外这么写也可能跟屏幕主控芯片数据手册里的定义保持一致
回复

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
 楼主| 发表于 2016-1-21 22:49:54 | 显示全部楼层
ricefat 发表于 2016-1-21 22:30
列跟行都是人定义的,线性代数里面 矩阵转置 列就变成了行。 另外这么写也可能跟屏幕主控芯片数据手册里的 ...

那这几句话怎么理解啊? [128][8]是数组啊,怎么变成坐标了
u8 OLED_GRAM[128][8];
128对应的是X坐标。
8对应的是Y坐标。
128每个代表一个X坐标。
8每个代表8个Y坐标。
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
发表于 2016-1-21 22:59:20 | 显示全部楼层
你可以自己画个图,每行的每个字节对齐。   以每个字节的位为列 竖着看下去 对应就是屏幕的Y轴了。   你画个图就明白了(一一对应思想),把每个位抽象成一个像素。。不知道我说的是不是太抽象。。
回复

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
 楼主| 发表于 2016-1-21 23:08:14 | 显示全部楼层
中国救星 发表于 2016-1-21 22:59
你可以自己画个图,每行的每个字节对齐。   以每个字节的位为列 竖着看下去 对应就是屏幕的Y轴了。   你画 ...

我想说的是,[128][8] 表示的是一个二维数组吧啊?是一个128行,8列的二维数组吧?
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
发表于 2016-1-21 23:09:46 | 显示全部楼层
本帖最后由 中国救星 于 2016-1-21 23:18 编辑
q546163199 发表于 2016-1-21 23:08
我想说的是,[128][8] 表示的是一个二维数组吧啊?是一个128行,8列的二维数组吧?

我是画个图来看的,比较形象。
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
发表于 2016-1-21 23:10:07 | 显示全部楼层
q546163199 发表于 2016-1-21 23:08
我想说的是,[128][8] 表示的是一个二维数组吧啊?是一个128行,8列的二维数组吧?

额。。。。。。。。。。。等等。。。
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
发表于 2016-1-21 23:11:37 | 显示全部楼层
q546163199 发表于 2016-1-21 23:08
我想说的是,[128][8] 表示的是一个二维数组吧啊?是一个128行,8列的二维数组吧?

是的。。 不好意思刚才说错了一个地方, 竖着看下来是X轴
回复

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
 楼主| 发表于 2016-1-21 23:32:26 | 显示全部楼层
中国救星 发表于 2016-1-21 23:11
是的。。 不好意思刚才说错了一个地方, 竖着看下来是X轴

我的想法是,我不仅改成[8][128],我把之后的画点函数也改一下,行列位置换一下,这样的话是因为,C语言中的二维数组在内存中是按行排放的,所以就是构成了一个8行,128列的,二维数组,每行的高度是8位,正好总共就是64行,128位,您看这样可以不?我把原有程序的行列都调换下位置,不知道这样是否可行


至于画点函数中,页的取值是7-y/8,应该是因为我们认为的最上角的(0.0)应该是对应着OLED实际的左下角,所以才会用7-y/8,y是行数,这样我说的对吧?


回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
发表于 2016-1-21 23:37:21 | 显示全部楼层
q546163199 发表于 2016-1-21 23:32
我的想法是,我不仅改成[8][128],我把之后的画点函数也改一下,行列位置换一下,这样的话是因为,C语言中 ...

不对哦, 按你样子改    是有64行  但不是128位 是128个字节, 而有 128 x 8  = 976位了。 你想复杂了, 建议你好好想想是不是自己什么地方搞错了?  
回复

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
 楼主| 发表于 2016-1-22 00:22:20 | 显示全部楼层
中国救星 发表于 2016-1-21 23:37
不对哦, 按你样子改    是有64行  但不是128位 是128个字节, 而有 128 x 8  = 976位了。 你想复杂了,  ...

不会吧,我的意思是有8大行,每一大行有竖着的8位,正好是64位啊,即每一行的高度是为,有8行,即共64行啊,列有128列
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
发表于 2016-1-22 00:33:07 | 显示全部楼层
q546163199 发表于 2016-1-22 00:22
不会吧,我的意思是有8大行,每一大行有竖着的8位,正好是64位啊,即每一行的高度是为,有8行,即共64行 ...

我理解力不是特别好。。 你这样子的话。 取模的方式也要变吧。。 为什么要改呢? 我觉得原子的例子都写好了的。。。。你把它给重新摆个位置,可以是可以。。好像也没有多大好处吧?

我也是菜鸟=。=
回复

使用道具 举报

66

主题

364

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-18
在线时间
129 小时
发表于 2016-3-22 15:27:27 | 显示全部楼层
q546163199 发表于 2016-1-21 23:08
我想说的是,[128][8] 表示的是一个二维数组吧啊?是一个128行,8列的二维数组吧?

你画个图,然后右旋转90度,看看是不是128行,8列
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2016-3-22 20:53:05 | 显示全部楼层
看我们教程啊....
我觉得说的够清楚的了啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
 楼主| 发表于 2016-3-23 17:48:27 | 显示全部楼层
xiaobudonglaosh 发表于 2016-3-22 15:27
你画个图,然后右旋转90度,看看是不是128行,8列

为什么要右旋转90°啊?
回复

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
 楼主| 发表于 2016-3-23 17:49:10 | 显示全部楼层
正点原子 发表于 2016-3-22 20:53
看我们教程啊....
我觉得说的够清楚的了啊.

我已经看了十几遍了,总感觉有几点没讲清楚,比如就是,我这个问题,感觉总是行列颠倒
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2016-3-23 21:26:38 | 显示全部楼层
q546163199 发表于 2016-3-23 17:49
我已经看了十几遍了,总感觉有几点没讲清楚,比如就是,我这个问题,感觉总是行列颠倒

按你的思路,自己写一个代码。就完事了。
然后下载看看能不能用。实践出真知,光理论没用的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
 楼主| 发表于 2016-3-25 17:00:50 | 显示全部楼层
正点原子 发表于 2016-3-23 21:26
按你的思路,自己写一个代码。就完事了。
然后下载看看能不能用。实践出真知,光理论没用的。

我再试试吧
回复

使用道具 举报

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2016-6-26
在线时间
29 小时
发表于 2016-8-28 19:41:07 | 显示全部楼层
本帖最后由 zzsj1990 于 2016-8-28 19:54 编辑
q546163199 发表于 2016-3-23 17:49
我已经看了十几遍了,总感觉有几点没讲清楚,比如就是,我这个问题,感觉总是行列颠倒

虽然时间过了很久,但还是要说一下。
战舰版 36讲 21.07 原子哥说“某一页的某一列”

换句话说,这里的[128][8]并不是128行和8列
而是代表128列和8页 开发指南P260页也有描述

因为每次都是一个字节 8位 并行传输。

回复

使用道具 举报

3

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2017-5-15
在线时间
41 小时
发表于 2017-11-16 19:07:21 | 显示全部楼层

楼主  怎么样了  解决了吗?
回复

使用道具 举报

0

主题

16

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2020-1-29
在线时间
12 小时
发表于 2020-2-13 16:41:55 | 显示全部楼层
MrL 发表于 2017-11-16 19:07
楼主  怎么样了  解决了吗?

请问你也遇到同样问题了么?我有点不明白,求助!
回复

使用道具 举报

0

主题

16

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2020-1-29
在线时间
12 小时
发表于 2020-2-13 16:42:29 | 显示全部楼层
MrL 发表于 2017-11-16 19:07
楼主  怎么样了  解决了吗?

请问你也遇到同样问题了么?我有点不明白,求助!
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2020-10-6
在线时间
8 小时
发表于 2020-11-22 11:40:13 | 显示全部楼层
正点原子 发表于 2016-3-22 20:53
看我们教程啊....
我觉得说的够清楚的了啊.

初始化函数写命令0xa0将左右反置,即列地址0被映射到SEG0(重置)。那么需要更改这个数组的定义吗?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2022-9-24
在线时间
3 小时
发表于 2022-9-27 09:35:45 | 显示全部楼层
楼主,不知道你解决了这个问题没有,我也是小白,被这个问题困扰了一晚上,后来发现是自己太局限于二维数组的定义了,现在自己搞清楚了,想跟你分享一下我的看法:
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 03:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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