STM32分别实现温湿度的采集和OLED显示屏显示数据
目录
一、温湿度的采集
1.1了解I2C总线协议
1.2实现AHT20采集程序
二、OLED显示屏显示数据
2.1了解SPI
2.2使用OLED显示
2.2.1实验题目:
2.2.2实验过程
三、总结
四、参考资料
一、温湿度的采集
1.1了解I2C总线协议
由于本次的温湿度采集需要通过I2C接口实现,所以我们先来了解一下I2C总线协议
从图中我们可以看出呢,I2C总线的特点:
1.它是由两根线组成的,一根叫SCL(串行时钟线),一根叫SDA(串行数据线)。线少,好处自然不用多说咯,但是速度肯定就慢了,用作外设之间的数据接口够用了。而快速的芯片内部通信,用的是AMBA总线通信,想了解的自己查一下,或者过几天我研究后再写。
2.每颗I2C芯片呢都可以作为主机和从机,但一次通行中只允许存在一个主机。
I2C总线存在三种状态:
1.空闲
2.工作开始
3.工作停止
先说空闲状态:当SCL与SDA同时为高电平时,为空闲态,说白了,就啥也不干。如下图:
再说说开始工作状态,此时SCL为高,而SDA出现下降沿,如下图:
最后就是停止工作状态,此时SCL为高,SDA出现上升沿,如下图:
1.2实现AHT20采集程序
串口调试助手可以自己随机选择下载,这里用的是野火串口调试助手
主要代码:
AHT20芯片的使用过程:
void read_AHT20_once(void)
{delay_ms(10);reset_AHT20();//重置AHT20芯片delay_ms(10);init_AHT20();//初始化AHT20芯片delay_ms(10);startMeasure_AHT20();//开始测试AHT20芯片delay_ms(80);read_AHT20();//读取AHT20采集的到的数据delay_ms(5);
}
AHT20芯片读取数据:
void read_AHT20(void)
{uint8_t i;for(i=0; i<6; i++){readByte[i]=0;}I2C_Start();//I2C启动I2C_WriteByte(0x71);//I2C写数据ack_status = Receive_ACK();//收到的应答信息readByte[0]= I2C_ReadByte();//I2C读取数据Send_ACK();//发送应答信息readByte[1]= I2C_ReadByte();Send_ACK();readByte[2]= I2C_ReadByte();Send_ACK();readByte[3]= I2C_ReadByte();Send_ACK();readByte[4]= I2C_ReadByte();Send_ACK();readByte[5]= I2C_ReadByte();SendNot_Ack();//Send_ACK();I2C_Stop();//I2C停止函数//判断读取到的第一个字节是不是0x08,0x08是该芯片读取流程中规定的,如果读取过程没有问题,就对读到的数据进行相应的处理if( (readByte[0] & 0x68) == 0x08 ){H1 = readByte[1];H1 = (H1<<8) | readByte[2];H1 = (H1<<8) | readByte[3];H1 = H1>>4;H1 = (H1*1000)/1024/1024;T1 = readByte[3];T1 = T1 & 0x0000000F;T1 = (T1<<8) | readByte[4];T1 = (T1<<8) | readByte[5];T1 = (T1*2000)/1024/1024 - 500;AHT20_OutData[0] = (H1>>8) & 0x000000FF;AHT20_OutData[1] = H1 & 0x000000FF;AHT20_OutData[2] = (T1>>8) & 0x000000FF;AHT20_OutData[3] = T1 & 0x000000FF;}else{AHT20_OutData[0] = 0xFF;AHT20_OutData[1] = 0xFF;AHT20_OutData[2] = 0xFF;AHT20_OutData[3] = 0xFF;printf("读取失败!!!");}printf("\r\n");//根据AHT20芯片中,温度和湿度的计算公式,得到最终的结果,通过串口显示printf("温度:%d%d.%d",T1/100,(T1/10)%10,T1%10);printf("湿度:%d%d.%d",H1/100,(H1/10)%10,H1%10);printf("\r\n");
}
结果显示:
二、OLED显示屏显示数据
2.1了解SPI
ISP全称Image Signal Processing,即图像信号处理。主要用来对前端图像传感器输出信号处理的单元,以匹配不同厂商的图象传感器。ISP 通过一系列数字图像处理算法完成对数字图像的效果处理
ISP 的控制结构如图所示,lens 将光信号投射到sensor 的感光区域后,sensor 经过光电转换,将Bayer 格式的原始图像送给ISP,ISP 经过算法处理,输出RGB 空间域的图像给后端的视频采集单元。在这个过程中,ISP 通过运行在其上的firmware 对ISP逻辑,lens 和sensor 进行相应控制,进而完成自动光圈、自动曝光、自动白平衡等功能。其中,firmware 的运转靠视频采集单元的中断驱动。PQ Tools 工具通过网口或者串口完成对ISP 的在线图像质量调节。
ISP 由ISP 逻辑及运行在其上的Firmware 组成,逻辑单元除了完成一部分算法处理外,还可以统计出当前图像的实时信息。Firmware 通过获取ISP 逻辑的图像统计信息,重新计算,反馈控制lens、sensor 和ISP 逻辑,以达到自动调节图像质量的目的。
2.2使用OLED显示
2.2.1实验题目:
2. 理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能:
1) 显示自己的学号和姓名;
2) 显示AHT20的温度和湿度;
3) 上下或左右的滑动显示长字符,比如“Hello,欢迎来到物联网205实训室!”或者一段歌词或诗词(最好使用硬件刷屏模式)。
2.2.2实验过程
下载官方的资料:(里面有工程)
0.96inch SPI OLED Module - LCD wiki
工程在这里,选择自己所用的芯片即可:
打开后找到oledfont.h (注意:工程需要编译了之后才会出现.h文件,打开工程先编译)
在如图的函数里复制粘贴你想写的东西,但在此之前需要字模的转换
字模的转换可以用PCtoLCD2002完美版,转换前记得设置选择,选C51
然后去test.c中找到void TEST_MainPage(void)然后输入:
void TEST_MainPage(void)
{ GUI_ShowString(28,0,"xuqian",16,1);//英文姓名GUI_ShowCHinese(28,20,16,"徐茜",1);//中文姓名GUI_ShowString(4,48,"631907030727",16,1);//数字详细delay_ms(1500); delay_ms(1500);
}
接线如下,注意烧程序的时候跳线帽是01:
连好线之后烧录程序后拔掉usb,将跳线帽改成00,再将usb接上电脑即可:
之后的滑动显示长字符也和上面的操作差不多,先取字模然后改test.c,最后因为需要滑动的效果,还需要在main.c中合适位置加上 OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动
三、总结
这次的温湿度和OLED的实验让我了解到了I2C总线协议和ISP,这两个实验的代码其实都很开源,网上找找就有,算是验证性实验,在OLED的时候字模和有一些代码需要改成自己想显示的字,还有一些小细节需要注意就好了。
四、参考资料
I2C总线协议详解 - Jamesjiang2050 - 博客园 (cnblogs.com)
温湿度采集的代码参考:GitHub - Sunlight-Dazzling/stm32-AHT20 at master
(62条消息) stm32通过I2C接口实现温湿度(AHT20)的采集_Harriet的博客-CSDN博客(62条消息) stm32通过I2C接口实现温湿度(AHT20)的采集_Harriet的博客-CSDN博客
(62条消息) ISP概述、工作原理及架构_一个人的红尘-CSDN博客
(62条消息) STM32Mini基于SPI接口的0.96寸OLED屏数据显示_CHL的博客-CSDN博客
STM32分别实现温湿度的采集和OLED显示屏显示数据相关推荐
- 基于STM32的0.96寸OLED显示屏显示数据和滚动显示
文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...
- 基于STM32F103C8T6的0.96寸OLED显示屏显示数据
一.了解SPI(串行外设接口) SPI全称是Serial Perripheral Interface,也就是串行外围设备接口.SPI是Motorola公司推出的一种同步串行接口技术,是一种高速,全双工 ...
- STM32的0.96寸OLED显示屏显示数据
目录 一.SPI 1.简介 2.工作模式 3.通讯引脚 二.用0.96OLED显示数据 1.OLED原理简介 三.OLED显示实验 (1).实验目的 (2).实验实现 1.显示学号和姓名 2.显示AH ...
- 基于STM32的0.96寸OLED显示屏显示汉字+数字
文章目录 一.SPI协议 1.什么是SPI协议 2. SPI 协议的物理层和协议层 二.0.96寸OLED屏 三.使用OLED屏显示数据 1.下载程序 2.打开工程 3.部分代码 4.编译并烧录 5. ...
- 总结一下嵌入式OLED显示屏显示中文汉字的办法
为什么80%的码农都做不了架构师?>>> 这个问题以为很简单,但最后花很多功夫才能完成,所以总结一下分享给大家. 解决思路 UTF-8->Unicode->GB23 ...
- 基于STM32的0.96寸OLED显示屏显示固定数据、滑动数据、温湿度数据
目录 OLED显示原理 一.实验工具 二.OLED显示固定数据 1.显示数据相关函数 2.main函数 3.总显示函数 4.取字模 5.实现效果如下: 三.OLED实现滑动显示数据 1.添加滑动命令 ...
- 基于stm32的OLED显示屏显示
文章目录 一.内容 二.关于SPI 三.关于OLED 四.功能实现 1)实验准备 2)代码准备 1.显示学号和姓名 2.显示AHT20的温度和湿度 3.滑动显示长字符 3)结果展示 五.参考内容 六. ...
- stm32学习记录之0.96寸OLED显示屏配置
目录 0.96寸oled屏概述 工程实现 GPIO初始化 SSD1306 初始化 启动与停止函数 各个功能函数 0.96寸oled屏概述 本次实验所用oled显示屏为黄蓝屏,即屏上1/4 部分为黄光, ...
- STM32读取DS18B20温度,并在OLED上显示
部分代码来源于网络,侵权删 本文使用硬件:STM32F103C8T6最小系统板.IIC协议0.96寸OLED屏幕显示.DS18B20传感器 实现功能:在OLED上显示出DS18B20采集到的温度,精确 ...
最新文章
- PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的。 检查Oracle服务器端字符编码,用 sel
- 启帆工业机器人综合收入如何_发那科工业机器人ROBOGUIDE如何更方便的查看机器人报警日志...
- 急速收藏:4套iOS SDK的H5打通方案
- java如何忽略过程值_如果值为null,如何告诉Jackson在序列化期间忽略某个字段?...
- 开博了,喜欢这里的气氛
- 1221. 分割平衡字符串
- select poll epoll
- 摄像头成像数据可见窗口计算
- [备查]SPQuery 返回所有的项目(查询不生效)的问题
- Linux程序设计-1-Linux基础
- cad的dwg文件转html文件,dwg转dwf文件怎么打开?
- 概率论 方差公式_2020考研数学:概率论核心考点与常见题型(上)
- 歌词模拟项目c语言,C语言之歌词解析
- 【Python 项目】02 微信定时发送消息
- XT.COM直播间第109期 | CDT XT.COM AMA 专场
- mars老师Java教程百度网盘,你一定不能错过
- 2.4GHz WiFi速率测试指导及Omnipeek 空口log分析
- office官网用户名密码
- jQuery JSON jPlayer实现QQ空间音乐查询
- 使用es6--对象数组的多种去重方式
热门文章
- 交互式视频h5_H5P:用于创建HTML5交互式内容的CMS插件
- 7-13 愿天下有情人都是失散多年的兄妹 (25 分)
- 货币金融学(1): 货币/ 信用/ 金融机构
- 楚留香手游服务器维护,楚留香手游3月1日更新全职业调整一览 6门派职业调整汇总...
- 手机里的照片删了怎么恢复
- Linux操作系统学习
- Python 创建加密压缩文件
- Excel VBA 代替Sumproduct实现多条件求和
- Copy Elision
- 次氯酸钠发生器选型依据,再也不怕选不对设备了