一、关于OLED

1、OLED(有机发光二极管)又称有机电激光显示。OLED同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲面板、使用温度范围广、构造及制作过程简单等特性。

2、OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,有机材料就会发光,而且OLED显示屏幕可视角度大,并且能够节省电能,从2003年开始这种显示设备在MP3播放器上得到应用。

3、LCD需要背光,OLED不需要。OLED是自发光,相比之下,OLED效果更好。目前OLED尺寸还难以大型化,但是分辨率却可以做到很高。

二、ALINETEK0.96寸OLED模块

1、模块有单色和双色两种可选,单色为纯蓝色,双色为黄蓝双色(1/4的部分显示黄色,3/4的部分显示蓝色)单色模块每个像素点只有亮与不亮两种情况,没有颜色区分。

2、尺寸小,显示尺寸为0.96寸,而模块的尺寸仅为27mm*26mm大小。

3、高分辨率,该模块的分辨率为128*64。

4、多接口方式,该模块提供了总共4种接口包括:6800、8080两种并行接口方式、4线的穿行SPI接口方式、IIC接口方式。

5、不需要高压,3.3V就可以工作了。(该模块不和5.0V接口兼容,接5.0V会烧坏模块)

6、OLED模块工作模式选择:4种模式通过模块的BS1/BS2设置,BS1/BS2的设置与模块接口模式的关系如表:

7、OLED 8080并行接口信号线说明

CS:OLED片选信号;WR:向OLED写入数据;RD:从OLED读取数据;

D【7:0】:8位双向数据线;RST(RES):硬复位OLED;

DC:命令/数据标志(0,读写命令;1,读写数据);OLED控制器位SSD1306

三、OLED 8080并口读写过程

模块的8080并读/写过程为:

先根据要写入/读取的数据类型,设置DC为高(数据)/低(命令),然后拉低片选,选中SSD1306,接着我们根据是读数据,还是要写数据置RD/WR为低,然后:

1、读数据:在RD的上升沿,使数据锁存到数据线(D【7:0】)上;

2、写数据:在WR的上升沿,使数据写入到SSD1306里面;

3、OLED模块显存

SSD1306的显存总共为128*64bit大小,SSD1306将这些显存分为8页,每页包含了128个字节,共8页,即128*64的点阵大小。

4、程序显示原理:在STM32的内部建立一个缓存(共128*8个字节),在每次修改的时候,只是修改STM32上的缓存(实际就是SRAM),在修改完之后,一次性把STM32上的缓存数据写入到OLED的GRAM。

四、SSD1306的命令:

1、命令0X81:设置对比度。包含两个字节,第一个0X81为命令,随后发送的一个字节为要设置的对比度的值。这个值越大屏幕就越亮。

2、命令0XAE/0XAF:0XAE为关闭显示命令;0XAF为开启显示命令。

3、命令0X8D:包含2个字节,第一个为命令字,第二个为设置值,第二个字节的BIT2表示电荷泵的开关状态,该位为1开启电荷泵,为0关闭。在模块初始化的时候,这个必须要开启,否则看不到屏幕显示。

4、命令0XB0~B7:用于设置页地址,其低三位的值对应着GRAM的页地址。

5、命令0X00~0X0F:用于设置显示时的起始列地址低四位。

6、命令0X10~0X1F:用于设置显示时的起始列地址高四位。

五、OLED初始化过程:

复位SSD1306 ——>RST=0,延时10ms,RST=1——>驱动IC初始化代码——>建设复位所有的寄存器——>开启显示——>清0显存——>开始显存

1、OLED初始化

void OLED_Init(void)
{
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();//清除
}

2、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();//WR拉低再拉高产生一个上升沿
OLED_WR_Set();
OLED_CS_Set();//数据写完,将CS拉高
OLED_RS_Set();//拉高
}

3、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);}}
}

4、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;
}

5、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;}}}
}

