STM32:OLED屏幕开发

一、OLED原理

所谓的屏幕就是由一个个小灯组成,每个小灯称之为一个像素。只要在屏幕上有选择地点亮一部分小灯,就可以显示我们想要的图案。所谓下分辨率就是屏幕上的小灯数量。常见单片机中常见的屏幕分辨率常见的就是128(列长)*64(行高)。如果每个小灯都由单片机直接相连控制,那么需要8000多个引脚才能满足需求,着显然是不切实际的。因此需要借助"屏幕驱动芯片"来控制OLED。我们只需要通过IIC或者SPI等通信协议与屏幕驱动芯片进行通信,就可以操控屏幕上着8000多个小灯的亮灭了。

对于CH1116屏幕驱动芯片,就可以驱动128*64分辨率的屏幕。这类芯片将整个屏幕分成8个页。每页为是128*8.因此每页的行数就成了8行,每一列上有8个数据刚好可以用8个字节0/1表示。CH1116的IIC设备地址为0x7A。

CH1116的关键操作为设置页地址和列地址

|----------------|-----------|----------------------------------------------------------------------------------------------------------------------|
| | 指令 | 说明 |
| 启动IIC通信 | 0x7A 0x00 | 为OLED的外设地址,指令要以0x00开头 |
| 设置第0页的页地址 | 0xB0 | |
| 设置第7页的页地址 | 0xB7 | |
| 设置列地址0x5A(低4位) | 0x0A | 设置列地址要分为两次,0xYZ设置地址时,要设置0x0Z 和0x1Y。因此设置第90列的像素列,即0x5A需要列0x0A(低4位),0X15(高4位). |
| 设置列地址0x5A(高4位) | 0X15 | 设置列地址要分为两次,0xYZ设置地址时,要设置0x0Z 和0x1Y。因此设置第90列的像素列,即0x5A需要列0x0A(低4位),0X15(高4位). |
| 设置数据,即像素亮灭 | 0x40 | 发送0x40 0x00 <当前列数据bitmap 下一数据bitmap ....> 。例如确定第0页和列地址为0x5A后,发送: 0x40 0x01 0x03 ;那么屏幕上的第90列的第一个像素点和第91列的前两个像素点就会亮。 |

CH1116有一个非常方便的特性,就是在设置数据时,当前页和列的数据被设置好后,列地址会自动加1.例如,确定好第0页和第0列后,一股脑发送0x40 0xFF 0xFF .....0xFF(128个0xFF),那么OLED屏幕的前8行就全部被点亮了。

二、准备工作

新建工程,设置IIC1 的模式,由于要操作的数据要求更新要快,因此要把IIC的速度模式设置成快速模式。此时IIC的时钟频率也变到了400000。一般没做其他操作情况下,STM32的内部时钟一直都采用8M速度运行。

由于我的开发板上有外部晶振,可以给STM32提速。将高速时钟源HSE设置为Crystal/Ceramic Resonator ,随后打开 Clock Configuration 时钟设置。将HCLK这里设置最大值72.。也就是切换到了外部晶振和72MHZ的时钟频率

而后勾选上为每个外设生成对饮的头文件和源文件。保存并生成代码

结合STM32:AHT20温湿度传感器驱动程序开发-CSDN博客中的配置,实现AHT20温湿度测试结果在OLED屏幕上显示。

三、OLED驱动库

(1) 资源下载

https://download.csdn.net/download/superSmart_Dong/88555975 可下载。

其中oled.c/oled.h为oled驱动实现,font.h/font.c为字模图模。aht20.c/aht20.h为AHT驱动实现。

(2)字模图模获取地址。

led.baud-dance.com

(3) 资源库的说明。

波特律动LED字模生成器获取字模。

获取到的字模放在如下数组中,并调整数组大小和头文件等。这样才可以在OLED显示

获取到的图模数据复制下来,记下图模宽和高。

将复制的数据贴到font.c和在font.h中声明。调用

OLED_DrawPicture(oled_x,oled_y, size_wide,size_hight, iconVardata, OLED_COLOR_NORMAL);

相关推荐
ZLG_zhiyuan1 小时前
示波器探头选型指南:5大分类,3步正确适配(附避坑清单)
单片机·嵌入式硬件
M78佐菲8 小时前
51单片机学习笔记:ds18b20要点整理
linux·笔记·嵌入式硬件·学习·51单片机
洪核单片机10 小时前
DPJ-96基于STM32单片机wifi远程监控智慧教室 温湿度光照粉尘人数考勤
stm32·单片机·嵌入式硬件·智慧教室·教室人数考勤
m0_7527531212 小时前
单片机基础知识
单片机·51单片机
天空'之城12 小时前
单片机基础核心知识点汇总(三十六)
单片机·嵌入式硬件
云泽80813 小时前
STM32 USART 详解(八):C I/O 串口重定向原理与实现
c语言·stm32·嵌入式硬件
Doraemomo14 小时前
IMX6ULL裸机开发——系统主频和时钟配置
arm开发·嵌入式硬件·makefile·imx6ull
深圳市恒锐丰科技杨生16 小时前
EG1192H 零功耗使能集成上管非同步降压 DC‑DC|屹晶 EGmicro
嵌入式硬件·硬件工程
星栖与芯17 小时前
LiteOS-M 切换汇编逐行图解(1):汇编是什么·寄存器与栈
汇编·stm32·嵌入式硬件·harmonyos·鸿蒙系统
xx~t18 小时前
嵌入式——单片机2
嵌入式硬件·学习·51单片机·串口·蜂鸣器