基于I2C的AHT20温度采集器使用及SPI协议下的OLED显示

一. 相关知识

1.1 关于I2C协议

I2C 通讯协议 (Inter - Integrated Circuit) 是由 Phiilps 公司开发的,由于它引脚少,硬件实
现简单,可扩展性强,不需要 USART 、 CAN 等通讯协议的外部收发设备,现在被广泛地
使用在系统内多个集成电路 (IC) 间的通讯。

1.2 关于SPI协议

SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface) ,即串行外围设
备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC 、 LCD 等设备与 MCU 间,
要求通讯速率较高的场合。

通讯的起始和停止信号
在图 25-2 中的标号① 处, NSS 信号线由高变低,是 SPI 通讯的起始信号。 NSS 是每个从机各自独占的信号线,当从机在自己的 NSS 线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。在图中的标号⑥ 处, NSS 信号由低变高,是 SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

数据有效性
SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步。 MOSI 及MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。数据传输时, MSB 先行或 LSB 先行并没有作硬性规定,但要保证两个 SPI 通讯设备之间使用同样的协定,一般都会采用图 25-2 中的 MSB 先行模式。

1.3 OLED屏的滚动

  • 水平左右移
OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动
OLED_WR_Byte(0x26,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);        //虚拟字节
OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动
  • 垂直和水平滚动
OLED_WR_Byte(0x2e,OLED_CMD);        //关闭滚动
OLED_WR_Byte(0x29,OLED_CMD);        //水平垂直和水平滚动左右 29/2a
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);        //终止页 1
OLED_WR_Byte(0x01,OLED_CMD);        //垂直滚动偏移量
OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动

二. 温度采集

2.1 完整代码

链接:https://pan.baidu.com/s/1TZNBqkWH_aRGktK8Wk8cTA
提取码:qwer

2.2 打开工程

在这里插入图片描述

2.3 烧录结果

生成HEX文件后发送到上位机,随后调制助手会显示传感器传来的温度和湿度的数据;对传感器哈几口气,发现:温度显示明显上升,湿度上升到接近90
不过,呜呜呜,视频被俺误删了,有机会再补上。

三. 温度显示

3.1 完整代码

链接:https://pan.baidu.com/s/1vawtPaudZmzuWdMjImrF3Q
提取码:qwer

3.2 具体操作

3.2.1 字模软件下载

3.2.2 字模软件设置

设置如下图所示
行前缀的括号去掉
行后缀的括号去掉,保留逗号

在这里插入图片描述

3.2.3 生成并保存字模

在这里插入图片描述

3.2.4 修改eoldfont文件

修改文件夹下文件 HARDWARE/OLED/oledfont.h
由于是生成的16*16得中文字模,故生成的内容放在对应的位置,如下图示

在这里插入图片描述

添加内容

在这里插入图片描述

3.2.5 修改test函数

在这里插入图片描述

3.3 结果

烧录结果

在这里插入图片描述

四. 信息滚动播放

4.1 修改main函数

进行滚动相关的设置

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
int main(void)
{	
	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);        //开启滚动
	while(1) 
	{	
		
	}
}

4.2 修改test.c

在这里插入图片描述

4.3 字模相关操作

此处字模的操作同上,在此不再赘述

  • 注意!!!字模软件进入后,设置被清空了,需要从新设置一次,并注意选择C51格式

在这里插入图片描述

4.4 结果

编译后烧录Hex文件的结果

在这里插入图片描述

五. 总结

此次实验是利用oled屏幕进行相关的显示,由于有许多大佬提前铺好了路,很多东西不需要自己调整,只需要设置要显示的内容就行了。感觉还是很好玩的,不过,后面再认真学习其背后的东西,想来就不会这么顺利完成了。总之,还有许多需要学习的东西。

参考博客:
https://blog.csdn.net/qq_60678931/article/details/121410035?spm=1001.2014.3001.5501

版权声明:本文为CSDN博主「Melon-Youth」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46112781/article/details/121504505

生成海报
点赞 0

Melon-Youth

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