蓝桥杯嵌入式赛道复习笔记1(按键控制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的配置

代码

按键单击,双击,长按

cpp 复制代码
#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;
	
}
相关推荐
蒸蒸yyyyzwd3 小时前
AI应用相关可能的面试问题
笔记
叼烟扛炮4 小时前
[Git 实战] 学习笔记:从生成 SSH 密钥到解决 TortoiseGit 推送报错全指南
linux·运维·笔记·git·学习
蒸蒸yyyyzwd5 小时前
学习笔记 八股手撕
笔记·学习
揣一尾游鱼yu6 小时前
Spring上(IOC)笔记
java·笔记·spring·ioc
小李不想当小白8 小时前
BKP备份寄存器与RTC实时时钟(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
瑞码空间10 小时前
JSP与Servlet核心开发与CRUD实战笔记
java·笔记·servlet·jsp
La Pulga10 小时前
【FreeRTOS源码学习笔记】链表的实现
数据结构·笔记·stm32·mcu·链表·嵌入式·freertos
wuyoutrans13 小时前
以色列专利OA答复翻译,重点要避开哪些坑?
笔记
宝绿特塑业再生科技13 小时前
HDPE再生颗粒户外家具表面粉化机理与改性技术全解析
笔记·户外家具·再生塑料·塑木桌椅
凉、介14 小时前
深入理解 ARMv7-A | Generic Timer
笔记·学习·嵌入式·arm