STM32 单片机 按键控制led灯亮灭

LED 灯: 作为一个输出设备,连接到 STM32 的一个 GPIO 引脚。通过程序控制该引脚输出高电平或低电平(取决于 LED 的电路连接方式)来点亮或熄灭 LED。

按键: 作为一个输入设备,连接到 STM32 的另一个 GPIO 引脚。程序需要读取该引脚的电平状态来判断按键是否被按下。按键通常连接有上拉或下拉电阻,以确保在未按下时引脚有确定的电平(高或低)。

消抖 (Debounce): 机械按键在按下和释放时会产生快速的、非预期的电平抖动(通常在几毫秒到几十毫秒)。如果不处理,程序可能会误判为多次按键动作。常用的消抖方法有硬件消抖(RC 滤波)和软件消抖(延时确认)。

LED引脚初始化( LED_Init 函数)

开启GPIOA的时钟,将GPIOA的Pin1、Pin2配置为推挽输出模式(输出电平控制LED亮灭),并设置输出速度为50MHz;初始化后通过 GPIO_SetBits 将引脚置高。

LED状态翻转( Led1_Turn 函数)

通过 GPIO_ReadOutputDataBit 读取GPIOA_Pin1当前的输出电平:

若当前为低电平(0),则调用 GPIO_SetBits 置高,LED熄灭。

若当前为高电平,则调用 GPIO_ResetBits 置低,LED点亮。

实现LED灯的"按一次切换亮灭状态"的功能。

按键初始化( Key_Init 函数)

开启GPIOB的时钟(通过 RCC_APB2PeriphClockCmd )。

将GPIOB的Pin1、Pin11配置为上拉输入模式(GPIO_Mode_IPU),输出速度设为50MHz。

上拉输入模式的作用:按键未按下时,引脚默认保持高电平;按下时引脚被拉低,便于检测电平变化。

按键值读取( Key_GetNum 函数)

实现消抖处理+按键值返回的功能:

定义 KeyNum 变量存储按键编号(默认0表示无按键)。

检测GPIOB_Pin1电平:

若检测到低电平(按键按下),先延时20ms消抖。

等待按键松开(电平恢复高电平)后,再延时20ms消抖,最终将 KeyNum 设为1。

检测GPIOB_Pin11电平:逻辑与Pin1一致,按键按下后 KeyNum 设为2。

函数返回 KeyNum ,用于区分是哪个按键被按下。

相关推荐
HQB20267 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
果壳science8 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
南山电子nscn8 小时前
中科芯CETC汽车电池管理系统BMS进口芯片国产型号替代指南
单片机·汽车·bms
沉淀的.晴天9 小时前
can总线
stm32
桀人9 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
国科安芯10 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C10 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
传感器与混合集成电路11 小时前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc11 小时前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
碧海银沙音频科技研究院12 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法