ARM-IIC实验

要求

设置温度湿度阈值,当温度过高时,打开风扇,蜂鸣器报警
当湿度比较高时,打开LED1灯,蜂鸣器报警

现象视频

IIC.mp4

代码实现

main.c

#include"si7006.h"
#include"led.h"
#include"fan.h"
#include"buzzer.h"//风扇 PE9
//蜂鸣器 PB6
int main()
{//i2c初始化i2c_init();//si7006初始化si7006_init();//风扇初始化fan_init();//蜂鸣器初始化buzzer_init();all_led_init();short tem;unsigned int short hum;while(1){//读取温度数据tem=si7006_read_tem();//读取湿度数据hum=si7006_read_hum();//计算温湿度数据hum=125*hum/65536-6;tem=175.72*tem/65536-46.85;if(hum>=50){LED1_ON();}else{LED1_OFF();}if(tem>=20){fan_on();buzzer_on();}else{fan_off();buzzer_off();}delay(1000);printf("hum:%d\n",hum);printf("tem:%d\n",tem);//串口打印delay(1000);}return 0;
}

fan.c

#include "fan.h"//风扇 PE9
void fan_init()
{//GPIOE时钟使能RCC->MP_AHB4ENSETR  |= (0x1<<4);//PE9设置为输出GPIOE->MODER &= (~(0X3<<18));GPIOE->MODER |= (0X1<<18);//PE9设置为推挽输出GPIOE->OTYPER &= (~(0X1<<9));//PE9设置为低速输出GPIOE->OSPEEDR &= (~(0X3<<9));//PE9无上拉下拉电阻GPIOE->PUPDR &= (~(0X3<<18));//默认输出低电平GPIOE->ODR &= (~(0X1<<9));
}void fan_on()
{GPIOE->ODR |= (0X1<<9);
}void fan_off()
{GPIOE->ODR &= (~(0X1<<9));
}

buzzer.c

#include "buzzer.h"//蜂鸣器 PB6
void buzzer_init()
{//GPIOB时钟使能RCC->MP_AHB4ENSETR  |= (0x1<<1);//PB6设置为输出GPIOB->MODER &= (~(0X3<<12));GPIOB->MODER |= (0X1<<12);//PB6设置为推挽输出GPIOB->OTYPER &= (~(0X1<<6));//PB6设置为低速输出GPIOB->OSPEEDR &= (~(0X3<<12));//PB6无上拉下拉电阻GPIOB->PUPDR &= (~(0X3<<12));//默认输出低电平GPIOB->ODR &= (~(0X1<<6));
}void buzzer_on()
{GPIOB->ODR |= (0X1<<6);
}void buzzer_off()
{GPIOB->ODR &= (~(0X1<<6));
}

si7006.c

