使用STM32F103的SPI或IIC接口实现OLED屏显示各种内容

本文介绍了如何使用STM32F103通过SPI或IIC接口驱动OLED显示屏,展示了如何显示姓名、学号、AHT20传感器的温度和湿度数据,以及实现字符滚动显示。详细步骤包括SPI接口原理、显示汉字点阵编码、代码修改和效果展示。
摘要由CSDN通过智能技术生成

一、任务

理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能:

  1. 显示自己的学号和姓名;
  2. 显示AHT20的温度和湿度;
  3. 上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者一段歌词或诗词(使用硬件刷屏模式)。

PCtoLCD2002生成字模以及软件的下载请看以下链接内容

https://blog.csdn.net/weixin_51755670/article/details/118076488?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-118076488-blog-123810825.pc_relevant_landingrelevant&spm=1001.2101.3001.4242.3&utm_relevant_index=7

二、SPI(串行外设接口)

SPI(Serial Peripheral Interface)就是串行外围设备接口。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚。SPI 是一个环形总线结构,由 ss(cs)scksdisdo 构成,时序主要是在 sck 的控制下,两个双向移位寄存器进行数据交换。
上升沿发送、下降沿接收、高位先发送。
上升沿到来的时候,sdo 上的电平将被发送到从设备的寄存器中。
下降沿到来的时候,sdi 上的电平将被接收到主设备的寄存器中。
在这里插入图片描述
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是MISO(主设备数据输入)MOSI(主设备数据输出)SCLK(时钟)CS(片选)
(1)MISO– Master Input Slave Output,主设备数据输入,从设备数据输出;
(2)MOSI– Master Output Slave Input,主设备数据输出,从设备数据输入;
(3)SCLK – Serial Clock,时钟信号,由主设备产生;
(4)CS – Chip Select,从设备使能信号,由主设备控制。
其中,CS是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。这就使在同一条总线上连接多个SPI设备成为可能。
SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
SPI接口
一个标准的SPI连接涉及到一个主机master使用串行时钟(SCK)、主输出从输入(MOSI)、主输出从输出(MISO)和从选择(SS)线连接到一个或几个从机slave。SCK、MOSI和MISO信号可以由从机slave共享,而每个从机slave都有一条唯一的SS线。
在这里插入图片描述
SS( Slave Select):从设备选择信号线,常称为片选信号线。
SCK (Serial Clock):时钟信号线,用于通讯数据同步。
MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。
MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。

SPI的通讯过程

在这里插入图片描述
MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。

SPI 总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK一条数据输出线MOSI一条数据输入线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束 中断标志;写冲突保护;总线竞争保护等。下图示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式 (实线表示):
在这里插入图片描述
SPI接口时序
SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;SPI主模块和与之通信的外设时钟相位和极性应该一致。SPI接口时序如图所示:
在这里插入图片描述
百度百科上也有相关SPI协议的举例。

准备

1、下载程序

http://www.lcdwiki.com/res/Program/OLED/0.96inch/SPI_SSD1306_MSP096X_V1.0/0.96inch_SPI_OLED_Module_SSD1306_MSP096X_V1.0.zip

2、打开资料包,选择与自己平台相同的实例,打开Demo的工程,使用keil编译
3、连接显示屏和开发板
在这里插入图片描述

三、显示自己的姓名和学号

1、打开文字取模工具
在这里插入图片描述
2、将下面的汉字点阵编码放入oledfont.h中,
找不到该文件可以右击头文件,点击Open document “oledfont.h”
在这里插入图片描述

在这里插入图片描述
编写显示函数

void TEST_MainPage(void)
{
   	
	GUI_ShowCHinese(28,20,16,"丁欣茹",1);//中文姓名
	GUI_ShowString(4,48,"632007060114",16,1);//数字详细
	delay_ms(1500);		
	delay_ms(1500);
}

修改main函数

int main(void)
{
   	
	delay_init();	    	       //延时函数初始化	  
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	while(1) 
	{
   	
		TEST_MainPage();         //界面显示
	}
}

效果展示
在这里插入图片描述

四、显示AHT20的温度和湿度

在上一篇博客AHT20采集温湿度的代码上添加OLED显示的相关代码
相关文件后面会给出链接。
1、文字取模
在这里插入图片描述
在这里插入图片描述
2、修改代码
main.c


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值