嵌入式进阶——OLED显示器(SPI)

🎬 秋野酱:《个人主页》

🔥 个人专栏:《Java专栏》《Python专栏》

⛺️心若有所向往,何惧道阻且长

文章目录

SPI协议

SPI(Serial Peripheral Interface)是一种同步串行通信协议,用于在嵌入式系统中连接微控制器(MCU)和外围设备(如传感器、存储器、显示器等)。SPI协议需要4根线进行数据传输,分别是:

● SCLK:时钟信号线,由主设备控制时序,用于同步数据传输。

● MOSI:主设备输出从设备输入线,主设备通过该线向从设备发送数据。

● MISO:主设备输入从设备输出线,从设备通过该线向主设备发送数据。

● SS:从设备片选线,用于选择与主设备通信的从设备。(其他叫法CS)

SPI协议支持全双工通信,意味着主设备和从设备可以同时发送和接收数据。SPI协议传输数据时采用的是先进先出的方式。

标准的SPI总共有4根线,包括:SCLK(时钟线)、MOSI(主机输出从机输入线)、MISO(主机输入从机输出线)和SS(片选线)。但是在实际的应用中,可能会根据需要添加其他的辅助信号线,如数据就绪信号等。因此,SPI的具体实现方式可能会有所不同。

SPI协议中的DC线是指数据/命令线(Data/Command line),有时也称作RS线(Register Select line)。它是用来控制从主设备到从设备传输的数据是命令还是普通数据的信号线。在许多液晶显示屏、OLED屏幕、触摸屏等设备中,SPI总线上的DC线通常用于指示传输的数据是图像数据还是命令数据,以便设备能够正确地解析和处理数据

SPI通讯的时序是由主设备(Master)发起的,在数据传输的过程中,需要进行时序的协调,具体流程如下:

● 主设备(Master)通过片选信号(Slave Select)选择通信的从设备(Slave)。

● 主设备(Master)向从设备(Slave)发送时钟信号(SCLK),并将数据从输出口(MOSI)发送到从设备(Slave)的输入口(MISO)。

● 从设备(Slave)在每个时钟脉冲的下降沿采样输入口(MISO)的数据,并将数据从输出口(MOSI)发送回主设备(Master)的输入口(MISO)。

● 当传输完成后,主设备(Master)取消片选信号(Slave Select),从设备(Slave)被释放。

具体的通讯流程时序可以根据实际应用情况进行调整,例如可以调整时钟信号的极性和相位、选择合适的时钟频率等。

原理图



字库芯片

字库芯片是一种专门用于储存字符或汉字等字形信息的存储器芯片。它通过将不同的字形编码储存在内部存储器中,提供了一种快速、高效的方法来支持文本显示。使用字库芯片,可以避免在应用程序中占用过多的内存空间,并且可以提高文本显示的速度和准确性。 字库芯片通常包含标准的字形、符号和汉字,而且支持多种字体和字号的显示。

字库芯片采用的也是SPI协议进行通讯。

中文显示屏原理

由显示屏和中文字库芯片组成。

  1. 显示屏接外接电路采用SPI模式显示
  2. 中文字库采用SPI进行访问

标准的SPI协议包含:

● SCLK: 时钟频率

● MOSI:Master Out Slave In,主设备给从设备传递数据

● MISO:Master In Slave Out, 主设备接收从设备的数据

● SS: Slave Select, 选择从设备,片选。spi是单独通讯,一次只能和一个芯片进行通讯,通过ss进行片选。

SPI SSD1306显示屏,只负责显示,只用到了标准协议的一些规定引脚,也做了一些扩展:

● SPI_CLK: 对应标准协议中的SCLK。

● SPI_MOS: 对应标准协议中的MOSI

● SPI_DC: 为扩展,自定义的数据命令引脚,非标准。

● SPI_CS1: 对应标准协议中的ss。但是多个slave时,每个对应一个片选引脚。

中文字符芯片,采用的也是SPI:

● SPI_CLK: 对应标准协议中的SCLK。

● SPI_MOS: 对应标准协议中的MOSI

● SPI_FSO: 对应标准协议中的MISO

● SPI_CS2: 对应标准协议中的ss。但是多个slave时,每个对应一个片选引脚。

整个系统中,用到了SPI协议,同时有两个从设备,他们共用了一些引脚。

API的使用

csharp 复制代码
void OLED_Display_128x64(u8 *dp);
void OLED_Display_16x16(u8 x,u8 y,u8 *dp);
void OLED_Display_8x16(u8 x,u8 y,u8 *dp);
void OLED_Display_5x7(u8 x,u8 y,u8 *dp);
void OLED_Display_GB2312_string(u8 x,u8 y,u8 *text);
void OLED_Display_string_5x7(u8 x,u8 y,u8 *text);
void OLED_ShowNum(u8 x,u8 y,float num,u8 len);
相关推荐
然后,是第八天21 分钟前
platformio使用使用pioarduino流程
单片机
糖糖单片机设计31 分钟前
基于 STM32 + LU-ASR01 的智能台灯
stm32·单片机·嵌入式硬件·51单片机·语音识别
en.en..42 分钟前
Keil 文件管理避坑(基于 STM32F4 HAL 通用模板讲解)
单片机·嵌入式硬件
女神下凡3 小时前
芯参谋(87):Linux 系统(SPI NOR)驱动开发指南
linux·运维·arm开发·驱动开发·嵌入式硬件·设计规范
起个网名真难~13 小时前
STM32F103_Bootloader_从零到UART升级成功_博客原稿
stm32·单片机·嵌入式硬件
二本咕咕-机械转码14 小时前
FreeRTOS深入解析(一)_链表与并发保护——哨兵循环链表、排序键游标、临界区与关调度
单片机·算法·链表
Zwawa15 小时前
串口命令如何从字符串长成协议:帧头、长度、校验和与状态机
c语言·单片机·嵌入式
小李不想当小白15 小时前
BKP备份寄存器与RTC实时时钟(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
铅笔小新z21 小时前
【stm32】WWDG(窗口看门狗)
stm32·单片机·嵌入式硬件
comyccccc1 天前
平衡车底板设计:精准布局与高效布线学习笔记
单片机·嵌入式硬件