IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> AHT20温湿度传感器的数据采集并通过串口输出和OLED屏显示 -> 正文阅读

[嵌入式]AHT20温湿度传感器的数据采集并通过串口输出和OLED屏显示

目录

一.I2C总线通信协议、SPI协议

1.I2C总线简介

1.1 I2C总线的物理层

1.2?I2C总线的协议层

2.软件I2C和硬件I2C

3.SPI协议

二.AHT20温湿度数据采集

1.工程代码

2.下载工程后并打开project

?3.编译加烧录

?4.运行结果

三.OLED显示??

1.显示姓名和学号

2.显示AHT20的温度和湿度?

?3.左右的滑动显示长字符

四、总结

参考文献:


一.I2C总线通信协议、SPI协议

1.I2C总线简介

? ? ?I2C由飞利浦公司于1980年代提出,为了让主板、嵌入式系统或手机用以连接低速周边外部设备而发展。

? ? 主要用途:SOC和周边外设间的通信。

1.1 I2C总线的物理层

? ? I2C总线物理层由两根线组成:串行时钟线SCL、串行数据线SDA。由于这两根线都是开漏输出结构,因此必须都接上拉电阻到高电平,因此当总线处于空闲状态时,两根线都处于高电平状态。下图为I2C总线的物理层示意图:

1.2?I2C总线的协议层

? ? ?I2C 的协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。

I2C基本读写过程

? ? ?起始信号产生后,所有从机就开始等待主机接下来广播的从机地址信号。在 I2C 总线上,每个设备的地址都是唯一的,当主机广播的地址与某个设备地址相同时,这个设备就被选中了,没被选中的设备将会忽略之后的数据信号。根据 I2C协议,这个从机地址可以是 7位或10位。
? ??在地址位之后,是传输方向的选择位,该位为0时,表示后面的数据传输方向是由主机传输至从机,即主机向从机写数据。该位为 1时,则相反,即主机由从机读数据。
? ??从机接收到匹配的地址后,主机或从机会返回一个应答(ACK)或非应答(NACK)信号,
? ??只有接收到应答信号后,主机才能继续发送或接收数据。

通讯的起始和停止信号

???当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通讯的起始。
???当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示通讯的停止。
???起始和停止信号一般由主机产生。

?数据的有效性

? I2C使用SDA信号线来传输数据,使用SCL信号线进行数据同步。 SDA数据线在SCL的每个时钟周期传输一位数据。
? SCL为高电平的时候SDA表示的数据有效,即此时的SDA为高电平时表示数据“1”,为低电平时表示数据“0”。
? 当SCL为低电平时,SDA的数据无效,一般在这个时候SDA进行电平切换,为下一次表示数据做好准备。

若想要更详细的了解I2C的知识,可以参考此链接学习:I2C协议——物理层和协议层_吴立赛的博客-CSDN博客?

2.软件I2C和硬件I2C

软件I2C

直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平,从而模拟I2C。

需要在控制产生 I2C 的起始信号时,控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。

硬件I2C

直接利用 STM32 芯片中的硬件 I2C 外设。

只要配置好对应的寄存器,外设就会产生标准串口协议的时序。在初始化好 I2C 外设后,只需要把某寄存器位置 1,此时外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号,不需要内核直接控制引脚的电平。

3.SPI协议

SPI是一种同步串行通信协议,由一个主设备和一个或多个从设备组成,主设备启动与从设备的同步通信,从而完成数据的交换。SPI是一种高速全双工同步通信总线,标准的SPI仅仅使用4个引脚,主要应用在 EEPROM, Flash, 实时时钟(RTC), 数模转换器(ADC), 数字信号处理器(DSP) 以及数字信号解码器之间。

SPI原理

SPI有3种规格,如图所示为其模型。

3种SPI的处理流程大同小异,使用最多的SPI-4为例来说明SPI的原理。它在发送接口和接收接口都有各自的数据通道和流控状态信息通道,其数据通道和流控状态信息通道是独立的并且是点对点通信。数据是以包的形式发送,根据数据包中的内嵌地址可支持高达256个端口,以下分别说明基本协议及数据通道和流控状态信息的处理过程。

SPI物理层

SS( Slave Select):从设备选择信号线,常称为片选信号线。
SCK (Serial Clock):时钟信号线,用于通讯数据同步。
MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。
MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。

?SPI协议层

?SPI?基本通讯过程??

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

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

数据有效性

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

二.AHT20温湿度数据采集

1.工程代码

工程链接:百度网盘 请输入提取码
提取码:lbai?

main.c

#include "delay.h"
#include "usart.h"
#include "bsp_i2c.h"


int main(void)
{	
	delay_init();    
	uart_init(115200);	 
	IIC_Init();
		while(1)
	{
		printf("温度湿度显示");
		read_AHT20_once();
		delay_ms(1500);
  }
}

2.下载工程后并打开project

?3.编译加烧录

?4.运行结果

???

三.OLED显示??

1.显示姓名和学号

1.1工程代码

工程链接:百度网盘 请输入提取码

提取码:qwer

main.c

#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);             //清屏(全黑)
	while(1) 
	{	
		TEST_MainPage();         //主界面显示测试
		OLED_Clear(0); 
    }
}

1.2打开工程修改代码

打开test.c修改TEST_MainPage函数中GUI_ShowString,GUI_ShowCHinese的参数

?1.3将上面输入的对应的字模点阵加入到oledfont.h里

?1.4汉字取模点阵

首先设置字模输出选项,可以自定义格式?不同的取模方式对应的十六进制码不一样,这里是16X16点阵。

?添加到oledfont.h的16x16中

1.5?编译烧录

?1.6实验效果

2.显示AHT20的温度和湿度?

2.1工程代码

链接:百度网盘 请输入提取码
提取码:qwer

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);
  }
}

2.2编译烧录

?2.3实验效果

?3.左右的滑动显示长字符

3.1工程代码

链接:百度网盘 请输入提取码

提取码:qwer

main.c

#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) 
	{	

	}
}

3.2打开test.c修改TEST_MainPage函数中GUI_ShowCHinese参数

3.3添加字模数据,操作设置与上面相同?

3.4编译烧录?? ?

3.5运行效果 ? ? ? ? ?

四、总结

? 此次实验利用了温度传感器,实现了对温度湿度的测验,最终输出到屏幕上,对于I2C和SPI协议的学习有了一定理解。大致理解OLED屏显和汉字点阵编码原理后,对代码进行编写,然后在OLED屏幕上输出自己想要的字,也是很有趣的一件事。

参考文献:

I2C协议——物理层和协议层_吴立赛的博客-CSDN博客

基于I2C的AHT20温度采集器以及基于SPI协议OLED显示_Laul Ken-Yi的博客-CSDN博客

基于STM32的0.96寸OLED显示屏显示数据_Harriet的博客-CSDN博客_基于stm32的oled显示时间

基于SPI通信方式的OLED显示_不#曾&轻听的博客-CSDN博客

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 08:06:46  更:2021-11-24 08:06:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:48:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码