物联网D3——按键控制LED、光敏传感蜂鸣器
按键控制LED
按键抖动,电平发生变化,可用延时函数抵消按键抖动对系统的影响

传感器电路图

按键电路图

c语言对应类型
“_t”后缀表示使用typedef重命名的数据类型

枚举类型

#include<iostream>
using namespace std;
//定义枚举类型
typedef enum{Mon=1,Tue=2,Wed=3
} week_t;
int main(){week_t w;w=Wed; //对星期类型设定指定量cout << w << endl;return 0;
}
按键控制LED灯
主函数
#include "stm32f10x.h" // Device header
#include "MyDelay.h" //自定义延时函数
#include "Delay.h" //官方延迟函数
#include "Button.h" //按键Led驱动
#include "stdio.h"uint8_t KeyNum ;
int main(void){//初始化Led_Init();Button_Init();//按键控制led灯while(1){KeyNum = Key_GetNum();if(KeyNum==1) {Led_One_Turn();}if(KeyNum==2){Led_Two_Turn();}}return 0;
}
Button
//头文件
#ifndef Led_h //若没有定义该变量,则定义
#define led_h
//LED驱动
void Led_Init(void);
//按键初始化,按键用于输入,不用设置输出的速度
void Button_Init(void);
//获取是哪个按键被按下
uint8_t Key_GetNum(void);
//灯1亮
void Led_One_Turn(void);
//灯2亮
void Led_Two_Turn(void);
#endif//源文件
#include "stm32f10x.h"
#include "Delay.h"
#include "stdio.h"
//Led初始化
void Led_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GI;GI.GPIO_Mode = GPIO_Mode_Out_PP;GI.GPIO_Pin = GPIO_Pin_All;GI.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GI);//设置led灯对应引脚为高电平GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1); //A0,A1引脚高电平,灯灭
}
//按键初始化,按键用于输入,不用设置输出的速度
void Button_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //时钟使能GPIO_InitTypeDef Button;Button.GPIO_Mode = GPIO_Mode_IPU; //上拉输入模式,保持高电平Button.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_11; //按键所在引脚 Button.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&Button);
}
//获取是哪个按键被按下
uint8_t Key_GetNum(void){uint8_t KeyNum=0;//按键1if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0){ //按键按下读取输入数据Delay_ms(20); //按下抖动while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0 ); //等待度过按键触底期Delay_ms(20); //弹起抖动KeyNum=1; //按键一}//按键11if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0){ //读取输入数据Delay_ms(20); //按下抖动while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0); //等待度过按键触底期Delay_ms(20); //弹起抖动KeyNum=2; //按键二}return KeyNum; //返回按键号码
}
//灯1
void Led_One_Turn(void){uint8_t Light_Status = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);if(Light_Status==0) GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);else GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
}//灯2
void Led_Two_Turn(void){uint8_t Light_Status = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);if(Light_Status==0) GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET);else GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);
}
光敏传感蜂鸣器(绿灯常亮,光线变暗,红灯亮,警报响起,光线恢复,警报解除)

//光敏蜂鸣器头文件
#ifndef Buzzer
#define Buzzer
//读取光敏传感器的数据
uint8_t Read_Buzzer_Data(void);
//初始化环境
void Buzzer_PhotoResitors_Init(void);
//光敏电阻响应
void Reaction_PhotoResitors(void);
//蜂鸣器响应
void Buzzer_Ring(void);
//蜂鸣器安静
void Buzzer_Slient(void);
#endif//源文件
#include "stm32f10x.h"
#include "Button.h"
#include "Delay.h"
//读取光敏传感器的数据
uint8_t Read_Buzzer_Data(void){return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13); //读取蜂鸣器引脚数据
}
//初始化蜂鸣器和光敏电阻环境
void Buzzer_PhotoResitors_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //B端口时钟使能GPIO_InitTypeDef Buzzer;Buzzer.GPIO_Mode = GPIO_Mode_IPU; //上拉输入,保持光敏电阻在线Buzzer.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_12; Buzzer.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&Buzzer);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);
}
//蜂鸣器响应,红灯亮
void Buzzer_Ring(void){GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET); //红灯亮GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET); //绿灯灭while(1){GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET); //低电平有效Delay_ms(200);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);Delay_ms(300);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET); //低电平有效Delay_ms(300);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);Delay_ms(100);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET); //低电平有效Delay_ms(200);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);Delay_ms(300);break; //要退出循环,不然一直响,也回不到绿灯状态}}
//蜂鸣器安静,绿灯亮
void Buzzer_Slient(void){GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET); //红灯灭GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET); //绿灯亮GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET); //高电平无效
}
//光敏电阻响应
void Reaction_PhotoResitors(void){uint8_t RP = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13); if(RP==1) Buzzer_Ring();else Buzzer_Slient();
}
项目结构

