嵌入式进阶——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);
相关推荐
熙芯XiChip5 分钟前
硬实时与软实时RTOS核心区别
嵌入式硬件
伟大的前程21 分钟前
unsigned int 定义的变量 在 电脑的 64 位系统中 和 32 位 cortex-m0 和 8 位的 51 单片机
单片机·嵌入式硬件
小渔村的拉线工38 分钟前
1.HPM6E80 解析芯片整体工作原理和存储架构
单片机·嵌入式硬件·mcu·架构·hpm6e80
熙芯XiChip2 小时前
CAN与CANopen的本质区别
单片机
lilihewo2 小时前
Altium Designer 封装库的创建(分享pcb 3D封装库)
嵌入式硬件·51单片机
神罚天下ET3 小时前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
碧海银沙音频科技研究院4 小时前
蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法
嵌入式硬件·算法
Zevalin爱灰灰4 小时前
模拟信号链电路——基于TL431的电压基准电路
单片机·嵌入式硬件
csdn杰哥5 小时前
瑞萨单片机开发教程[二十七] DTC 外部中断触发传输实验
单片机·嵌入式硬件·mongodb·瑞萨·ra6m5
zcmodeltech5 小时前
农业教学实训沙盘物联网控制系统设计:基于STM32与Modbus RTU的“感知-控制-实训”一体化方案
分布式·stm32·嵌入式硬件·物联网