合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
>[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) (非商务合作**勿扰**,此处**非**技术支持)