相关文章:
物联网D3——按键控制LED、光敏传感蜂鸣器
按键控制LED 按键抖动,电平发生变化,可用延时函数抵消按键抖动对系统的影响 传感器电路图 按键电路图 c语言对应类型 “_t”后缀表示使用typedef重命名的数据类型 枚举类型 #include<iostream> using namespace std; //定义枚举类型 typedef enu…...
Spring初学入门(跟学笔记)
一、Spring概述 Spring是一款主流的Java EE轻量级开源框架。 Spring的核心模块:IoC(控制反转,指把创建对象过程交给Spring管理 )、AOP(面向切面编程,在不修改源代码的基础上增强代码功能) 二、…...
二进制部署k8s---下篇
一 master02 节点部署 1 先在master01 添加映射master02 对master02进行环境初始化 3 从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点 scp -r /opt/etcd/ root192.168.11.12:/opt/ scp -r /opt/kubernetes/ root192.168.11.12:/opt…...
基于Sentinel-1遥感数据的水体提取
本文利用SAR遥感图像进行水体信息的提取,相比光学影像,SAR图像不受天气影响,在应急情况下应用最多,针对水体,在发生洪涝时一般天气都是阴雨天,云较多,光学影像质量较差,基本上都是利…...
C++自定义头文件使用(函数和类)
简单案例需求: 1,计算正方形和三角形的周长——函数 2,模拟不同类型的动物叫声——类 一、创建项目 C空项目 Class_Study 二、创建主函数 在源文件下添加新建项,main.cpp 三、自定义头文件——函数 需求:1&a…...
消息队列选型
一、要解决的问题 1.1 异步 分析: 需要根据场景来判断。若整体链路的逻辑中,某些逻辑是不需要强实时的,滞后一段时间是允许的,同时又不会对用户带来不好的体验,那么可以使用MQ完成异步操作。 例如:秒杀场…...
ubuntu在conda环境中使用 pip install -r requirements.txt但是没有安装在虚拟环境中
whereis pip pip listubuntu在conda环境中使用pip install lpips0.1.3 但是安装在了这里 Requirement already satisfied: lpips0.1.3 in /home/uriky/anaconda3/lib/python3.11/site-packages (0.1.3) 就会出现黄色波浪,未在虚拟环境中安装包 解决办法1࿱…...
力扣127.单词接龙讲解
距离上一次刷题已经过去了.........嗯............我数一一下............整整十天,今天再来解一道算法题 由于这段时间准备简历,没咋写博客。。今天回来了!!!!!!!&…...
latex笔记
双列排版,右端margin不对齐怎么解决 如下图这种情况, 解决方法: 在文档开头引入ragged2e包 \usepackage{ragged2e}然后在子章节的开头添加 \justifying\subsection{camouflaged object detection based on coarse-to-fine strategy} \just…...
秋招算法——AcWing101——拦截导弹
文章目录 题目描述思路分析实现源码分析总结 题目描述 思路分析 目前是有一个笨办法,就是创建链表记录每一个最长下降子序列所对应的节点的链接,然后逐个记录所有结点的访问情况,直接所有节点都被访问过。这个方法不是很好,因为需…...
IDEA不能创建新项目和新模块
问题: IDEA不管是创建新项目还是新模块都创建不成功,会报如下图错误 解决方案: 在电脑设置里搜索 “防火墙和网络保护” ,打开如下图所示 找到你所安装的IDEA,更改设置,选中IDEA 最后,确定&am…...
WebRTC 的核心:RTCPeerConnection
WebRTC 的核心:RTCPeerConnection WebRTC 的核心:RTCPeerConnection创建 RTCPeerConnection 对象RTCPeerConnection 与本地音视频数据绑定媒体协商ICE什么是 Candidate?收集 Candidate交换 Candidate尝试连接 SDP 与 Candidate 消息的互换远端…...
LeetCode hot100-39-N
101. 对称二叉树给你一个二叉树的根节点 root , 检查它是否轴对称。做不出来哇,递归一生之敌 普通的对一棵树的递归遍历根本没办法只接比较左子树的左和右子树的右这样来比较,所以这题比较巧妙的是把这棵树当做两棵树一样去遍历比较。 官方…...
NumPy常用操作
目录 一:简介 二:NumPy 常用操作 三:总结 一:简介 是一个开源的Python库,它为Python提供了强大的多维数组对象和用于处理这些数组的函数。NumPy的核心是ndarray,它是一个高效的多维数组容器,用于存储和处理大规模的数据。NumPy还提供了许多数学函数,用于数组之间的操…...
学习笔记——字符串(单模+多模+练习题)
单模匹配 Brute Force算法(暴力) 算法思想 母串和模式串字符依次配对,如果配对成功则继续比较后面位置是否相同,如果出现匹配不成功的位置,则j(模式串当前的位置)从头开始,i&…...
DOT + graphviz 轻松画图
GraphViz:2 DOT语法和相关应用_graphviz dot-CSDN博客 图可视化之Graphviz - 知乎 Graphviz 是由AT&T Research、Lucent Bell实验室开源的可视化图形工具,可以很方便的用来绘制结构化的图形网络。具体地,其使用一种名为dot语言的DSL来编…...
使用Vue调用ColaAI Plus大模型,实现聊天(简陋版)
首先去百度文心注册申请自己的api 官网地址:LuckyCola 注册点开个人中心 查看这个文档自己申请一个ColaAI Plus定制增强大模型API | LuckyColahttps://luckycola.com.cn/public/docs/shares/api/colaAi.html来到vue的页面 写个样式 <template><Header …...
Unity使用sherpa-onnx实现离线语音合成
sherpa-onnx https://github.com/k2-fsa/sherpa-onnx 相关dll和lib库拷进Unity,官方示例代码稍作修改 using SherpaOnnx; using System; using System.IO; using System.Runtime.InteropServices; using UnityEngine;public class TTS : MonoBehaviour {public st…...
Elasticsearch入门基础和集群部署
Elasticsearch入门基础和集群部署 简介基础概念索引(Index)类型(Type)(逐步弃用)文档(Document)字段(Field)映射(Mapping)分片&#x…...
12、24年--信息系统治理——IT治理
主要考选择题,2分左右,案例、论文涉及概率不大,需要认证读课本原文。 1、IT治理基础 IT治理是描述组织采用有效的机制对信息技术和数据资源开发利用,平衡信息化发展和数字化转型过程中的风险,确保实现组织的战略目标的过程。 1.1 IT治理的驱动因素 1)存在很多问题: 信…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
