STM32F103ZET6 OLED显示

【OLED简介】

  1. OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic
    Electroluminesence Display,OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
  2. OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,并且能够节省电能,从2003年开始这种显示设备在MP3播放器上得到了应用。
  3. LCD都需要背光(背光显示是指当使用者使用电子设备时,机身上的显示屏能否发出背光,以便更清晰地显示内容。),而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果要来得好一些。以目前的技术,OLED的尺寸还难以大型化,但是分辨率确可以做到很高。

【OLED工作模式】

在这里插入图片描述

【OLED8080并行接口信号线说明】

CS:OLED片选信号(片选:从MCU中选取一块存储单元进行存储,片选信号一般是在划分地址空间时,由逻辑电路产生的。在数字电路设计中,一般开路输入管脚呈现为高电平,因此片选信号绝大多数情况下是一个低电平)。
WR:向OLED写入数据。
RD:从OLED读取数据。
D[7:0]:8位双向数据线。
RST(RES):硬复位OLED。
DC:命令/数据标志(0,读写命令;1,读写数据)。
OLED控制器为SSD1306
在这里插入图片描述

【OLED8080并口读写过程】

模块的8080并口读/写的过程为:
先根据要写入/读取的数据的类型,设置DC为高(数据)/低(命令),然后拉低片选,选中SSD1306,接着我们根据是读数据,还是要写数据置RD/WR为低,然后:
1.读数据:在RD的上升沿, 使数据锁存到数据线(D[7:0])上;
2.写数据:在WR的上升沿,使数据写入到SSD1306里面;
在这里插入图片描述
并口写时序
在这里插入图片描述
并口读时序

【OLED模块显存】

显存:显存就是显卡(将计算机系统所需要的显示信息进行转换驱动显示器,并向显示器提供逐行或隔行扫描信号,控制显示器的正确显示)内存,也被叫做帧缓存GRAM,它的作用是用来存储显卡芯片处理过或者即将提取的渲染数据。如同计算机的内存一样,显存是用来存储要处理的图形信息的部件。)
SSD1306的显存总共为128X64bit大小,SSD1306将这些显存分为了8页。每页包含了128个字节,总共8页,这样刚好是128*64的点阵大小。
在这里插入图片描述

【程序显示原理】

在STM32的内部建立一个 缓存(共128*8个字节),在每次修改的时候,只是修改STM32上的缓存(实际上就是SRAM),在修改完了之后,一次性把STM32上的缓存数据写入到OLED的GRAM。当然这个方法也有坏处,就是对于那些SRAM很小的单片机(比如51系列)就比较麻烦了。

【SSD1306的命令】

在这里插入图片描述

  1. 命令0X81:设置对比度。包含两个字节,第一个0X81为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。
  2. 命令0XAE/0XAF:0XAE为关闭显示命令;0XAF为开启显示命令。
  3. 命令0X8D:包含2个字节,第一个为命令字,第二个为设置值,第二个字节的BIT2表示电荷泵的开关状态,该位为1,则开启电荷泵,为0则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。(电荷泵(charge pump)是一种直流-直流转换器,利用电容器为储能元件,多半用来产生比输入电压大的输出电压,或是产生负的输出电压)。
  4. 命令0XB0 - B7:用于设置页地址,其低三位的值对应着GRAM的页地址。
  5. 命令0X00~0X0F:用于设置显示时的起始列地址低四位。
  6. 命令0X10~0X1F:用于设置显示时的起始列地址高四位。

【OLED初始化过程】

在这里插入图片描述

【有关函数】

①OLED初始化
//初始化SSD1306
void OLED_Init(void)
{
…//设置IO口模式,所有用到的io口设置为推挽模式。
GPIO_Init();
…//初始化代码,写相关寄存器
OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示
OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率
OLED_WR_Byte(80,OLED_CMD); //[3:0],分频因子;[7:4],震荡频率
OLED_WR_Byte(0xA8,OLED_CMD); //设置驱动路数
OLED_WR_Byte(0X3F,OLED_CMD); //默认0X3F(1/64)
OLED_WR_Byte(0xD3,OLED_CMD); //设置显示偏移
OLED_WR_Byte(0X00,OLED_CMD); //默认为0


OLED_Clear();
}
②OLED写一个字节
//向SSD1306写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
DATAOUT(dat);
if(cmd)
OLED_RS_Set();
else
OLED_RS_Clr();
OLED_CS_Clr();
OLED_WR_Clr();
OLED_WR_Set();
OLED_CS_Set();
OLED_RS_Set();
} 在这里插入图片描述
③OLED更新缓存,显示内容
u8 OLED_GRAM[128][8];

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][i],OLED_DATA);
}
}在这里插入图片描述
④OLED画点函数
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;
}
⑤OLED字符显示函数
//在指定位置显示一个字符,包括部分字符
//x:0~127 y:0~63
//mode:0,反白显示;1, size:选择字体 12/16/24
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{
u8 temp,t,t1; u8 y0=y;
u8 csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数
chr=chr-’ ';//得到偏移后的值
for(t=0;t<csize;t++)
{
if(size == 12)temp=asc2_1206[chr][t]; //调用1206字体
else if(size == 16)temp=asc2_1608[chr][t]; //调用1608字体
else if(size==24)temp=asc2_2412[chr][t]; //调用2412字体
else return; //没有的字库
for(t1=0;t1<8;t1++)
{
if(temp&0x80)OLED_DrawPoint(x,y,mode);
else OLED_DrawPoint(x,y,!mode);
temp<<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++; break;
}
}
}
}

【OLED显示汉字,图片】

**[OLED显示图片或汉字](OLED%E6%98%BE%E7%A4%BA%E5%8F%96%E6%A8%A1%E5%9B%BE%E7%89%87_qq_40831286%E7%9A%84%E5%8D%9A%E5%AE%A2-CSDN%E5%8D%9A%E5%AE%A2%20%20https://blog.csdn.net/qq_40831286/article/details/96453024)
BMP格式:BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点–占用磁盘空间过大。
位图:位图图像(bitmap),亦称为点阵图像或栅格图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图尺寸的效果是增大单个像素,从而使线条和形状显得参差不齐。然而,如果从稍远的位置观看它,位图图像的颜色和形状又显得是连续的。用数码相机拍摄的照片、扫描仪扫描的图片以及计算机截屏图等都属于位图。位图的特点是可以表现色彩的变化和颜色的细微过渡,产生逼真的效果,缺点是在保存时需要记录每一个像素的位置和颜色值,占用较大的存储空间。常见的位图图片格式有JPG、PNG、BMP等。
位图与矢量图比较
在这里插入图片描述

发布了33 篇原创文章 · 获赞 2 · 访问量 2676

猜你喜欢

转载自blog.csdn.net/qq_44431690/article/details/104262569