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

news2024/11/25 21:41:02

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括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和光敏传感器控制蜂鸣器等,并附上程序源码;

文章目录

  • 一、本节目标
    • 1.1 按键控制LED
    • 1.2 光敏传感器控制蜂鸣器
  • 二、按键控制LED
    • 2.1 接线图
    • 2.2 代码实现
  • 三、光敏传感器控制蜂鸣器
    • 3.1 接线图
    • 3.2 代码实现

一、本节目标

1.1 按键控制LED

在这里插入图片描述
如上图,有两个按键和两个LED(左蓝右红)

现象:
按下左边的按键,左边的蓝色LED亮,再按一下熄灭
在这里插入图片描述

按下右边的按键,右边的红色LED亮,再按一下熄灭
在这里插入图片描述

1.2 光敏传感器控制蜂鸣器

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

二、按键控制LED

2.1 接线图

在这里插入图片描述
接线图入上图所示,接了两个按键和两个LED,两个按键分别接在PB1和PB11两个口上,按键一段接GPIO口,另一端接GND;两个LED分别接在了PA1和PA2两个口上,LED一段接GPIO口,另一端接VCC,就是低电平点亮的接法;

在这里插入图片描述

硬件接好好如上图所示;

2.2 代码实现

代码路径:STM32入门教程资料\程序源码\STM32Project\3-4 按键控制LED\User

具体代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"

uint8_t KeyNum;

int main(void)
{
	LED_Init();
	Key_Init();
	
	while (1)
	{
		KeyNum = Key_GetNum();
		if (KeyNum == 1)
		{
			LED1_Turn();
		}
		if (KeyNum == 2)
		{
			LED2_Turn();
		}
	}
}

key.c

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

void Key_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_1 | GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

uint8_t Key_GetNum(void)
{
	uint8_t KeyNum = 0;
	if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)
	{
		Delay_ms(20);
		while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);
		Delay_ms(20);
		KeyNum = 1;
	}
	if (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;
}

三、光敏传感器控制蜂鸣器

3.1 接线图

在这里插入图片描述

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

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

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

3.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);
}

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

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

相关文章

基于SSM的校园二手C2C购物商城

基于SSM的校园二手交易平台 零、源码获取: 链接点击直达:下载链接 一、设计概要 本次设计的是一个校园二手交易平台(C2C),C2C指个人与个人之间的电子商务,买家可以查看所有卖家发布的商品,并…

开源 API 网关-访问策略(二)

在上篇文章API网关:开源 API 网关-访问策略(一)中,我们简单演示了如何在IP维度中对请求路径设置黑白名单,以此来限制客户端请求的权限和范围。 此外,Apinto网关为客户端提供了一种统一的、基于访问密钥的认证机制,让客…

java的逻辑运算符与短路逻辑运算符

一、逻辑运算符 示例: 二、短路逻辑运算符 &&与&的区别是,再短路逻辑运算符&&所连接的表达式中,如果左边为假,则右边不进行运算,直接得出结果。在逻辑运算符&所连接的表达式中,…

Revit中如何将构件载入自己创建的楼中

当我们做一个楼群时,一般会有一个模板楼给我们参考,而楼群为了统一风格,装饰都是一样的,那么我们为了节省时间,该如何将模板楼上的构件载入到我们自己创建的楼中呢?下面请看步骤。 1、 打开模板楼“1号楼” 2、 双击样…

2023年前端面试题总结

某多多 1.Promise实现原理 2.vue组件间通信 3.性能优化 4.vuex数据流动过程 5.谈谈css预处理器机制 6.算法: Promise串行 某眼电影 1.vue组件间通信 2.react和vue更新机制的区别 3.Vue3 proxy的优劣 4.性能优化 5.symbol应用 6.深拷贝 问题 Promise实现原理 解决异步编程回…

RHEL7同步ntp时间

RHEL7同步ntp时间 RHEL7同步ntp时间测试ntp服务器是否可用抓包分析ntp 查看NTP同步情况ntp服务器配置文件将ntp配置迁移到chronytimedatectl设置时区和时间设置UTC或RTC时间查看所有可用时区查看当前时区设置系统时区启用夏令时timedatectl时间同步timedatectl修改当前日期时间…

(2022,错误严重性)用语义知识处理神经网络中的错误严重性

Addressing Mistake Severity in Neural Networks with Semantic Knowledge 公众号:EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 4. 实验 5. 结果 5.1 对抗扰动 5.2 自然损坏(Natural Corruptions) 6. 讨论与结论 7. 未来工…