STM32——OLED显示实验相关推荐

  1. 【正点原子STM32连载】第二十三章 OLED显示实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  2. fastreport masterdata每页都显示_ALIENTEK 阿波罗 STM32F767 开发板资料连载十六章 OLED 显示实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 http://weixi ...

  3. (实验12)单片机,STM32F4学习笔记,代码讲解【OLED显示实验】【正点原子】【原创】

    文章目录 其它文章链接,独家吐血整理 实验现象 主程序 OLED初始化程序 代码讲解 其它文章链接,独家吐血整理 (实验3)单片机,STM32F4学习笔记,代码讲解[按键输入实验][正点原子][原创] ...

  4. 【STM32】OLED 显示实验代码详解

    文章目录 main.c oled.c oled.h main.c #include "led.h" #include "delay.h" #include &q ...

  5. 灵感手环第一步——0.96寸OLED显示实验

    这算是我这个系列的第一篇博客吧.首先要解决的就是屏幕显示问题.我选择了目前新兴起的OLED显示模块. OLED(OrganicLightEmittingDiode),中文译作有机发光二极管,目前被广泛 ...

  6. 正点原子OLED显示实验

    目录 简介 原理 接口方式 1.8080并行接口 2.SPI方式 常用命令 编写代码 IO口 软件设计 OLED初始化代码: OLED_Refresh_Gram函数 OLED_WR_Byte函数 画点 ...

  7. STM32 OLED显示字符汉字

    本文代码使用 HAL 库. 文章目录 前言 一. OLED 接线: 二.点阵: 三.写数据,命令函数 四.显示字符,字符串: 总结 前言 OLED 屏幕是一种高对比度.高亮度.低功耗.灵活可弯曲的显示 ...

  8. 原子哥 OLED显示实验笔记2

    原子哥讲解的有1206 1608 2412三种字体 意思是:例如1206用12行6列的12*6个方格显示字体 以1206的字符%为例  在OLED显示字符% {0x18,0x00,0x24,0xC0, ...

  9. (48)STM32——图片显示实验

    目录 学习目标 图片格式 BMP 组成 JPG GIF 介绍 代码 总结 学习目标 本节要学习的是使用单片机来显示图片,但是因为目前SD卡还没有图片,暂时做不了实验,等我把图片放到SD卡之后再把实验补 ...

最新文章

  1. 【错误记录】Android Studio 编译报错 ( Installed Build Tools revision 31.0.0 is corrupted )
  2. 卷及神经网络CNN for image retrieval
  3. DNN:windows使用 YOLO V1,V2
  4. java 输出编码_从代码看java输入输出中的编码和解码
  5. Building designing UVA - 11039
  6. 13岁的儿子早恋了,心思都不用在学习上,我要怎么帮助他?
  7. Java魔法堂:JVM的运行模式
  8. iOS 使用WKWebView展示本地gif图片 并设置图片自适应屏幕大小
  9. C++ Primer 第5版--练习8.5
  10. cJSON遍历Json数据的key
  11. UI设计流行渐变配色素材,轻松驾驭色彩
  12. 斯特林(Stirling)数
  13. [原创]网上一位叫啊松得网友提供,本人搜集!!
  14. 关于12378投诉热线的正确打开方式
  15. 当使用curl 下载压缩包时报解压格式错误
  16. Less系列之函数(Functions)
  17. 坚持使用Ubuntu
  18. 4.3 有理函数积分
  19. B端产品经理的心得之如何搞定客户
  20. 2021年茶艺师(初级)考试题库及茶艺师(初级)考试试题

热门文章

  1. 安卓自定义view之——可滑动时间轴(时间刻度尺)
  2. element-ui 使用自定义复选框
  3. UML类图java代码实现
  4. ISO七层模型和TCP/IP四层模型
  5. QIIME2进阶二_元数据及数据导入QIIME2
  6. Siebel Adapter在WMB上的应用
  7. html5 相册翻转效果,HTML5 css3:3D旋转木马效果相册
  8. 【NLP】AutoRegressive Language Model
  9. [反汇编练习] 160个CrackMe之021
  10. 关于AI测试与评价的讨论