#include"si7006.h"
//封装延时函数
void delay(int ms)
{int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++){}}
}
void si7006_init()
{//发起起始信号i2c_start();//发送从机地址+写标志i2c_write_byte(0X40<<1|0);//等待从机应答i2c_wait_ack();//发送寄存器地址 0XE6i2c_write_byte(0XE6);//等待从机应答i2c_wait_ack();//传输要写入的数据0X3A、i2c_write_byte(0X3A);//等待从机应答i2c_wait_ack();//发送终止信号i2c_stop();
}short si7006_read_tem()
{short tem;char tem_h,tem_l;//发起起始信号i2c_start();//发送从机地址+写标志i2c_write_byte(0x40<<1|0);//等待从机应答i2c_wait_ack();//发送寄存器地址  0XE3i2c_write_byte(0xe3);//等待从机应答i2c_wait_ack();//重复起始信号i2c_start();//发送从机地址+读标志i2c_write_byte(0x40<<1|1);//等待从机应答i2c_wait_ack();delay(100);//等待从机测量数据//接收数据高八位//发送应答信号tem_h=i2c_read_byte(0);//接收数据低八位//发送非应答信号tem_l=i2c_read_byte(1);//将高八位和低八位合成一个数据   高八位<<8|低8位tem=tem_h<<8|tem_l;return  tem;
}unsigned short si7006_read_hum()
{unsigned short hum;unsigned char hum_h,hum_l;//发起起始信号i2c_start();//发送从机地址+写标志i2c_write_byte(0x40<<1|0);//等待从机应答i2c_wait_ack();//发送寄存器地址  0XE3i2c_write_byte(0xe5);//等待从机应答i2c_wait_ack();//重复起始信号i2c_start();//发送从机地址+读标志i2c_write_byte(0x40<<1|1);//等待从机应答i2c_wait_ack();delay(100);//等待从机测量数据//接收数据高八位//发送应答信号hum_h=i2c_read_byte(0);//接收数据低八位//发送非应答信号hum_l=i2c_read_byte(1);//将高八位和低八位合成一个数据   高八位<<8|低8位hum=hum_h<<8|hum_l;return  hum;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/769767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDC:2027年中国网络安全市场规模将超200亿美元

IDC于近日发布了2024年V1版IDC《全球网络安全支出指南》(IDC Worldwide Security Spending Guide)。IDC数据显示&#xff0c;2022年全球网络安全IT总投资规模为1890.1亿美元&#xff0c;并有望在2027年增至3288.8亿美元&#xff0c;五年复合增长率&#xff08;CAGR&#xff09;…

若依ruoyi-vue实现excel导入导出

文章目录 Excel注解excel数据导入前端实现后端实现 下载模板前端实现后端实现 excel数据导出前端实现后端实现 自定义标题信息导出用户管理表格新增标题&#xff08;用户列表&#xff09;导入表格包含标题处理方式 自定义数据处理器自定义隐藏属性列导入对象的子对象导出对象的…

FakeLocation报虚拟位置服务连接失败,请重启设备再试

虚拟位置服务连接失败&#xff0c;请重启设备再试 最近遇到一个手机软件报的bug“虚拟位置服务连接失败&#xff0c;请重启设备再试” 因为我的实体“虚拟机”已经root&#xff0c;按道理是不可能报这个错的 折腾了2天&#xff0c;终于解决了 原来是这样&#xff0c;安装最新…

龙智亮相2024国际集成电路展览会暨研讨会(IIC Shanghai),分享芯片研发及管理解决方案与技术实践

2024年3月28-29日&#xff08;周四-周五&#xff09;&#xff0c;上海张江科学会堂&#xff0c;2024国际集成电路展览会暨研讨会&#xff08;IIC Shanghai 2024&#xff09;即将盛大开幕。龙智携芯片研发及管理解决方案、最佳实践与案例&#xff0c;以及惊喜大奖在#1A14展位等着…

【C语言】数组和指针

目录 一、&数组名VS数组名 二、数组指针 三、指针数组 四、函数指针 五、const和指针 1、常量指针 六、sizeof和指针、数组 七、strlen和字符数组 八、指针和数组笔试题 1、一维数组 2、字符数组 3、二维数组 一、&数组名VS数组名 //试试这段代码 #includ…

Redis 教程系列之Redis 配置(三)

Redis 配置 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf(Windows 名为 redis.windows.conf)。 你可以通过 CONFIG 命令查看或设置配置项。 语法 Redis CONFIG 命令格式如下: redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME 实例 redis 127.0…

C++ 中的 unordered_map 用法文档

当你在C中需要使用哈希表&#xff08;无序映射&#xff09;来管理键值对时&#xff0c;unordered_map 是一个非常有用的数据结构。以下是关于 unordered_map 的用法&#xff1b; 1. 概述 unordered_map 是 C STL&#xff08;标准模板库&#xff09;中的一个关联容器&#xff…

二刷代码随想录——动态规划day57

文章目录 前言动态规知识点 动规五部曲一、647. 回文子串二、516. 最长回文子序列总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精刷了&#xff0c;于是参加了卡子哥的刷题班&#xf…

数据挖掘|数据预处理|基于Python的数据标准化方法

基于Python的数据标准化方法 1. z-score方法2. 极差标准化方法3. 最大绝对值标准化方法 在数据分析之前&#xff0c;通常需要先将数据标准化&#xff08;Standardization&#xff09;&#xff0c;利用标准化后的数据进行数据分析&#xff0c;以避免属性之间不同度量和取值范围差…

15:00面试,15:06就出来了,问的问题有点变态了

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到3月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降30%…

PTA L2-032 彩虹瓶

彩虹瓶的制作过程&#xff08;并不&#xff09;是这样的&#xff1a;先把一大批空瓶铺放在装填场地上&#xff0c;然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。 假设彩虹瓶里要按顺序装 N 种颜色的小球&#xff08;不妨将顺序就编号为 1 到 N&#xff09;。现在工…

项目管理-需求分析

项目需求分析是项目管理中非常重要的一环&#xff0c;它涉及到对项目目标的理解、项目范围的界定、项目需求的收集、分析和整理。以下是项目需求分析的一般步骤&#xff1a; 1. 确定项目目标&#xff1a;明确项目的目的和预期成果&#xff0c;确保项目团队对项目目标有共同的认…

基于cnn卷积神经网络的yolov8动物姿态估计识别(训练代码)

往期热门项目大合集&#xff1a; 人体姿态识别&#xff08;教程代码&#xff09;-CSDN博客 3D人体姿态估计&#xff08;教程代码&#xff09;-CSDN博客 3D目标检测&#xff08;教程代码&#xff09;_3d目标检测原理-CSDN博客 交通路标识别(教程&代码)_路标识别项目概述…

【c++】类和对象(二)this指针

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本节内容来到类和对象第二篇&#xff0c;本篇文章会带领大家了解this指针 目录 1.this指针1.1this指针的引出1.2this指针的特性1.3思考题1.4C语言和C实现Stack的对…

解析option设计模式

解析option设计模式 一、背景二、应用demo三、Gin中的应用 一、背景 有时候一个函数会有很多参数&#xff0c;为了方便函数的使用&#xff0c;我们会给希望给一些参数设定默认值&#xff0c;调用时只需要传与默认值不同的参数即可。因此选项设计模式顾名思义&#xff0c;就是在…

Redis 缓存穿透是什么?如何缓解缓存穿透?

缓存穿透是指在使用缓存技术时&#xff0c;恶意或无效的请求无法从缓存中获取到数据&#xff0c;从而直接落到底层存储系统&#xff08;如数据库&#xff09;上&#xff0c;导致频繁地查询底层存储系统&#xff0c;增加系统负载并降低性能。 缓存通常用于存储经常被请求的数据…

QB 系统配置模板

查询的时候&#xff0c;直接 在下面添加 一个字段就行&#xff01; public function getDeatil(){$post $this->request->post();if(!isset($post[id])){return out(请传递活动的id);}$builder new Builder($this->getModel());$builder->setFilter([id > …

轨迹预测后处理之非极大值抑制(NMS)

非极大值抑制是图像处理里面的一种算法&#xff08;比如边缘检测会使用到&#xff09; 轨迹预测这里借鉴了其思想&#xff0c;比如说对于某个场景中的某辆车&#xff0c;我们使用模型预测 64 条轨迹或者更多&#xff0c;以很好地捕获多模态性&#xff0c;同时每条轨迹对应一个…

看似简单的SQL,实则就是简单

加班遇到一个SQL问题&#xff0c;本想把别人的SQL改下成SparkSQL&#xff0c;在YARN上运行&#xff0c;然而数据一直对不上。 原SQL ⚠️说明&#xff1a;a.id&#xff0c;b.id没有空的&#xff0c;数据1:1&#xff0c;b.name可能存在空的 select a.id,b.id,b.name from tab…

机器学习方法

机器学习是人工智能&#xff08;AI&#xff09;的一个分支&#xff0c;它使计算机系统能够从数据中学习并改进其性能&#xff0c;而无需进行明确的编程。机器学习的核心是开发算法&#xff0c;这些算法可以从大量数据中识别模式&#xff0c;并用这些模式来做出预测或决策&#…