💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
>[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) (非商务合作**勿扰**,此处**非**技术支持)