8.[STM32]独立按键学不会?一篇文章带你学懂它

本文档详细介绍了使用STM32通过C语言实现按键控制LED灯的操作,包括if和switch语句的使用、全局变量的概念、按键初始化、读取按键状态以及消除抖动的方法。通过三个按键实现LED的点亮、熄灭和闪烁功能,提供了完整的代码示例和配置过程。

🍌
🍌🍌
作者简介:大家好啊,我叫DW,小白一个,每天分享一些我新学到的知识,期待和大家一起进步
🍋
🍋🍋
系列专栏:STM32
🍎
🍎🍎
🍎🍎🍎
🌞小实验目标:通过三个按键控制LED灯,按键一点亮LED,按键二熄灭LED,按键三使得LED闪烁🌞
🍊如有写得不好的地方欢迎大家指正🍊
创作时间:🍊🍊🍊2022年4月23日🍊🍊🍊
🍊🍊相关文章:
1.STM32F103-点亮第一颗LED
3.在LCD12864上显示属于你的文字

在这里插入图片描述

1 C语言补充

1.1 if语句

if(条件表达式)
{
   
   
复合语句;
}
else if(条件表达式)
{
   
   
复合语句;
}
else if(条件表达式)
{
   
   
复合语句;
}
else 
{
   
   
复合语句;
}

🍎在判断的时候,从上往下执行,一旦有成立的表达式,执行对应的复合语句,下面的就不在判断了,各个条件判断是互斥的🍎

1.2 switch 语句

switch(表达式)//表达式只能是字符型或整型的
{
   
   
case 常量表达式1:
语句1;
break;

case 常量表达式2:
语句2;
break;

default: 语句3;break;
}

🎵🎵 小提示

🍎switch语句中的表达式与case中的常量比较,和哪个相等,执行哪个的语句,都不相等执行default中的语句🍎

1.2 普通全局变量

概念:在函数外部定义的变量

作用范围
(1)普通全局变量:程序的所有地方
(2)使用之前需要声明,声明的方法是:

extern int a;

生命周期:一直存在,直到程序结束

🎵🎵 小提示

🍎声明的时候不用赋值🍎
🍎我们在其他地方使用时直接使用int a🍎
🍎一般在.h文件中声明,.c文件中使用🍎

2 按键解析

按键作为GPIO口的输入操作,他用途广泛,比如常见的智能门锁,可以利用按键控制密码的输入。

在这里插入图片描述
🍌按键连接方式:🍌
PB14 --KEY1
PB13 --KEY2
PB12 --KEY3

🎵🎵 很重要

🍌按键的左侧连接到了GND,右侧连接了单片机的GPIO口🍌
🍌当按键被按下时,检测到一个低电平,此时KEY引脚状态配置为输入模式,本次实验用到的是上拉输入模式🍌

🍌 如何知道使用上拉模式还是下拉模式:由原理图可知,按键左端接GND,右侧接高电平,按键按下,低电平有效,故设置为上拉模式🍌

2.1 按键初始化

void 
<think>好的,用户需要找一篇关于独立按键检测程序的文章。首先,我得理解什么是独立按键检测程序。独立按键通常指的是每个按键单独连接到微控制器的一个I/O口,与矩阵键盘不同,后者通过行列扫描来检测按键独立按键的检测相对简单,但需要考虑消抖和状态检测。 接下来,用户可能需要的是具体的实现方法或者代码示例。他们可能是电子爱好者、生或者工程师,正在做一个项目,需要处理按键输入。用户可能对硬件连接和软件消抖不太熟悉,所以文章需要详细说明这些部分。 然后,我得考虑如何组织内容。首先介绍独立按键的原理和硬件连接,然后解释按键抖动的问题及消抖方法,包括硬件和软件消抖。接着,给出一个基于单片机的示例代码,比如使用C语言,并分步骤讲解代码逻辑。最后,可能还需要讨论应用场景和优化建议。 需要确保文章结构清晰,步骤明确,代码正确。同时,用户可能希望了解常见的错误和解决方法,比如如何避免误触发,如何处理长按和短按等高级功能。因此,在文章中可能需要涵盖这些进阶内容,或者至少提到这些方向供读者进一步探索。 另外,要检查是否有合适的参考文献或推荐资料,比如经典的嵌入式系统书籍或者相关的技术博客,帮助用户深入理解。同时,注意使用正确的中文术语,避免翻译不当造成的误解。 最后,确保文章符合用户的可读性要求,语言简洁明了,技术细节准确,适合不同层次的读者。可能需要添加示意图说明电路连接,或者流程图展示按键检测的流程,但如果是纯文本,需要用文字详细描述这些部分。</think>以下是一篇关于独立按键检测程序的技术文章框架及核心内容,供参考习: --- # 独立按键检测程序设计详解 ## 一、硬件原理 1. **电路结构** 独立按键采用单线连接方式,每个按键独占一个I/O口。典型电路包含: - 按键一端接地 - 另一端通过上拉电阻连接至MCU的GPIO - 默认状态GPIO输入高电平($$V_{CC} \approx 5V$$) - 按下时GPIO被拉低至地电平($$V_{OL} \approx 0V$$) 2. **抖动现象** 机械触点会产生5-20ms的抖动信号,必须进行消抖处理才能准确检测按键状态。 ## 二、软件设计 ### 1. 基础检测流程 ```c // 51单片机示例代码 sbit KEY = P1^0; void main() { while(1) { if(KEY == 0) { // 检测低电平 delay_ms(20); // 延时消抖 if(KEY == 0) { // 确认按下 // 执行功能代码 while(!KEY); // 等待释放 } } } } ``` ### 2. 状态机优化方案 ```c typedef enum { IDLE, DEBOUNCE, PRESSED, RELEASE } KeyState; KeyState keyDetect() { static KeyState state = IDLE; switch(state) { case IDLE: if(KEY == 0) { state = DEBOUNCE; timer = 20; // 启动20ms定时 } break; case DEBOUNCE: if(timer == 0) { state = (KEY == 0) ? PRESSED : IDLE; } break; case PRESSED: // 执行按键动作 state = RELEASE; break; case RELEASE: if(KEY == 1) { state = IDLE; } break; } return state; } ``` ## 三、关键技术点 1. **消抖算法对比** | 方法 | 原理 | 响应时间 | 资源占用 | |-------------|----------------------|----------|----------| | 延时检测 | 固定延时过滤抖动 | 20-50ms | 低 | | 状态机 | 时序逻辑判断 | <5ms | 中 | | 定时器扫描 | 定时中断轮询检测 | 1ms | 较高 | 2. **进阶功能实现** - 长短按识别(通过计时判断按压时长) - 连发功能(持续按压时周期性触发) - 组合键检测(多按键同时操作) ## 四、应用场景 1. 家电控制面板 2. 工业设备启停控制 3. 嵌入式仪器仪表 4. 智能门禁系统 ## 五、推荐习资料 1.嵌入式硬件设计》(David E. Simon著)第6章 2. Arduino官方文档按键检测实例 3. STM32 HAL库GPIO应用笔记(AN4899) 4. 《匠人手记》系列技术博客 --- **建议实践步骤**: 1. 使用Proteus搭建仿真电路 2. 编写基础检测程序 3. 添加示波器观察抖动波形 4. 逐步实现状态机优化 5. 测试不同消抖参数的影响 可通过知网、IEEE Xplore等平台搜索以下关键词获取更多专业文献: - "独立按键消抖算法优化" - "嵌入式系统人机接口设计" - "机械开关噪声抑制"
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依点_DW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值