OpenEdv-开源电子网

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

关于oled gram的问题

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2011-1-23
在线时间
0 小时
发表于 2011-2-25 10:16:46 | 显示全部楼层 |阅读模式
oled显示时是竖向的取模,gram为何要写成这样的数组?

//OLED的显存
//存放格式如下.
//[0]0 1 2 3 ... 127 
//[1]0 1 2 3 ... 127 
//[2]0 1 2 3 ... 127 
//[3]0 1 2 3 ... 127 
//[4]0 1 2 3 ... 127 
//[5]0 1 2 3 ... 127 
//[6]0 1 2 3 ... 127 
//[7]0 1 2 3 ... 127     
u8 OLED_GRAM[128][8];

我怎么觉得应该是这样 u8 OLED_GRAM[8][128];
还是没搞懂oled gram的对于关系!



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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-2-26 01:37:26 | 显示全部楼层
u8 OLED_GRAM[128][8];
128对应的是X坐标。
8对应的是Y坐标。
128每个代表一个X坐标。
8每个代表8个Y坐标。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2012-12-29
在线时间
4 小时
发表于 2013-2-25 20:14:27 | 显示全部楼层
是不是这样理解,数据都是同样的数据只是存放的格式不同?同样也可以改成[8][128]来存放,不过一般习惯x ,y这样的顺序
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-8-29
在线时间
0 小时
发表于 2013-9-27 13:39:08 | 显示全部楼层
这个我也有问题啊??很不明白,按照数组不是说前面是行数后面是列数吗
回复 支持 反对

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2014-3-17 15:16:02 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,《STM32不完全手册V2.3》第161页倒数第三行“一个通用的在点(x,y)置1表达式为:OLED_GRAM[x][y/8]|=1<<(7-y%8);”是否有误?根据画点函数“void OLED_DrawPoint(u8 x,u8 y,u8 t);”,通用画点表达式是否应为“OLED_GRAM[x][7-(y/8)]|=1<<(7-y%8);”?
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-3-17 19:47:56 | 显示全部楼层
回复【5楼】小温:
---------------------------------
y坐标是反的,所以没错。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2014-3-17 22:07:12 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
还不是很懂,请原子哥举例明示。手册V2.3第161页,"比如,我们要在 x=100,y=29 这个点写入 1,则可以用这个句子实现:OLED_GRAM[100][4]|=1<<2;一个通用的在点(x,y)置 1 表达式为:OLED_GRAM[x][y/8]|=1<<(7-y%8);"。。。。。这个句子里,把y=29代入表达式,得出的是OLED_GRAM[100][3]|=1<<2啊。
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-3-17 22:33:25 | 显示全部楼层
回复【7楼】小温:
---------------------------------
实际测试吧。最直接了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2014-3-17 22:52:29 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
已经仿真了,找到原因了,原来page0是靠近oled排线的那一端
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复 支持 反对

使用道具 举报

15

主题

82

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2015-4-13
在线时间
0 小时
发表于 2015-8-4 21:12:57 | 显示全部楼层
回复【8楼】正点原子:
--------------------------------
原子哥,OLED_GRAM[100][4]|=1<<2;这个地方我也有疑问,求解答。1<<2为什么改变的是y值,也就是那个4?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-8-4 22:28:50 | 显示全部楼层
回复【10楼】卡萨城堡:
---------------------------------
你觉得应该如何改?然后按你的思路改,然后验证即可。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

82

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2015-4-13
在线时间
0 小时
发表于 2015-8-5 19:56:43 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
好的,谢谢原子哥
回复 支持 反对

使用道具 举报

18

主题

238

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1823
金钱
1823
注册时间
2014-8-5
在线时间
211 小时
发表于 2015-8-5 22:40:32 | 显示全部楼层
 回复【11楼】 正点原子 :
---------------------------------
您好原子哥,我根据您的OLED显存显示的方案,写好了一些GUI函数,并把模拟I2C和硬件I2C都实现(通过修改宏的值用于选择),工程跑的是RTX操作系统。这是我6月份做的智能小车,一直没什么时间现在才写了一点点的程序。希望您能看下,给些意见,谢谢。

原子哥,您的模拟I2C实验中并不需要设置I2C引脚的方向,只要配置成开漏输出即可,开漏输出即可以做输出又可以读出引脚电平,不过一定要接上拉电阻

