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

您所在的位置:网站首页 SPI的工作原理 使用STM32F103的SPI或IIC接口实现OLED屏显示各种内容

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

#使用STM32F103的SPI或IIC接口实现OLED屏显示各种内容| 来源: 网络整理| 查看: 265

一、任务

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

显示自己的学号和姓名;显示AHT20的温度和湿度;上下或左右的滑动显示长字符,比如“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)、sck、sdi、sdo 构成,时序主要是在 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

#include "delay.h" #include "usart.h" #include "bsp_i2c.h" #include "sys.h" #include "oled.h" #include "gui.h" #include "test.h" int main(void) { delay_init(); //延时函数初始化 uart_init(115200); IIC_Init(); NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 OLED_Init(); //初始化OLED OLED_Clear(0); while(1) { //printf("温度湿度显示"); read_AHT20_once(); OLED_Clear(0); delay_ms(1500); } }

修改bsp_i2c.c文件中的read_AHT20函数

void read_AHT20(void) { uint8_t i; for(i=0; i H1 = readByte[1]; H1 = (H1 delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 OLED_Init(); //初始化OLED OLED_Clear(0); //清屏(全黑) OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动 OLED_WR_Byte(0x27,OLED_CMD); //水平向左或者右滚动 26/27 OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节 OLED_WR_Byte(0x00,OLED_CMD); //起始页 0 OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔 OLED_WR_Byte(0x07,OLED_CMD); //终止页 7 OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节 OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节 TEST_MainPage(); OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动 }

修改显示函数TEST_MainPage

void TEST_MainPage(void) { GUI_ShowCHinese(10,20,16,"人这种卑鄙的东西,什么都会习惯的",1); delay_ms(1500); delay_ms(1500); }

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

总结

在参考文件的帮助下完成OLED屏显示各种内容没什么问题,但还是需要进一步了解协议内容。

参考链接

https://blog.csdn.net/qq_43279579/article/details/111414037 源代码: https://github.com/aichicaomeide/hello



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3