>[success] **技术支持说明:**
>**1**.一般以自主学习为主
> **2**.可到官方问答社区中提问:[**去提问**](https://bbs.csdn.net/forums/nb-iot)
> **3**.工程师**会尽快**解答社区问题,但他们是一线开发,【**难以保证**】解答时效,解答辛苦,感谢理解!
<br/>
本节课将讲解使用SPI总线驱动OLED显示屏来显示字符。
<br/>
## **OLED 显示技术简介**
OLED(Organic Light-Emitting Diode)显示技术具有自发光、广视角、几乎无穷高的对比度、较低耗电、反应速度快等优点。
###
开发套件中的0.96英寸OLED的实物图如下图所示,其分辨率是64×128像素,即纵向有64个像素点、横向有128个像素点。
![](https://img.kancloud.cn/41/4a/414abaf74735b956bc3b832761504ed4_404x360.png =300x)
<br/>
## **SPI通信协议简介**
SPI的全称是Serial Peripheral Interface,是一种高速的、全双工、同步的通信总线。配套的OLED显示屏便是使用SPI通信协议。
<br/>
## **字库**
为了使OLED屏幕能够正常地显示各种字符,还需要先准备好一套字库,例如标准ASCII字库等。
<br/>
## **显示器 HAL API设计**
显示器的相关的API设计较为复杂,其架构如下:
![](https://img.kancloud.cn/08/18/081806e0f48b360af3b79d38fc93fc08_466x576.png =300x)
###
打开本课程配套的代码,可以找到相关的文件,如图所示。
![](https://img.kancloud.cn/39/3d/393dfe352ddf03b17150d3998d5b4ab8_303x781.png)
###
分别简单介绍一下各个文件:
* hal\_spi.h和hal\_spi.c
**通用SPI驱动API**,适用于使用SPI通信的多种设备。
###
* hal\_lcd\_spi.h和hal\_lcd\_spi.c
基于通用SPI驱动API(hal\_spi)适配出适用于显示器的驱动API,此API还需要配置字库文件font\_v\_8x16.h文件工作
###
* hal\_oled12864.h和hal\_oled12864.c
基于显示器的驱动API封装出方便开发者使用的API。一般地,**开发者只需要学习使用此API即可使用显示器了**,因此下文将只讲述此API。
<br/>
## **编写代码**
打开本节课配套的工程,笔者把上述的.c文件以及必要的标准库文件添加进工程了,如图所示。
![](https://img.kancloud.cn/cd/56/cd56e0e798b72b32582b90a9b5f2a09e_375x705.png =300x)
<br/>
打开hal_oled12864.h文件,我们可以看到两个重要的函数,代码如下:
```
/**
* 初始化显示器
*/
void halOLED12864Init(void);
/**
* 清除屏幕中的显示内容
*/
void halOLED12864ClearScreen(void);
/**
* @fn halOLED12864Show
*
* @brief 在屏幕上显示字符串,支持的字符格式:8x16 ASCII字符
*
* @param line - 参数值范围:0 ~ 3
* @param column - 参数值范围:0 ~ 127
* @param str - 待显示的字符串
*
*/
void halOLED12864ShowX16(unsigned char line, unsigned char column, const unsigned char *str);
```
###
**halOLED12864ShowX16()函数使用详解**
配套的OLED显示屏的分辨率为64x128像素,可以把其理解为64行和128列的二维表格。halOLED12864ShowX16()函数支持显示8x16的标准ASCII字符,其中的8x16是指占据8行的16列的字体。因此可以理解为halOLED12864ShowX16()函数支持显示4行ASCII字符,于是参数line的取值范围便是0~3,但是参数column仍是使用像素点来表示在第几个像素的位置开始显示字符,因此其取值范围为0~127。
<br/>
## **使用显示器 HAL API**
编写好显示器 HAL API后,显示器的使用非常简单。在配套工程的main.c文件中添加如下代码:
```
int main(void)
{
halSystemInit();//系统初始化
halOLED12864Init();//OLED显示器初始化
/* Infinite loop */
while (1)
{
/* Test1 - Show 8x16 Char */
halOLED12864ShowX16(0, 0, (uint8_t *)"0123456789");
halOLED12864ShowX16(1, 0, (uint8_t *)"abcdefghiABCDE");
halOLED12864ShowX16(2, 0, (uint8_t *)"{}[]()!@#$%");
halOLED12864ShowX16(3, 0, (uint8_t *)"==========>");
halSystemDelayUs(2000000);//延时2秒
/* Test2 - Clear screen */
halOLED12864ClearScreen();//清空屏幕内容
halSystemDelayUs(1000000);//延时1秒
}
}
```
<br/>
## **测试**
* 打开本课程配套的源代码,编译链接生成Hex文件,然后烧录到开发板中。
###
* 把OLED显示器按如图所示插入到开发板中,如图所示。
![](https://img.kancloud.cn/23/64/236467c39179dc011ca5252f81b63cae_474x533.png =300x)
###
* 给开发板接通电源,按下复位按键Reset,如图所示。
![](https://img.kancloud.cn/2f/aa/2faa6ea7ae25cfab43883e7562458082_1664x878.png =600x)
###
* 可以看到屏幕上显示了对应的字符,如图所示。
![](https://img.kancloud.cn/fb/1b/fb1b6ef91610918b2be819db47144843_626x794.png =400x)
<br/>
<br/>
## **商务合作**
如有以下需求,可扫码添加管理员好友,注明“**商务合作**”
* 项目定制开发,技术范围:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等;
* 入驻平台,成为讲师;
* 接项目赚外快;
* 善学坊官网:[www.sxf-iot.com](https://www.sxf-iot.com/)
![](https://img.kancloud.cn/b7/5a/b75ac8c3da945f20568771f5935c388f_430x430.png =150x)
(非商务合作**勿扰**,此处**非**技术支持)
- 课程简介
- 配套资源下载
- 配套开发套件简介
- 简介
- 硬件组成 & 技术参数
- STM32 Pro 主板 原理图 & PCB图
- STM32 Std 主板 原理图 & PCB图
- 板载设备使用说明
- STM32开发指南
- 1. 搭建开发环境
- 1.1 Keil MDK简介与安装
- 1.2 STM32 Pack 简介与安装
- 1.3 CH34x 驱动简介与安装
- 1.4 ISP 串口下载工具
- 1.5 串口调试工具
- 2. STM32 开发基础
- 2.1 新建工程
- 2.2 实现第1个程序
- 2.3 Hex 文件烧录详解
- 3. 移植官方标准工程模板
- 4. GPIO实验:LED
- 5. 系统延时应用
- 6. GPIO实验:按键
- 7. GPIO中断实验——按键触发实验
- 8. 使用定时器TIM3
- 9. 串口通信实验
- 10. ADC 实验
- 11. OLED显示器实验
- 12. SDK 设计思想
- 13. SDK 架构解析
- 14. 多任务应用实验
- 15. 输入型任务:按键输入实验
- 16. 输入型任务:串口接收实验
- 17. 高精度温湿度传感器实验
- 进阶课程