当前位置: 首页 > 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;
	
}

相关文章:

  • element-plus中Popconfirm气泡确认框组件的使用
  • 基于 Docker 和 Flask 构建高并发微服务架构
  • UnitTest框架管理测试用例——python自动化测试
  • Golang学习笔记_49——解释器模式
  • mysql-查看binlog日志
  • 基于SpringBoot+Vue的幼儿园管理系统+LW示例参考
  • GPU视频编解码:Jetson VPI+multimedia_api视频编解码入门(一)
  • Effective C++ 剖析(条款1~9)
  • 【软件工程】03_软件需求分析
  • 速通大厂测开
  • 介绍如何使用Python构建引文网络,并计算结构洞指标
  • 深入解析 `SQL_SMALL_RESULT`:MySQL 的“小优化”大作用
  • 【unity实战】用unity封装一个复杂全面且带不同射击模式的飞机大战射击系统
  • Navicat 17.2 正式发布 | AI 助手、支持 Snowflake...超多新功能等你解锁
  • [贪心算法]-最大数(lambda 表达式的补充)
  • 4.JVM-垃圾回收介绍
  • 双链笔记新选择!使用Docker私有化部署Logseq知识库远程团队协作
  • Java学习------static、final、this、super关键字
  • 【最佳实践】Go 状态模式
  • 基于CNN的多种类蝴蝶图像分类
  • 中央党校(国家行政学院)举行2025年春季学期第一批进修班毕业典礼
  • 违规行为屡禁不止、责任边界模糊不清,法治日报:洞穴探险,谁为安全事故买单?
  • 新华保险一季度净赚58.82亿增19%,保费收入增28%
  • 释新闻|西葡大停电为何规模大、恢复慢?可再生能源是罪魁祸首?
  • 阿里千问3系列发布并开源:称成本大幅下降,性能超越DeepSeek-R1
  • 纪念|海上金石学的兴盛与王昶《金石萃编》