目录

一、温湿度的采集

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显示屏显示数据相关推荐

  1. 基于STM32的0.96寸OLED显示屏显示数据和滚动显示

    文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...

  2. 基于STM32F103C8T6的0.96寸OLED显示屏显示数据

    一.了解SPI(串行外设接口) SPI全称是Serial Perripheral Interface,也就是串行外围设备接口.SPI是Motorola公司推出的一种同步串行接口技术,是一种高速,全双工 ...

  3. STM32的0.96寸OLED显示屏显示数据

    目录 一.SPI 1.简介 2.工作模式 3.通讯引脚 二.用0.96OLED显示数据 1.OLED原理简介 三.OLED显示实验 (1).实验目的 (2).实验实现 1.显示学号和姓名 2.显示AH ...

  4. 基于STM32的0.96寸OLED显示屏显示汉字+数字

    文章目录 一.SPI协议 1.什么是SPI协议 2. SPI 协议的物理层和协议层 二.0.96寸OLED屏 三.使用OLED屏显示数据 1.下载程序 2.打开工程 3.部分代码 4.编译并烧录 5. ...

  5. 总结一下嵌入式OLED显示屏显示中文汉字的办法

    为什么80%的码农都做不了架构师?>>>    这个问题以为很简单,但最后花很多功夫才能完成,所以总结一下分享给大家. 解决思路 UTF-8->Unicode->GB23 ...

  6. 基于STM32的0.96寸OLED显示屏显示固定数据、滑动数据、温湿度数据

    目录 OLED显示原理 一.实验工具 二.OLED显示固定数据 1.显示数据相关函数 2.main函数 3.总显示函数 4.取字模 5.实现效果如下: 三.OLED实现滑动显示数据 1.添加滑动命令 ...

  7. 基于stm32的OLED显示屏显示

    文章目录 一.内容 二.关于SPI 三.关于OLED 四.功能实现 1)实验准备 2)代码准备 1.显示学号和姓名 2.显示AHT20的温度和湿度 3.滑动显示长字符 3)结果展示 五.参考内容 六. ...

  8. stm32学习记录之0.96寸OLED显示屏配置

    目录 0.96寸oled屏概述 工程实现 GPIO初始化 SSD1306 初始化 启动与停止函数 各个功能函数 0.96寸oled屏概述 本次实验所用oled显示屏为黄蓝屏,即屏上1/4 部分为黄光, ...

  9. STM32读取DS18B20温度,并在OLED上显示

    部分代码来源于网络,侵权删 本文使用硬件:STM32F103C8T6最小系统板.IIC协议0.96寸OLED屏幕显示.DS18B20传感器 实现功能:在OLED上显示出DS18B20采集到的温度,精确 ...

最新文章

  1. PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的。 检查Oracle服务器端字符编码,用 sel
  2. 启帆工业机器人综合收入如何_发那科工业机器人ROBOGUIDE如何更方便的查看机器人报警日志...
  3. 急速收藏:4套iOS SDK的H5打通方案
  4. java如何忽略过程值_如果值为null,如何告诉Jackson在序列化期间忽略某个字段?...
  5. 开博了,喜欢这里的气氛
  6. 1221. 分割平衡字符串
  7. select poll epoll
  8. 摄像头成像数据可见窗口计算
  9. [备查]SPQuery 返回所有的项目(查询不生效)的问题
  10. Linux程序设计-1-Linux基础
  11. cad的dwg文件转html文件,dwg转dwf文件怎么打开?
  12. 概率论 方差公式_2020考研数学:概率论核心考点与常见题型(上)
  13. 歌词模拟项目c语言,C语言之歌词解析
  14. 【Python 项目】02 微信定时发送消息
  15. XT.COM直播间第109期 | CDT XT.COM AMA 专场
  16. mars老师Java教程百度网盘,你一定不能错过
  17. 2.4GHz WiFi速率测试指导及Omnipeek 空口log分析
  18. office官网用户名密码
  19. jQuery JSON jPlayer实现QQ空间音乐查询
  20. 使用es6--对象数组的多种去重方式

热门文章

  1. 交互式视频h5_H5P:用于创建HTML5交互式内容的CMS插件
  2. 7-13 愿天下有情人都是失散多年的兄妹 (25 分)
  3. 货币金融学(1): 货币/ 信用/ 金融机构
  4. 楚留香手游服务器维护,楚留香手游3月1日更新全职业调整一览 6门派职业调整汇总...
  5. 手机里的照片删了怎么恢复
  6. Linux操作系统学习
  7. Python 创建加密压缩文件
  8. Excel VBA 代替Sumproduct实现多条件求和
  9. Copy Elision
  10. 次氯酸钠发生器选型依据,再也不怕选不对设备了