战舰stm32的OLED的一些思考

2019-10-15 22:45发布

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

一周热门 更多>