KEY按键

这篇具有很好参考价值的文章主要介绍了KEY按键。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

KEY.h

#ifndef __KEY_
#define __KEY_
void KEY_Init(void);
uint8_t GET_KeyNum(void);
#endif

KEY.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
void KEY_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOE,&GPIO_InitStruct);
}
uint8_t GET_KeyNum(void)
{
	uint8_t KeyNum = 0;
	if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == 0)
	{
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == 0);//如果按键一直处于按下状态,则卡在这里,直到松手才把按键状态返回
		Delay_ms(20);
		KeyNum = 1;
	}
	if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0)
	{
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0);//如果按键一直处于按下状态,则卡在这里,直到松手才把按键状态返回
		Delay_ms(20);
		KeyNum = 2;
	}
	return KeyNum;
}

main.c

#include "stm32f10x.h"                  // Device header
#include "LED.h"
#include "KEY.h"
uint8_t KeyNum;
int main(void)
{

	LED0_Init();
	KEY_Init();
	while(1)
	{
		KeyNum = GET_KeyNum();
		if(KeyNum == 1){
			LED0_On();
		}
		if(KeyNum == 2){
			LED0_Off();
		}
	}
}

不推荐用EXTI中断触发按键事件:
按键的信号不是转瞬即逝的
不好处理按键抖动
推荐使用定时器中断

KEY按键,STM32,stm32
如果不消抖,CPU可能会误处理

怎么判断按键按下?
两种判定:
1、按下就处理(下降沿触发)
2、弹起才处理(上升沿触发)
下面介绍“按下就处理“(下降沿触发)的情况:
KEY按键,STM32,stm32
1)读取一次电平,只有检测到高电平,才继续处理
2)消抖20ms
3)在读取一次电平,若此时未低电平,才认为是一次按键事件。
对于可支持连按的模式(一次按键动作,无论停留多久,只算作一次按键事件),对于GPIO_ReadInputDataBit这一函数,我们只能知道当前电平高低,如读取到的是低电平,我们无法判断是

连按模式
KEY按键,STM32,stm32
如何在此基础上,修改代码,变为非连按模式?
首先,增加上次一按键状态检测机制,即只有当第一次读取按键状态为弹起时,防抖后,再当第二次读取时,为按下状态,才认为是一次按键事件。
1)定义一个参数:标记当前按键是否按下
2)按键标记为弹起且检测到按键高电平->防抖->按键标记为按下,再读取一次,若为低电平,则认为是一次按键事件。
其中,当已经进行过一次按键事件,但此时按键未松开,且主函数重新运行一次到该按键扫描函数,此时按键标记为按下,就算检测到高电平,也无法触发按键入口;
再一次,主函数再一次运行到扫描函数,此时按键已经松开,读取到的是高电平,重置按键标记为弹起;
以上,一次按键事件彻底结束。
KEY按键,STM32,stm32
其中,是否支持连续按,最重要的是按下标志位

KEY按键,STM32,stm32文章来源地址https://www.toymoban.com/news/detail-660763.html

到了这里,关于KEY按键的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32-按键检测

    做按键检测时,GPIO为输入操作 读取IO口输入电平调用的 库函数 为: uint8_t GPIO_ReadInputDataBit (GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin); 读取IO口输入电平操作的 寄存器 为: GPIOx_IDR :端口输入寄存器 使用位带操作读取IO口输入电平: PEin(4) -读取GPIOE.4口电平 PEin(n) -读取 GPIOE.n口电平 按键输入

    2024年02月06日
    浏览(54)
  • 【STM32】 4脚按键

    目录 一:按键说明 二:4脚按键原理图封装 三:4脚按键PCB封装 四:4脚按键实物图+2脚按键实物图 这种开关不能够自锁,但是,每当按下去一次,信号就发生一次跳变。底部 可以表示为 未按下时只有两组引脚连接,按下之后,四个引脚连接在一起。为保证准确, 建议在使用

    2024年02月12日
    浏览(32)
  • stm32实现按键控制

    目录 一、实现原理: 1.1 按键控制电路分析 二、程序部分: 1.1 按键控制电路分析     可以看见电路上key_up按键连接3.3v,K1、K2、K3下拉接地。按键检测的时候需要配置输入模式。key_up配置下拉输入:在默认状态下,读取的GPIO引脚为低电平,按键按下时,输入变为高电平。

    2024年02月15日
    浏览(42)
  • 【stm32----按键中断实验,按键控制LED灯】

    1、按下KEY1,LED1亮,再次按下KEY1,LED1灭; 2、按下KEY2,LED2亮,再次按下KEY2,LED2灭; 3、按下KEY3,LED3亮,再次按下KEY3,LED3灭; 一、头文件 1、gpio.h 2、key.h 二、初始化函数及功能函数 1、gpio.c 2、key.c 三、中断处理函数 do_irq.c 四、主函数 main.c 依次按下key3、key2、key1、key2

    2024年02月04日
    浏览(55)
  • STM32按键控制LED

    1.利用模块化编程对LED 2.设置LED的几种状态(亮,灭,和利用按键反转电平) 3.按键 (1)按键初始化 (2)如果按键按下做什么(这里是控制LED) 4,主函数

    2024年02月12日
    浏览(43)
  • 【STM32】按键抖动及消除

    由于按键的抖动会导致一次按键动作被当成多次按键,为确保MCU对按键的一次闭合仅作一次处理,必须消除按键的抖动,在按键处于稳定状态时读取按键的状态。   按键的去抖动,通常有硬件消抖和软件消抖两种方式。 (1)硬件消抖 在按键数目较少时,可以采用硬件的方法

    2024年02月12日
    浏览(34)
  • STM32速成笔记—按键检测

    🎀 文章作者:二土电子 🌸 关注文末公众号获取其他资料和工程文件! 🐸 期待大家一起学习交流! 按键检测原理比较简单,按键按下和不按下,其连接引脚的电平是不一样的,按键检测正是通过检测按键引脚的电平变化来实现的。比如按键未按下时引脚电平为高电平,按

    2024年02月08日
    浏览(50)
  • STM32--按键矩阵--扫描法

    按键矩阵其实是通过八根引脚来检测按下按键,常规按键一个按键对应一个引脚口的输入,而按键矩阵通过8根引脚,4根为输入模块,4根为输出模式,输出模块式依次输出,输入模式依次扫描,从而确定按键矩阵按下的按键所处位置,从而节省引脚资源的使用,理论上来说按

    2024年02月11日
    浏览(45)
  • stm32之3.key开关

    假设key电阻为40kΩ,则key0 的电压3.3v*4/5=2.64v 2.key开关代码   ② GPIO_OType_PP//推挽输出 GPIO_OType_OD//开漏输出 推挽输出是指输出端口可以同时提供高电平和低电平输出,而开漏输出则是指输出端口只能提供低电平输出,高电平时需要借助外部上拉电阻 • 推挽输出的优点是可以在

    2024年02月11日
    浏览(33)
  • STM32 | STM32F407ZE中断、按键、灯(续第三天)

    上节回顾 STM32 | 库函数与寄存器开发区别及LED等和按键源码(第三天) 中断概念 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行(面试题)。 STM32外部中断需要

    2024年03月17日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包