您的OLED显存二维数组个人有点不太习惯,所以改成 [8][16]形式,显存对应OLED坐标如下:
[mw_shl_code=c,true]//OLED的显存 左下角为坐标原点 即坐标为 (0,0) //存放格式如下. //[0]0 1 2 3 ... 127 ------------------- //[1]0 1 2 3 ... 127 | | //[2]0 1 2 3 ... 127 | | //[3]0 1 2 3 ... 127 | | //[4]0 1 2 3 ... 127 | | //[5]0 1 2 3 ... 127 | | //[6]0 1 2 3 ... 127 |O | //[7]0 1 2 3 ... 127 原点 -------------------- u8 OLED_GRAM[8][128]; [/mw_shl_code]
硬件I2C及模拟I2C底层函数均写好,修改宏的值及可选择,头文件代码如下:
[mw_shl_code=c,true]#ifndef _MONI_I2C_ #define _MONI_I2C_ #include <stm32f10x.h> #define Hardware_I2C 0 //1 为硬件 I2C 0 为模拟I2C //---------------------------------------------------------------------------------------- //I2C IO #define I2C_NUM_RCC RCC_APB1Periph_I2C2 #define I2C_NUM I2C2 #define I2C_RCC RCC_APB2Periph_GPIOB #define I2C_BUS GPIOB #define IIC_SCL GPIO_Pin_10 #define IIC_SDA GPIO_Pin_11 #define I2C_SCL(x) x?GPIO_SetBits(I2C_BUS,IIC_SCL) : GPIO_ResetBits(I2C_BUS,IIC_SCL) #define I2C_SDA(x) x?GPIO_SetBits(I2C_BUS,IIC_SDA) : GPIO_ResetBits(I2C_BUS,IIC_SDA) #define READ_SDA GPIO_ReadInputDataBit(I2C_BUS,IIC_SDA) #if Hardware_I2C //硬件I2C----------------------------------------- //IIC所有操作函数 void IIC_Init(void); //初始化IIC的IO口 void IIC_Start(void); //发送IIC开始信号 void IIC_Stop(void); //发送IIC停止信号 void IIC_Send_Byte(u8 txd); //IIC发送一个字节 u8 IIC_Read_Byte(void); //IIC读取一个字节 void I2C_START(void); //开启I2C void I2C_End(void); //关闭I2C #else //模拟I2C---------------------------------------------------- //IIC所有操作函数 void IIC_Init(void); //初始化IIC的IO口 void IIC_Start(void); //发送IIC开始信号 void IIC_Stop(void); //发送IIC停止信号 void IIC_Send_Byte(u8 txd); //IIC发送一个字节 u8 IIC_Read_Byte(unsigned char ack);//IIC读取一个字节 ack=1时,发送ACK,ack=0,发送nACK u8 IIC_Wait_Ack(void); //IIC等待ACK信号 void IIC_Ack(void); //IIC发送ACK信号 void IIC_NAck(void); //IIC不发送ACK信号 void I2C_delay(u16 t); //I2C 延时 #define I2C_Wait 0 //I2C延时时间 用于调节I2C 速度 #endif #endif [/mw_shl_code]
模拟I2C只需配置成开漏输出就不需要切换引脚方向,但是一定要外接上拉电阻!
I2C_Wait 用于控制模拟I2C 速度 ,值越大速度越慢


ARM智能小车跑RTX操作系统,I2C OLED 模拟I2C及硬件I2C均测试通过,OLED写好部分GUI函数。
工程文件:

ARM智能小车工程.zip

1.12 MB, 下载次数: 1169

回复 支持 反对

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
发表于 2016-1-22 12:54:58 | 显示全部楼层
正点原子 发表于 2011-2-26 01:37
u8&nbsp;OLED_GRAM[128][8];
128对应的是X坐标。
8对应的是Y坐标。
128每个代表一个X坐标。
8每个代表8个Y ...

可是,[128][8]表示的是128行,8列的二维数组吧?
回复 支持 反对

使用道具 举报

66

主题

364

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-18
在线时间
129 小时
发表于 2016-3-22 15:13:15 | 显示全部楼层
q546163199 发表于 2016-1-22 12:54
可是,[128][8]表示的是128行,8列的二维数组吧?

0------------------------------127
|
|
|
8
回复 支持 反对

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
发表于 2016-3-23 17:47:53 | 显示全部楼层
xiaobudonglaosh 发表于 2016-3-22 15:13
0------------------------------127
|
|

C语言中,定义数组的时候,是先行数后列数吧?
回复 支持 反对

使用道具 举报

0

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2018-6-17
在线时间
57 小时
发表于 2017-1-5 23:44:35 | 显示全部楼层
小温 发表于 2014-3-17 22:52
回复【8楼】正点原子:
---------------------------------
已经仿真了,找到原因了,原来page0是靠近oled排 ...

正解!想这个问题想了很久。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 03:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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