[NIPS 1989] Optimal brain damage (OBD)

Contents IntroductionMethodOptimal Brain DamageComputing the second derivativesThe Recipe References Introduction 作者设计了一种模型剪枝策略,能够在尽量不影响模型精度的情况下丢弃模型中不重要的权重 Method Optimal Brain Damage 衡量权重重要性最直…

0100-35227美国应用材料AMAT

​ 0100-35227美国应用材料AMAT 0100-35227美国应用材料AMAT 自动化系统所使用的各种类型plc中,有的是集中安装在控制室,有的是安装在生产现场和各电机设备上,它们大多处在强电电路和强电设备所形成的恶劣电磁环境中。要提高PLC控制系统可靠…

【Mysql】基础命令操作

本文首发于 慕雪的寒舍 mysql的基础命令 本文所用mariadb版本 mysql Ver 15.1 Distrib 10.3.28-MariaDB, for Linux (x86_64) using readline 5.1sql语句的分类 DDL【data definition language】 数据定义语言,用来维护存储数据的结构。代表指令: create, drop,…

【QQ聊天界面-计算Frame Objective-C语言】

一、计算frame 1.我还是先把之前的代码保存一份, 我们刚才在第一份代码里面,其实无非就是 1)创建了个模型, 2)懒加载 3)把界面拖了一下 4)创建了一个自定义Cell 是不是就做了这四件事儿 2.那么,接下来,我们是不是要计算坐标了, 好,找到我们这个frame,在这个…

黑客松必备|如何快速注册参与Bear Necessities Hackathon

由Moonbeam和AWS Startups联合主办的Bear Necessities Hackathon黑客松提供了一个有趣且竞争、同时还有奖励的环境以供构建者们探索Moonbeam的互操作功能和创建跨链应用。本次黑客松由Moonbeam基金会、Chainlink、StellaSwap、SubQuery、Biconomy提供赞助,包含6个挑…

chatgpt赋能python:Python中Input函数的使用方法

Python中Input函数的使用方法 Python中的input()函数是一个内置函数,它可以用来从用户那里获取输入。它可以在编写Python程序时,和常量和变量一起使用。在本文中,我们将介绍Python中input()函数的使用方法。 什么是Input函数? …

Netty的高性能之道

1.背景 最近看到gitHub上有一个开源项目,通过使用 Netty4 Thrift 压缩二进制编解码技术,他们实现了 10W TPS(1K 的复杂 POJO 对象)的跨节点远程服务调用。相比于传统基于 Java 序列化 BIO(同步阻塞 IO)的…

docker harbor 私有仓库

docker 的本地自带的私有仓库 安装本地私有仓库的镜像 docker pull registry 下载镜像 vim /etc/docker/daemon.json 配置配置文件 也可以只写第一个也行 { "insecure-registries": ["192.168.86.50:5000"] } systemctl restart docker 重…

问题总结!常用插件Pytest的测试用例的一些问题

目录 前言: 失败重跑 Pytest-rerunfailures 用例执行顺序 Pytest-ordering 重复执行 Pytest-repeat 多重断言 Pytest-assume 前言: Pytest是Python中的一个流行的测试框架,它提供了许多功能强大的插件来支持自动化测试。 失败重跑 Pyt…

第1讲:XMLHttpRequest详解(ajax基础)

XMLHTTPRequest对象 XMLHTTPRequest对象,是基于XML的HTTP请求。XMLHTTPRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通讯。自从浏览器提供了XMLHTTPRequest这个接口之后,ajax操作就此诞生。 AJAX Asynchronous JavaScript and X…

Exploit/CVE-2010-0738

打开JBoss的潘多拉魔盒:JBoss高危漏洞分析 *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。 前言 JBoss是一个基于J2EE的开放源代码应用服务器&#xff0…

盖雅工场联合福达企业资源系統 (DynaSys) 成功举办 SAP SuccessFactors Day 活动

2023年5月31日,由DynaSys主办、盖雅工场协办的SAP SuccessFactors Day活动在香港半岛酒店成功举行。本次活动旨在为在港企业分享员工体验和劳动力管理解决方案,并以行业标杆案例为指引,帮助企业客户在全球市场中更好地制定人力资源管理策略。…

Linux下socket网络编程实战思考

socket网络编程是每个服务端开发人员必会技能,但是目前市面上各种web服务器容器,屏蔽了很多底层实现,导致很多socket通信细节被屏蔽,本文结合在linux下C语言socket通信说明一下网络通信的一些注意点。 目录 1.多进程模型tcp服务…