基于STM32的OLED模块(7x5cm)实验
实验内容
- 在OLED屏上显示中文及英文。
实验目的
- 掌握屏幕显示中文及英文的原理。
实验环境
实验所需硬件
序号 | 名称 | 数量 | 备注 |
---|---|---|---|
1 | 电脑 | 1台 | 系统Windows7及以上 |
2 | STM32底座模块 | 1个 | · |
3 | OLED模块(7x5cm) | 1个 | · |
4 | ST-Link下载器 | 1个 | · |
5 | ST-Link下载器连接线 | 1根 | · |
6 | OLED实验代码 | 1份 | · |
实验所需软件
ST-Link下载器 & ST-Link下载器连接线
STM32底座:HIVE PRO STM32是一种基于STM32F103C8T6芯片的蜂巢底座。
OLED模块:OLED模块是一个0.96寸OLED屏,像素128*64。
实验要求
- 重点了解程序如何在指定的点坐标上(x,y)显示一个点。
实验原理
OLED介绍
OLED屏:
OLED显示屏是利用有机电自发光二极管制成的显示屏。由于同时具备自发光有机电激发光二极管,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
OLED技术功能:
有机发光二极管 (OLED)显示器越来越普遍,在手机、媒体播放器及小型入门级电视等产品中最为显著。不同于标准的液晶显示器,OLED像素是由电流源所驱动。若要了解 OLED电源供应如何及为何会影响显示器画质,必须先了解 OLED显示器技术及电源供应需求。本文将说明最新的OLED显示器技术,并探讨主要的电源供应需求及解决方案,另外也介绍专为 OLED电源供应需求而提出的创新性电源供应架构。
背板技术造就软性显示器,高分辨率彩色主动式矩阵有机发光二极管 (AMOLED) 显示器需要采用主动式矩阵背板,此背板使用主动式开关进行各像素的开关。液晶 (LC) 显示器非晶硅制程已臻成熟,可供应低成本的主动式矩阵背板,并且可用于OLED。许多公司正针对软性显示器开发有机薄膜晶体管 (OTFT) 背板制程,此一制程也可用于OLED显示器,以实现全彩软性显示器的推出。不论是标准或软性OLED,都需要运用相同的电源供应及驱动技术。若要了解OLED技术、功能及其与电源供应之间的互动,必须深入剖析这项技术本身。OLED显示器是一种自体发光显示器技术,完全不需要任何背光。OLED采用的材质属于化学结构适用的有机材质。OLED技术需要电流控制驱动方法,OLED具有与标准发光二极管 (LED)相当类似的电气特性,亮度均取决于LED电流。若要开启和关闭OLED并控制OLED电流,需要使用薄膜晶体管(TFT)的控制电路。
硬件设计
OLED屏与底座模块通过四线SPI总线接口通信。
实验步骤
① 将OLED模块安装于STM32底座上,ST-Link连接电脑与STM32底座,如下图:
② 访问github,进入github界面后点击Code,Clone HTTPS安全链接,如下图所示:
③ 打开电脑终端,进入工作目录workspace (workspace 为工程文件夹所在目录):
$ cd workspace
④ 运行clone
命令:
$ git clone https://github.com/aiotcom/eps.git
下载目录至指定文件夹下。
如果提示“command not found”表示电脑没有安装Git,请至Git官网下载。
如果电脑没有安装 Git 软件,也可以进入Github,点击 Code
-> DownLoad ZIP
下载所有工程代码。如下图所示:
如果电脑没有公网,可以进:D盘\实验教程与代码选择相应的代码。
⑤ 打开MDK5
工程软件,点击工具栏: ` Project ->
Open Project,选择工程文件:
基于STM32的模块实验\2.OLED模块\USER\OLED.uvprojx` 并打开。
⑥ 工程启动后,点击 Rebuild
重新编译。如下图:
⑦ 编译成功,如下图:
⑧ 点击 Download
按钮下载程序,如下图所示:
⑨ 下载完成后,将USB线进行重连操作(即:将STLink的USB线从底座上取下,再重新接上)。
⑩ 观察实验,程序运行后显示如下:
代码讲解
① 程序目录结构,如下图。CORE文件夹为STM32内核代码,HALLIB文件文件夹为底层HAL库文件。我们主要关心,main.c及HARDWARE中的代码。
② main.c中进行OLED屏的初始化及显示“OLED显示实验”,“Hello world!”。
int main(void)
{
HAL_Init();//初始化HAL库
IIC_Init();//初始化OLED屏IIC
OLED_Init();//初始化OLED
/*在屏幕上显示出 OLED显示实验*/
OLED_P8x16Str(3,0,"OLED");
OLED_P16x16Ch(35,0,7);//显
OLED_P16x16Ch(51,0,8);//示
OLED_P16x16Ch(67,0,5);//实
OLED_P16x16Ch(83,0,6);//验
OLED_P8x16Str(3,2,"Hello world!");//显示Hello world
while(1);
}
③ IIC.c 是OLED的IIC接口驱动,关键函数为Write_IIC_Byte()。显示屏的应用程序最终都会调用该函数将数据写到显示屏。
u8 Write_IIC_Byte(u8 byte)
{
u8 i, ack;
IIC_SCL_OUTPUT();
IIC_SDA_OUTPUT();//设置为输出模式
for(i = 0; i < 8; i++)
{
if(byte & 0x80)//一次读取最高位 发送数据
{
SDA_HIGH();
}
else
{
SDA_LOW();
}
SCL_HIGH();//时钟线拉高
IIC_Delay(1);
SCL_LOW();//时钟线拉低
IIC_Delay(1);
byte <<= 1;
}
④ OLED.c为OLED显示屏,OLED_Init()屏幕初始化驱动,设置屏幕参数。
void OLED_Init(void)
{
HAL_Delay(1000); /*显示1s等待上电完成*/
OLED_WrCmd(0xae);
OLED_WrCmd(0x00);
OLED_WrCmd(0x10);
OLED_WrCmd(0x40);
OLED_WrCmd(0x81);
OLED_WrCmd(0xCF);
OLED_WrCmd(0xa1);
OLED_WrCmd(0xc8);
OLED_WrCmd(0xa6);
OLED_WrCmd(0xa8);
OLED_WrCmd(0x3f);
OLED_WrCmd(0xd3);
OLED_WrCmd(0x00);
OLED_WrCmd(0xd5);
OLED_WrCmd(0x80);
OLED_WrCmd(0xd9);
OLED_WrCmd(0xf1);
OLED_WrCmd(0xda);
OLED_WrCmd(0x12);
OLED_WrCmd(0xdb);
OLED_WrCmd(0x40);
OLED_WrCmd(0x20);
OLED_WrCmd(0x02);
OLED_WrCmd(0x8d);
OLED_WrCmd(0x14);
OLED_WrCmd(0xa4);
OLED_WrCmd(0xa6);
OLED_WrCmd(0xaf);
OLED_Fill(0x00);
OLED_Set_Pos(0,0);
OLED_Fill(0xff);//全屏亮
OLED_CLS();//清屏
}
并提供显示显示字符串操作接口函数。
6x8点阵字符操作函数:
//函数名称: OLED_P6x8Str()
//
//函数功能: 显示6*8一组标准ASCLL字符串
//
//入口参数: 显示坐标(X,Y) y(0~7)
//
//返回参数: 无
//
//说明:
16x16点阵字符操作函数: ```c
//函数名称: OLED_P16x16Ch_Power()
//
//函数功能: 显示16*16点阵-电量显示使用
//
//入口参数: 显示坐标(X,Y) y(0~7)
//
//返回参数: 无
//
//说明: ```
常见问题
-
弹出警告窗口,不能下载程序。
- 请确认STLink驱动、STM32F103C8的DFP包是否安装。
- STLink仿真器是否正常接入。
-
下载代码后程序没观察到实验现象。
- 请重新上电,或者按下底座上的复位按键。
- 模块没有安装稳妥。
实验思考
- 将Hello World!居中显示。