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

news2024/9/23 5:26:35

文章目录

  • 一、按键轮询
    • (一)分析按键的电路连接
      • 1. 按键原理图
      • 2. 按键消抖
  • 二、分析芯片手册
    • (一) GPIO章节
    • (二)RCC章节
  • 三、代码
    • (一)key.c
    • (二)key.h

一、按键轮询

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1934177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于python的笔记本电脑购买意愿影响因素分析,包括情感分析和聚类分析

摘要:本论文基于Python大数据视角,旨在分析笔记本电脑购买意愿的影响因素。通过爬取京东网站上的评论数据,使用多种技术和工具进行数据分析和处理。使用requests库爬取了大量的在线评论数据。利用pandas对数据进行清洗、处理和统计&#xff0…

实况:老菜鸟自力更生从零开始重学spring目标是画出一张唬人大图(三、spring启动的入口搭建源码阅读环境)

前情提要:源码下载&编译 速览 设计一个最简单的spring项目spring的入口在哪?怎么启动的?搭建源码阅读环境新建module并添加依赖编写一个微型spring项目(配置bean->获取bean->使用bean) 不打无准备之仗&…

windows下使用make编译C/C++程序 gcc编译 MinGW编译器

文章目录 1、概要2、编译环境搭建3、创建工程目录结构4、 编写程序4.1 编写头文件4.2 编写源文件 5、编写makefile及相关文件5.1 编写清理编译生成文件的批处理文件,供makefile调用5.2 编写makefile文件 6、编译工程6.1 打开命令行6.2 使用make命令编译程序6.3 编译…

【数据结构】二叉树———Lesson2

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

QT CNA上位机报错 解决方案

QT编译报错: -lControlCAN 解决方案 更换三个文件,即可解决(QT 自带的是32位库,应使用64位库文件)

Linux系统编程---Make/MakeFile

认识make/makefile make是一个命令 makefile是一个当前目录下的文件。 make会自动推导makefile中的依赖关系,栈式结构。形成可执行文件 如何清理 在makefile文件里加上clean,运行时直接make clean,建议clean放在后面。 在没有改变源文件的…

深入学习STL标准模板库

C STL standard template libaray 标准模板库 目录 C STL standard template libaray 标准模板库 一、标准容器顺序容器vectordequelistvector deque list对比 容器适配器stackqueuepriority_queue 关联容器unordered_setunordered_multisetunordered_mapunordered_multimapset…

【C++基础】类和对象(4)

目录 一、再探构造函数 1.1 构造函数体赋值 1.2 初始化列表 二、类型转换 三、static成员 概念: 特性: 四、友元 4.1 友元函数 4.2 友元类 五、内部类 六、匿名对象 七、对象拷贝时的编译器优化 一、再探构造函数 1.1 构造函数体赋值 …

Admin.NET源码学习(2:安装并运行前端)

根据Admin.NET的GitHub主页介绍,前端运行步骤需要运行pnpm命令。百度pnpm的话,需要支持npm相关的命令支持。   根据参考文献4,安装Node.js后会提供npm命令支持(npm是Node.js的软件包管理器,用于安装、发布和共享Jav…

在Linux系统安装MySQL有多简单

MySQL 是一种流行的开源关系数据库管理系统,广泛应用于各种类型的应用程序和服务。在安装TitanIDE​​​​​​​以后是没有MySQL服务的,我们需要单独安装安装MySQL。本文将介绍在 Linux 上安装 MySQL 的多种方式,包括离线安装、使用 Docker …

纤丝龙:强根固发,滋养头皮的天然秘诀

在我国传统中医学中,头发被视为“血之余,肾之华”,其生长与健康状况直接反映了人体的精神面貌和生命力。然而,现代生活节奏加快,压力不断增大,导致许多人出现头发干枯、分叉、脱落等问题。纤丝龙&#xff0…

“轻、灵、画、韵”,TCL第三代艺术电视引领艺术生活

7月17日,TCL第三代艺术电视A300系列正式上市,其中,A300 Pro配备B&O音响,共有65/75/85三个尺寸,首发到手价分别为8999元、11999元和15999元。不带Soundbar的A300W,它有55/65/75/85四个尺寸,首…

volatile关键字解析

一、volatile介绍 volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的…

Python 读取esxi上所有主机的设备信息

(主要是为了统计所有虚拟机的设备名称和所属主机) 代码: from pyVim import connect from pyVmomi import vim import ssldef get_vm_devices(vm):devices []try:if vm.config is not None and hasattr(vm.config, hardware) and hasattr(v…

JavaWeb入门程序解析(Spring官方骨架、配置起步依赖、SpringBoot父工程、内嵌Tomcat)

3.3 入门程序解析 关于web开发的基础知识,我们可以告一段落了。下面呢,我们在基于今天的核心技术点SpringBoot快速入门案例进行分析。 3.3.1 Spring官方骨架 之前我们创建的SpringBoot入门案例,是基于Spring官方提供的骨架实现的。 Sprin…

gite+picgo+typora打造个人免费笔记软件

文章目录 1️⃣个人笔记软件2️⃣ 配置教程2.1 使用软件2.2 node 环境配置2.3 软件安装2.4 gite仓库设置2.5 配置picgo2.6 测试检验2.7 github教程 🎡 完结撒花 1️⃣个人笔记软件 最近换了环境,没有之前的生产环境舒适,写笔记也没有劲头&…

R语言实现对模型的参数优化与评价KS曲线、ROC曲线、深度学习模型训练、交叉验证、网格搜索

目录 一、模型性能评估 1、数据预测评估 2、概率预测评估 二、模型参数优化 1、训练集、验证集、测试集的引入 2、k折线交叉验证 2、网格搜索 一、模型性能评估 1、数据预测评估 ### 数据预测评估 #### 加载包,不存在就进行在线下载后加载if(!require(mlben…

VMware Vsphere创建虚拟机

作者:红米 一、上传系统镜像 1、打开数据中心 2、新建文件夹,存放镜像 3、点击上传文件按钮 4、找到本地镜像上传 二、安装虚拟机 1、创建虚拟机 2、选择创建类型 3、为虚拟机命名并选择虚拟机安装的所在位置 4、选择计算资源 5、选择存储 6、选择兼容…

微服务

微服务 SpringCloud的五大组件 eureka服务注册和发现 nacos的工作流程 nacos和eureka的区别 负载均衡 ribbon负载均衡策略 如何自定义负载策略 服务雪崩 服务熔断 为服务端监控 项目中的限流 seata xa模式 AT模式 tcc模式 分布式服务接口幂等 分布式任务调度

2024年CSP-J暑假冲刺训练营(1):分析往年真题

考纲大览 一、往年真题1. 2019-2023 真题2. 整体分析 二、类型分析三、押题 一、往年真题 1. 2019-2023 真题 2. 整体分析 首先大家一定要明确,CSP-J 是不会给大家占便宜的,所以大家可以看到,即使被标注了"入门"难度的题目&#…