STM32单片机(三)第四节:GPIO输入练习2(光敏传感器控制蜂鸣器)

news2024/9/22 10:07:21

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

本大节主要学习GPIO通用输入输出口,包含两部分,第一小节主要学习GPIO的输出,第二小节是写三个简单的程序进行练习,分别是LED闪烁、LED流水灯、蜂鸣器等;第三小节是学习GPIO输入,第四小节是写两个简单的程序进行练习,分别是按键控制LED和光敏传感器控制蜂鸣器;
本小节主要是对上一节学习的GPIO输入知识进行实战练习,编写两个程序进行练习,分别实现按键控制LED和光敏传感器控制蜂鸣器等,并附上程序源码;

文章目录

  • 一、本节目标
    • 光敏传感器控制蜂鸣器
  • 二、光敏传感器控制蜂鸣器源码
    • 2.1 接线图
    • 2.2 代码实现

一、本节目标

光敏传感器控制蜂鸣器

在这里插入图片描述
面包板上连接蜂鸣器模块和光敏电阻传感器模块,当用手挡住光敏电阻,光线变暗时,蜂鸣器就会响;把手拿开,光线变亮时,蜂鸣器就停止。

二、光敏传感器控制蜂鸣器源码

2.1 接线图

在这里插入图片描述

蜂鸣器:
VCC接电源正,GND接电源负,控制脚接PB12;

光敏传感器:
VCC接电源正,GND接电源负,DO输出脚接PB13;

如下图所示:
在这里插入图片描述
上电,可以看到光敏传感器的灯亮了;当我们遮住光线时,输出指示灯灭,代表输出高电平;松手时,输出指示灯亮,代表输出低电平;

2.2 代码实现

代码路径:STM32入门教程资料\程序源码\STM32Project\3-5 光敏传感器控制蜂鸣器\User

具体代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Buzzer.h"
#include "LightSensor.h"

int main(void)
{
	Buzzer_Init();
	LightSensor_Init();
	
	while (1)
	{
		if (LightSensor_Get() == 1)
		{
			Buzzer_ON();
		}
		else
		{
			Buzzer_OFF();
		}
	}
}

LightSensor.c

#include "stm32f10x.h"                  // Device header

void LightSensor_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

uint8_t LightSensor_Get(void)
{
	return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
}

Buzzer.c://蜂鸣器相关功能实现

#include "stm32f10x.h"                  // Device header

void Buzzer_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_SetBits(GPIOB, GPIO_Pin_12);
}

void Buzzer_ON(void)
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}

void Buzzer_OFF(void)
{
	GPIO_SetBits(GPIOB, GPIO_Pin_12);
}

void Buzzer_Turn(void)
{
	if (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_12) == 0)
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_12);
	}
	else
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_12);
	}
}

LightSensor.c://负责光敏电阻功能实现

#include "stm32f10x.h"                  // Device header

void LightSensor_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

uint8_t LightSensor_Get(void)
{
	return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
}

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

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

相关文章

一文学会如何使用Docker

Docker常见使用 1、Docker安装 ## 下载阿里源repo文件 $ curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo $ curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo$ yum clean …

详解8种不同类型的防火墙

什么是防火墙? 防火墙是一种监视网络流量并检测潜在威胁的安全设备或程序,作为一道保护屏障,它只允许非威胁性流量进入,阻止危险流量进入。 防火墙是client-server模型中网络安全的基础之一,但它们容易受到以下方面的攻…

选择低代码平台的正确方式

传统开发模式早已不能满足大多数追求效率的企业的要求,低代码平台的出现正是可以缓解相应的开发压力,作为使用者我们更应该擦亮眼睛,选择合适的平台产品,充分利用新技术带来的新价值。小编在以前的文章有介绍过低代码平台应该如何…

php中的双引号与单引号的基本使用

字符串,在各类编程语言中都是一个非常重要的数据类型 网页当中的图片,文字,特殊符号,HTMl标签,英文等都属于字符串 PHP字符串变量用于存储并处理文本, 在创建字符串之后,我们就可以对它进行操作。我们可以直接在函数中使用字符串,或者把它存储在变量中 字…

360手机命令行进入fastboot线刷模式 360手机刷机

360手机命令行进入fastboot线刷模式 360手机刷机 参考:360手机-360刷机360刷机包twrp、root 360刷机包360手机刷机:360rom.github.io 【前言】 因360手机特殊;且因机器情况而异;导致360手机进不去fastboot线刷模式、360手机进…

基于Java+Swing实现坦克大战游戏

