战舰stm32的OLED的一些思考

2019-10-15 22:45发布

战舰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。。。。。。。。。。。。。。。这样能解释得通,老板不知道事实是如何的

一周热门 更多>