ESP32+TFTLCD实现WiFi天气语音播报(四)

本文介绍如何使用ESP32通过按键控制LED灯的亮灭,并详细讲解了按键分析、抖动处理以及相应的代码实现,包括GPIO配置和去抖动函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ESP32实现按键控制led


前言

本文主要实现按键控制led灯的亮灭,当然蜂鸣器也是一样的。之前的led实验,蜂鸣器实验IO口都是作为输出来使用的,在这里按键实验IO口作为输入来使用。


一、前期准备

1、 按键分析

下面给出几个按键的原理图以及所在引脚:
按键原理图
KEY1 按键一端是接 3.3V 的,当按下后 PA0管脚即为高电平,未按下时处于悬空状态,所以需要将 PA0 管脚配置为浮空输入模式GPIO_Mode_IN_FLOATING(下拉输入模式 GPIO_Mode_IPD),这样 PA0 管脚的默认电平就为低电平,如果读取到 PA0 管脚的电平为高电平时,就说明 KEY1 按键按下。
KEY2~KEY4 的按键一端是接GND 的,当按下后管脚为低电平,所以需要将管脚配置为上拉输入模式GPIO_Mode_IPU(浮空输入模式GPIO_Mode_IN_FLOATING),这样管脚的默认电平就为高电平,如果读取到管脚的电平为低电平时,就说明按键按下。
在这里插入图片描述
在这里插入图片描述
KEY1接PA0,KEY2接PC4,KEY3接PC5,KEY4接PC6

2、 按键抖动

硬件上使用的按键是机械按键,按键按下和抬起都会产生电平抖动,抖动时间的长短由按键的机械特性决定的,一般为 5ms 到 10ms。按键抖动会产生干扰信号,影响判断,所以要进行去抖动处理,按键消抖有两种方式,一种是硬件消抖,另一种是软件消抖。
硬件防抖需要借助外接电容和电阻,通过电容充放电来约束电平不能跳变达到去抖动的效果。
软件防抖,用延时的方式错过这个抖动的时间。

二、代码写入

初始化按键配置,使能按键引脚的时钟,使用 GPIO 的输入模式,在定义的按键扫描函数中检测电平,从而判断按键是否被按下,当检测到按键按下后,进行去抖动,再次进行电平检测,最终确定按键状态,再进行相应处理。

1.key.c

代码如下:

#include "key.h"
#include "delay.h"
#include "beep.h"

//PA0  浮空输入
void Key_Config(void)
{
   
   
		//1.开时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
	
	//2.配置端口
	GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量 
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//引脚 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//模式 
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;//引脚 
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
}
//声明按键引脚
#define KEY1  GPIO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值