基于JavaSwing实现坦克大战游戏 一、系统介绍二、功能展示三、其他系统四、获取源码 一、系统介绍 此系统是使用Java语言实现坦克大战游戏程序,玩家通过连接访问进入游戏,通过操纵坦克来守卫基地,玩家还可以获得超级武器来提升坦克的属性&am…

点云特征描述子概述、PFH描述子提取

1、 6种点云特征描述子简概 NARF(Normal Aligned Radial Feature)特征点描述子:NARF描述子是一种基于法线对齐的径向特征描述子。它通过将点云表面分割为小的网格单元,并计算每个单元中的法线直方图,从而提取特征。NA…

【网站监控】如何监控自己的网站(接口)

网站监控-如何监控自己的网站 前言一、开始使用1、使用API进行监控数据采集?2、请求参数3、如何查看监控效果? 二、注意点 前端必备工具(免费图床、API、chatAI等)推荐网站LuckyCola: https://luckycola.com.cn/ 前言 网站接口监控是指对接口的状态进…

Keil为啥比IAR更受欢迎?

关注星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 最近交流群在讨论【选择Keil和IAR的问题】,这就顺便展开来说下。 你可能觉得Keil、IAR这种集成开发环境界面比较古老,又不好用。 但是,这里告诉大…

ConcurrentModificationException异常分析与解决

ConcurrentModificationException异常分析与解决 1、场景重现,制造ConcurrentModificationException异常 Testpublic void ConcurrentModificationExceptionTest() {JSONArray jsonArray new JSONArray();JSONObject jsonObject new JSONObject();jsonObject.put…

改写cocos2d的ProgressTimer实现任意起始点的Radial进度条

解释一下要做的事: 原生ProgressTimer控件的进度起始点只能是在(0.5,1)的位置,如下: 我们要改成可以将矩形边上的任意点作为起始点,如下: 首先讲一下绘制的逻辑: 先根…

3: PCIe BDF(Bus,Device,Function)

目录 1.概述 2.BUS:总线号 3.Device:设备号 4.Function:功能号 1.概述 PCIe总线中的每一个功能都有一个唯一的标识符与之对应。这个标识符就是BDF(Bus,Device,Function) 2.BUS:总…

基于Java客户管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

SSD202D-GPIO调试驱动-三

前面又两个介绍 SSD202D-GPIO调试驱动-一 SSD202D-GPIO调试驱动-二 主要是调试方法: insmod gpio_lonbon.ko 然后可以再看到一下节点 //出现以下节点 proc/gpio-lb/dbg sys/kernel/debug/gpio-lb/debug sys/class/gpio-lb/ dev/gpio-lb 然后

python中MongoEngine简单使用

python中MongoEngine简单使用 1 MongoEngine介绍 MongoEngine是一个处理MongoDB的对象文档映射器。pymongo是非面向对象的方式操作数据。 MongoEngine开发文档 # 开发文档 http://docs.mongoengine.org/index.html# 数据类型 http://docs.mongoengine.org/apireference.htm…

Excel 2019访问SQL Server数据库的实现过程

源之:https://vip.kingdee.com/article/288066926977041920?productLineId11 在日常ERP系统实施过程中,往往会遇到客户的一些个性化需求,比如有些客户习惯用Excel电子表格来查看ERP系统中的数据,业余拓展学习了一下,借…

STM32cubeMX配置工程(全过程+修改MCU方法+注意事项)

1.修改默认的固件包下载路径,避免占用C盘空间 2、选择ACCESS TO MCU 3、在跳出的界面中的Part Number中搜索对应的芯片型号 4、选好后在右下角双击对应的芯片,然后跳出配置界面 左边可以配置外设,右边可以配置每个IO口的功能 System Core包括…

java之路——带你了解SpringSecurity安全框架与基本应用

文章目录 一、什么是SpringSecurity二、SpringSecurity的主要应用场合三、springsecurity代码步骤 一、什么是SpringSecurity **Spring Security是一个功能强大的开源框架,用于在Java应用程序中实现身份验证和授权功能。它提供了一套全面的安全性解决方案&#xff…

java设计模式(二十三)访问者模式

目录 定义模式结构角色职责代码实现适用场景优缺点定义 访问者模式是一种行为型模式,它允许你定义一个作用于某个对象结构中的各个元素的操作,而同时又不改变这些元素的类。该模式的核心思想是将数据结构与数据操作分离,从而可以在不改变数据结构的前提下定义新的操作。 模…

【爆肝四万字!操作系统原理95+】期末考试知识点超超全总结

本文涵盖了笔者本学期学习“操作系统原理”课程的所有重要内容,还包含了一定量的经典例题。纯干货,不废话!目的在于知识的记录,便于今后的回顾,同时也希望对即将考试的朋友们有帮助。 目录 操作系统概述 操作系统的…