专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
战舰stm32的OLED的一些思考
2019-10-15 22:45
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
4878
19
1141
战舰stm32的OLED的一些思考,不对的地方欢迎拍砖
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
13128927795
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。。。。。。。。。。。。。。。这样能解释得通,老板不知道事实是如何的
加载中...
查看其它19个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
//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。。。。。。。。。。。。。。。这样能解释得通,老板不知道事实是如何的
一周热门 更多>