嵌入式进阶——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);
相关推荐
Jcenav7 小时前
OCXO外围电路设计指南
单片机·嵌入式硬件
Nautiluss7 小时前
一起玩XVF3800麦克风阵列(八)
大数据·人工智能·嵌入式硬件·github·音频·语音识别
神圣的大喵7 小时前
平台无关的嵌入式通用按键管理器
c语言·单片机·嵌入式硬件·嵌入式·按键库
三佛科技-134163842127 小时前
FT8353系列(FT8353A/B/C/CD/DD/K/KD/PD)隔离型LED恒流驱动IC芯片 典型应用电路
单片机·物联网·智能家居·pcb工艺
阿拉斯攀登9 小时前
嵌入式-硬件基础:了解三极管
单片机·嵌入式硬件·三极管
逐步前行9 小时前
C51_74HC165并口转串口
单片机·51单片机
HarrySunCn9 小时前
如何使用VSCode开发Arduino项目
ide·vscode·单片机·编辑器
嵌入式的飞鱼10 小时前
SD NAND 焊接避坑指南:LGA-8 封装手工焊接技巧与常见错误
人工智能·stm32·单片机·嵌入式硬件·tf卡
三佛科技-1341638421210 小时前
LN8K05A/B/C_5V非隔离AC-DC电源芯片 典型应用场景、典型电路、与阻容降压的对比分析
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
ACP广源盛1392462567310 小时前
GSV6155@ACP#6155产品规格详解及产品应用分享
嵌入式硬件·计算机外设·音视频