OLED的SPI接口数据显示

本文介绍了SPI总线协议,对比了SPI、I2C、UART三种串行总线协议的区别。进行了OLED数据显示实验,包括显示学号、姓名、AHT20的温湿度和长字符等。实验通过SPI总线实现通信,用OLED屏显示数据,还分享了实验中遇到的问题及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

(1)SPI简介

SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave). 一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作。

  • 选择4线制SPI总线接口,所有的引脚都需要使用;
  • 选择3线制SPI总线接口,只有DC引脚不需要使用(可以不接),其他引脚都需要使用;
  • 选择IIC总线接口,只需要使用GND、VCC、D0、D1这四个引脚,同时将RES接高电平(可以接VCC),DC和CS接电源地
    在这里插入图片描述

(2)SPI、I2C、UART三种串行总线协议的区别

  • SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现 多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
  • 通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可
  • I2C总线是双向、两线(SCL、SDA)、串行、多主控(mulTI-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
    在这里插入图片描述

二、OLED数据显示实验

(1)实验要求

  • 1、显示学号和姓名
  • 2、显示AHT20的温度和湿度
  • 3、显示长字符,如“欢迎进入信息科学与工程学院,我是通信三班**同学”

(2)实验过程

  • 汉字取模软件,打开界面如下:
    在这里插入图片描述
  • 相关配置
    在这里插入图片描述
  • 生成自己想要的字模
    在这里插入图片描述
  • 在文件中修改字模
    在这里插入图片描述
    分析:为什么我知道在这里来修改字模呢?大家可以在主函数中一步一步Go to Definition,自然知道怎么修改
  • 学号姓名的显示
//****显示学号****
void TEST_Number_Character(void) 
{
	GUI_ShowString(10,16,"631807030403",16,1);
	delay_ms(1500);
}
//****显示姓名****
void TEST_Chinese(void)
{	
	GUI_ShowCHinese(32,20,16,"陈林",1);
	delay_ms(1000);
}
  • 温度显示
void Show_tem(int c1,int t1)
{
	GUI_ShowString(8,32,"湿度: ",16,1);
	GUI_ShowNum(48,32,c1,2,16,1);
	GUI_ShowString(64,32,"%",16,1);
	GUI_ShowString(8,48,"温度: ",16,1);
	GUI_ShowNum(48,48,t1,2,16,1);
	GUI_ShowCHinese(64,48,16,"℃",1);
}
  • 长字符串平滑的滑动
void OLED_Display_scroll(void)
{
    OLED_WR_Byte(0x2e,OLED_CMD);//关滚动
    OLED_WR_Byte(0x2a,OLED_CMD);//29向右,2a向左(垂直水平滚动)
    OLED_WR_Byte(0x00,OLED_CMD);//A:空字节
    OLED_WR_Byte(0x00,OLED_CMD);//B:水平起始页
    OLED_WR_Byte(0x00,OLED_CMD);//C:水平滚动速度
    OLED_WR_Byte(0x07,OLED_CMD);//D:水平结束页
    OLED_WR_Byte(0x01,OLED_CMD);//E:每次垂直滚动位移
	  OLED_WR_Byte(0x2f,OLED_CMD);//开滚动
}

(3)实验结果展示

  • 姓名学号:在这里插入图片描述
  • 长字符显示:在这里插入图片描述
  • 温度:
    在这里插入图片描述

三、总结

  • 此次实验是通过SPI总线实现通信,通过OLED屏显示数据,包括对学号的显示,显示AHT20模块测得的温湿度,和长字符串的显示,实验总的来说比较简单。
  • 注意:
    (1)我在实验显示的时候遇到了一个小问题,在显示自己名字的时候我只能显示上半部分,通过与标准代码对比之后我发现,在oledfront.h函数中需要改一下字符的格式
    (2)可能在显示学号的时候可能会遇到一个数字过大而不能正确显示的情况,这里我采用的办法是把学号当成字符串处理。

四、参考文献

[1]SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍,以及SPI接口详解
[2]OLED代码详细解析
[3]OLED引脚说明
[4]取模软件链接
提取码:itv6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值