ARM体系结构和接口技术(六)KEY按键实验① 按键轮询检测

一、按键轮询

(一)分析按键的电路连接

KEY1----PF9

1. 按键原理图

在这里插入图片描述
原理图可知,左侧有一个上拉电阻,当按键抬起时,key1处悬空,电压为3.3V;
当按键按下时,电路导通,key1处电压为0。
因此检测到低电平时,说明按键按下;高电平,说明按键抬起状态。

2. 按键消抖

机械按键本身就存在抖动,因此需要进行滤波处理

硬件滤波:滤波电容,用于硬件滤波,电容会充电放电,使key1处的电压变化不会过快
软件消抖:延时消抖,当检测到按键按下时,延时一段时间,再次检测按键的状态

二、分析芯片手册

(一) GPIO章节

(二)RCC章节

三、代码

(一)key.c

#include "../include/key.h"
extern void delay_ms(unsigned int ms);

void key_init(void){
    //使能时钟
    __HAL_RCC_GPIOF_CLOCK_ENABLE();
    //配置按键
    gpio_init_t gpioInit;
    gpioInit.pin=KEY1_PIN;
    gpioInit.Moder_init=GPIO_INPUT_MODE;
    gpioInit.Pupdr_init=GPIO_NO_PUPD;
    gpio_init(GPIOF,&gpioInit);
}

key_state_t key1_pull(void){
    if(gpio_read_pin(GPIOF,KEY1_PIN)==GPIO_PIN_RESET){
        //低电平说明按键按下
        delay_ms(10);//延时消抖
        if(gpio_read_pin(GPIOF,KEY1_PIN)==GPIO_PIN_RESET){
            while(gpio_read_pin(GPIOF,KEY1_PIN)==GPIO_PIN_RESET);//等待按键松开
            return KEY_DOWN;
        }
    }
    return KEY_UP;
}

(二)key.h

#ifndef __KEY_H__
#define __KEY_H__
#include "../include/gpio.h"
#include "../include/rcc.h"
/***
 * KEY1---PF9
 * KEY2---PF7
 * KEY3---PF8***/
#define KEY1_PIN PIN_9
#define KEY2_PIN PIN_7
#define KEY3_PIN PIN_8

typedef enum{
    KEY_DOWN=0, //按键按下为低电平
    KEY_UP   //按键抬起为高电平
}key_state_t;

void key_init(void);

key_state_t key1_pull(void);

#endif

相关推荐

  1. ARM的三个按键实验

    2024-07-19 02:32:04       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 02:32:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 02:32:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 02:32:04       58 阅读
  4. Python语言-面向对象

    2024-07-19 02:32:04       69 阅读

热门阅读

  1. 【Linux】微基准测试

    2024-07-19 02:32:04       20 阅读
  2. AI发展下的伦理挑战,应当如何应对?

    2024-07-19 02:32:04       19 阅读
  3. 软件测试有光明的未来

    2024-07-19 02:32:04       20 阅读
  4. 1、PostgreSQL安装

    2024-07-19 02:32:04       20 阅读
  5. 数组reduce的众多用法

    2024-07-19 02:32:04       21 阅读
  6. 泛型+反射

    2024-07-19 02:32:04       18 阅读
  7. 牛客周赛51

    2024-07-19 02:32:04       22 阅读
  8. 开始构建我们自己的大语言模型:数据处理部分

    2024-07-19 02:32:04       21 阅读
  9. Vue.js(第一天)

    2024-07-19 02:32:04       21 阅读
  10. ThreadPoolExecutor拒绝策略

    2024-07-19 02:32:04       23 阅读
  11. Redis 散列

    2024-07-19 02:32:04       17 阅读