当前位置: 首页 > news >正文

蓝桥杯嵌入式赛道复习笔记2(按键控制LED灯,双击按键,单击按键,长按按键)

硬件原理解释

这张图展示了一个简单的按键电路原理图,其中包含四个按键(PB0、PB1、PB2、PB3、PA0),每个按键通过一个10kΩ的上拉电阻连接到VDD(电源电压),并接地(GND)。

图中的按键电路工作原理如下:

  1. 未按下按键时:当按键未被按下时,由于上拉电阻的存在,按键的引脚(例如PB1)通过电阻R2被拉高到VDD电压,此时为高电平。

  2. 按下按键按下时:当按键被按下时,按键的引脚直接连接到地(GND),此时为低电平。

  3. 输入模式:图中描述了输入模式为“既不是上拉输入也不是下拉输入”,这意味着按键的引脚在未被按下时为高电平,按下时为低电平。

  4. 按键去抖:由于机械按键在按下和释放时可能会产生抖动,电路中通常会加入去抖电路来稳定信号。图中没有显示去抖电路,但实际应用中可能需要在软件中实现去抖处理。

  5. 按键状态检测:微控制器(MCU)通过检测按键引脚的电平变化来判断按键是否被按下。当检测到低电平时,认为按键被按下;当检测到高电平时,认为按键未被释放。

  6. 电路连接:每个按键通过其引脚(例如PB1)连接到微控制器的相应引脚(例如B2),微控制器通过扫描这些引脚来检测按键的状态。

总结来说,这个电路图展示了一个基本的按键输入按键电路设计,其中按键通过上拉电阻连接到VDD,按下时引脚接地,微控制器通过检测引脚的电平变化来检测按键状态。这种设计简单且常用于各种电子设备中。

实际操作

cubeMX配置

1.gpio的配置

2.TIM时钟的开启

 3.ARR,PSC的配置

代码 

按键单击,双击,长按

#include "key_disply.h"
#include "gpio.h"uint8_t now_state_1;
uint8_t last_state_1=1;
//extern uint32_t count;
uint32_t last_press_time = 0;
uint8_t click_count = 0;     
void key_text1(){now_state_1=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);if(now_state_1==0&&last_state_1==1){TIM2->CNT=0;HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9, GPIO_PIN_SET);if (HAL_GetTick() - last_press_time <= DOUBLE_CLICK_TIME) {click_count++;  } else {click_count = 1; }last_press_time = HAL_GetTick(); }if(now_state_1==0&&last_state_1==0){if(TIM2->CNT>=10000){HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2, GPIO_PIN_RESET);}}if(now_state_1==1&&last_state_1==0){if(click_count == 1){if(TIM2->CNT<10000){HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2, GPIO_PIN_RESET);}}if (click_count == 2) {HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_15);  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);click_count = 0;  }}if(now_state_1==1&&last_state_1==1){HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2, GPIO_PIN_RESET);}last_state_1=now_state_1;}


http://www.mrgr.cn/news/94877.html

相关文章:

  • LeetCode Hot 100:1.两数之和、49.字母异位词分组、128.最长连续序列、283.移动零、11.盛水最多的容器
  • 11.anaconda中的jupyter使用、及整合dataspell
  • 【华为OD-E卷 -122 字符统计及重排 100分(python、java、c++、js、c)】
  • 微服务》》Kubernetes (K8S)安装
  • 【蓝桥杯每日一题】3.16
  • 使用Dependency Walker和Beyond Compare快速排查dll动态库损坏或被篡改的问题
  • hubilder打包ios app, 并上传TestFlight
  • 用uv管理python环境/项目(各种应用场景)
  • WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)深度解析与实战复现
  • PosterRender 实现微信下程序 分享商品生成海报
  • [蓝桥杯 2023 省 B] 飞机降落
  • 算法刷题记录——LeetCode篇(8) [第701~800题](持续更新)
  • 本地部署DeepSeek-R1(Dify升级最新版本、新增插件功能、过滤推理思考过程)
  • 【深度学习|目标检测】YOLO系列anchor-based原理详解
  • 卷积神经网络 - 一维卷积、二维卷积
  • 使用htool工具导出和导入Excel表
  • 做游戏的发展方向
  • GStreamer —— 3.1、Qt+GStreamer制作多功能播放器,支持本地mp4文件、rtsp流、usb摄像头等(可跨平台,附源码)
  • 类和对象C++
  • 设计模式 二、创建型设计模式