专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
战舰stm32的OLED的一些思考
2019-10-15 22:45
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
4918
19
1141
战舰stm32的OLED的一些思考,不对的地方欢迎拍砖
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
13128927795
1楼-- · 2019-10-16 04:04
首先由于BS2BS1BS0=110,用的8080并口,so 预编译指令中SPI总线的先略过。
stm32开发指南v1.3 
230时序那一块首先根据写还是读设置DC为高或低,在片选CS。但是P231却感觉CS比D/C先行一步,可能是也没啥区别。当然在WR或RD 上升沿数据必须准备好在总线上,保证上升沿时数据已经稳定
加载中...
13128927795
2楼-- · 2019-10-16 05:47
void OLED_WR_Byte(u8 dat,u8 cmd)函数是这样操作的
1,数据准备在总线上 2,根据数据或命令 将D/C设为高或低 3,片选使能 4,写拉低表示要进行写操作(在此之前写和读都为高,在此之后读还为高)5,写变为高电平,产生的上跳沿将数据写入DDRAM 6,片选释放 7,D/C拉高 为什么?不清楚
加载中...
13128927795
3楼-- · 2019-10-16 11:31
精彩回答 2 元偷偷看……
加载中...
13128927795
4楼-- · 2019-10-16 12:29
//更新显存到OLED函数,只要没有调用此函数,操作的都是stm32 RAM中的数组,只有调用了此函数,才能将数组内容刷新进显存中。
void OLED_Refresh_Gram(void)
{
u8 i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)
OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址
OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址
for(n=0;n<128;n++)OLED_WR_Byte(OLED_GRAM[n]
,OLED_DATA);
}
}
加载中...
13128927795
5楼-- · 2019-10-16 17:04
//OLED的清屏函数是先将数组全部赋值为0后,再将数组通过调用 OLED_Refresh_Gram();更新进显存
void OLED_Clear(void)
{
u8 i,n;
for(i=0;i<8;i++)for(n=0;n<128;n++)OLED_GRAM[n]
=0X00;
OLED_Refresh_Gram();//更新显示
}
加载中...
13128927795
6楼-- · 2019-10-16 18:53
//画点
//x:0~127
//y:0~63
//t:1 填充 0,清空
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;
}
这是画点函数,为什么x没变,y变为了63-y呢?这是网友写的:
--------------------------------------------------------------
应原子哥要求,在这里说一下OLED的坐标问题
把OLED插针在上放置来看,本程序以左上角为0坐标(页是0,x坐标也是0),但对OLED的硬件上来说,左下角才是零坐标,
而程序里OLED_GRAM[128][8]是与硬件DDRAM一一对应的,所以,确定了x,y坐标后要变换后再写OLED_GRAM
pos=7-y/8;//页地址 ,x不用变
bx=y%8;
temp=1<<(7-bx);//确定了页和列坐标(x)后,计算偏移长度,方向是从下往上数,和硬件匹配
if(t)OLED_GRAM[x][pos]|=temp;
else OLED_GRAM[x][pos]&=~temp;
-------------------------------------------------------------------------------------------
我个人也有这个疑惑,pos=7-y/8;//页地址 ,x不用变
这句话感觉还是有问题,为什么x值不变?《stm32开发指南v1.3》P237的初始化代码,中间部分:OLED_WR_Byte(0xA1,OLED_CMD);//bit0=1,即column address 127 is mapped to SEG0
这里都已经重映射了,怎么x坐标没变呢?
找了一下午了,到现在还没搞明白???
---------------------------------------------------------------------------
然后过了一天我又想了想,,,
我能不能这样斗胆猜测?
本来呢,y坐标没变,x变为127-x,,,,,,,,,,,,,,,,,但是呢,由于你画PCB时的一些考虑,将OLED物理上平面旋转了180度,导致x坐标在原来基础上变为了127-x‘=127-(127-x)=x,而y在原来基础上变为63-y‘=63-y。。。。。。。。。。。。。。。这样能解释得通,老板不知道事实是如何的
加载中...
1
2
3
4
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
stm32开发指南v1.3 
1,数据准备在总线上 2,根据数据或命令 将D/C设为高或低 3,片选使能 4,写拉低表示要进行写操作(在此之前写和读都为高,在此之后读还为高)5,写变为高电平,产生的上跳沿将数据写入DDRAM 6,片选释放 7,D/C拉高 为什么?不清楚
void OLED_Refresh_Gram(void)
{
u8 i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)
OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址
OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址
for(n=0;n<128;n++)OLED_WR_Byte(OLED_GRAM[n],OLED_DATA);
}
}
void OLED_Clear(void)
{
u8 i,n;
for(i=0;i<8;i++)for(n=0;n<128;n++)OLED_GRAM[n]=0X00;
OLED_Refresh_Gram();//更新显示
}
//x:0~127
//y:0~63
//t:1 填充 0,清空
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;
}
这是画点函数,为什么x没变,y变为了63-y呢?这是网友写的:
--------------------------------------------------------------
应原子哥要求,在这里说一下OLED的坐标问题
把OLED插针在上放置来看,本程序以左上角为0坐标(页是0,x坐标也是0),但对OLED的硬件上来说,左下角才是零坐标,
而程序里OLED_GRAM[128][8]是与硬件DDRAM一一对应的,所以,确定了x,y坐标后要变换后再写OLED_GRAM
pos=7-y/8;//页地址 ,x不用变
bx=y%8;
temp=1<<(7-bx);//确定了页和列坐标(x)后,计算偏移长度,方向是从下往上数,和硬件匹配
if(t)OLED_GRAM[x][pos]|=temp;
else OLED_GRAM[x][pos]&=~temp;
-------------------------------------------------------------------------------------------
我个人也有这个疑惑,pos=7-y/8;//页地址 ,x不用变
这句话感觉还是有问题,为什么x值不变?《stm32开发指南v1.3》P237的初始化代码,中间部分:OLED_WR_Byte(0xA1,OLED_CMD);//bit0=1,即column address 127 is mapped to SEG0
这里都已经重映射了,怎么x坐标没变呢?
找了一下午了,到现在还没搞明白???
---------------------------------------------------------------------------
然后过了一天我又想了想,,,
我能不能这样斗胆猜测?
本来呢,y坐标没变,x变为127-x,,,,,,,,,,,,,,,,,但是呢,由于你画PCB时的一些考虑,将OLED物理上平面旋转了180度,导致x坐标在原来基础上变为了127-x‘=127-(127-x)=x,而y在原来基础上变为63-y‘=63-y。。。。。。。。。。。。。。。这样能解释得通,老板不知道事实是如何的
一周热门 更多>