>[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/a4/f8/a4f872aacfe164a898c649138846c200_404x360.png =300x)
<br/>
## **SPI通信协议简介**
SPI的全称是Serial Peripheral Interface,是一种高速的、全双工、同步的通信总线。配套的OLED显示屏便是使用SPI通信协议。
<br/>
## **字库与图库**
为了使OLED屏幕能够正常地显示各种字符,还需要先准备好一套字库,例如标准ASCII字库等。
<br/>
## **显示器 HAL API设计**
显示器的相关的API设计较为复杂,其架构如下:
![](https://img.kancloud.cn/9f/7d/9f7d965156f86d4c14adef507314e80d_466x576.png =250x)
###
相关的文件如下图所示。
![](https://img.kancloud.cn/ba/80/ba80efe251415b273756bf50fca06a62_303x781.png =250x)
###
分别简单介绍一下各个文件:
* 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/4e/c3/4ec3fd8e71aae60e5653b4f7eeebb24f_375x705.png =250x)
<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/05/2e/052e0fcb904938ddd881d51616ec73fb_2736x1427.png =350x)
>[danger] 注意,开发板与显示器是右边对齐。
###
* 把Hex文件烧录到开发板中
###
* 在通电的条件下,按下复位按键RESET,复位STM32开发板
###
* 可以看到如图所示效果:
![](https://img.kancloud.cn/eb/e8/ebe89b0d8127536fc916535d8d0feb06_358x420.png =300x)
<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/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =150x)
(非商务合作**勿扰**,此处**非**技术支持)
- 课程介绍
- 配套资源下载
- 配套开发套件简介
- 简介
- 硬件组成 & 技术参数
- 电路原理图 & PCB图
- 拨码开关使用说明
- 第一部分:无线通信 开发指南
- 1.1.1 NB-IoT:技术简介
- 1.1.2 NB:CH34x USB转串口驱动安装
- 1.1.3 NB:AT 指令开发与测试
- 1.1.4 NB:基础指令集简介
- 1.1.5 NB:云端服务器
- 1.1.5.1 PuTTY 简介与安装
- 1.1.5.2 登录云端服务器
- 1.1.6 NB:移远官方工具简介
- 1.1.7 NB:使用UDP协议与云端服务器通信
- 1.1.8 NB:使用TCP协议与云端服务器通信
- 1.1.9 NB:使用MQTT协议与云端服务器通信
- 进阶课程
- 第二部分:STM32 开发指南
- 2.1 搭建开发环境
- 2.1.1 Keil MDK 简介与安装
- 2.1.2 STM32 Pack 简介与安装
- 2.1.3 CH34x 驱动简介与安装
- 2.1.4 其他开发工具
- 2.2 STM32 开发基础
- 2.2.1 新建工程
- 2.2.2 实现第1个程序
- 2.2.3 Hex 文件烧录详解
- 2.3 移植官方标准工程模板
- 2.4 GPIO实验——LED灯
- 2.5 系统延时应用
- 2.6 GPIO实验——按键
- 2.7 GPIO中断实验——按键触发
- 2.8 使用定时器TIM3
- 2.9 串口通信实验
- 2.10 ADC 实验
- 2.11 OLED显示器实验
- 2.12 SDK 设计思想
- 2.13 SDK 架构解析
- 2.14 多任务应用
- 2.15 输入型任务:按键输入
- 2.16 输入型任务:串口接收
- 课外篇:项目实战
- 基于STM32+NB-IoT的温湿度采集
- 系统简介
- 系统搭建
- 系统详解
- 1.代码编译与架构说明
- 2.DHT11温湿度传感器
- 3. 数据通信任务说明
- 版权声明与免责声明