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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于I2C/SPI的温湿度采集与OLED显示 -> 正文阅读

[嵌入式]基于I2C/SPI的温湿度采集与OLED显示

一、概念相关

1.SPI是什么

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。

2.SPI协议

SPI总线是一种4线总线,因其硬件功能很强,所以与SPI有关的软件就相当简单,使中央处理器(Central Processing Unit,CPU)有更多的时间处理其他事务。正是因为这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。SPI是一种高速、高效率的串行接口技术。
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,从设备使能信号,由主设备控制。

二、0.96寸OLED显示屏显示

1.显示汉字及数字

(1)准备工作

①工具:keil + STM32F103C8最小开发版 + 0.96寸OLED显示屏
②DEMO程序:下载链接
③串口连线(按照下表对应连接即可):
在这里插入图片描述
④字模准备
需要使用PCtoLCD2002工具,直接在网上搜索下载即可。
打开软件即可进行字模的生成,但是需要注意修改设置。
在这里插入图片描述
在这里插入图片描述

(2)代码修改

由于使用的样本代码,并没有STM32F103C8这个种类,就用同一个系列的STM32F103RC。
在这里插入图片描述
打开gui.c里的oledfont.h文件,可以在这里增加自己定义的字模。
在这里插入图片描述
定义函数

void TEST_MainPage(void)
{	
	GUI_ShowCHinese(28,24,16,"狴鲲",1);//显示中文名
	GUI_ShowString(4,48,"111222333444",16,1);//显示学号
	delay_ms(1500);		
	delay_ms(1500);
}

main函数

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

(3)运行结果

在这里插入图片描述

2.字符滚动

(1)代码修改

水平左右滚动

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);        //开启滚动

main函数

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);        //开启滚动
	}

数据定义

void TEST_MainPage(void)
{	
	GUI_ShowCHinese(10,0,16,"帝王将相几抔土",1);
	delay_ms(1500);		
	delay_ms(1500);
}

(2)运行结果

不会有人这么晚了才交作业吧

3.配合AHT20显示温度和湿度

1.准备工作

①导入文件:将上面OLED显示的文件导入AHT20的代码文件内
在这里插入图片描述
②同时在keil内也需要导入

(2)代码修改

增加show_info函数,将信息显示到OLED屏上

void show_info(){
	GUI_ShowCHinese(10,10,16,"温湿度显示",1);
	
  GUI_ShowString(5,50,"温度:",16,1);
	GUI_ShowNum(40,50,T1/100,1,16,1);
	GUI_ShowNum(49,50,(T1/10)%10,1,16,1);
	GUI_ShowString(56,50,".",16,1);
	GUI_ShowNum(58,50,T1%10,1,16,1);
	
	GUI_ShowString(70,50,"湿度:",16,1);
	GUI_ShowNum(100,50,H1/100,1,16,1);
	GUI_ShowNum(109,50,(H1/10)%10,1,16,1);
	GUI_ShowString(116,50,".",16,1);
	GUI_ShowNum(118,50,H1%10,1,16,1);
}

main函数

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();//读取温湿度
		show_info();//显示
		delay_ms(5000);//延时
		OLED_Clear(0);//清屏
		read_AHT20_once();//读取温湿度
		show_info();
		delay_ms(5000);
		OLED_Clear(0);
		
  }
}

(3)运行结果

下次再晚交作业我就去操场倒立

三、总结

本次实验学会了如何使用OLED进行字符的显示,学会了如何利用AHT20配合OLED进行温湿度显示。

参考链接

SPI (SPI协议)
基于STM32的温湿度采集——OLED显示

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:46:40  更:2021-11-30 15:47:01 
 
开发: 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:25:40-

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