【STM32F4】按键开关

上一章,我们介绍了STM32F4的IO口作为输出的使用,这一章,将向大家介绍如何使用按键作为输入使用。

(一)硬件连接

根据正点原子的stm32f4阿波罗开发板,可以看见

按键KEY0连接在PH3上、

KEY1连接在PH2上、

KEY2连接在PC13上、

KEY_UP连接在PA0 上。

根据电路图分析,当按键KEY0,KEY1、KEY2导通时,PH3、PH2、PC13为低电平;

按键KEY_UP导通时,PA0为低电平。

(图为按下按键开关后,IO后就会从高电平变为低电平)

因此,我们可以通过反复读取按键输入引脚的信号,然后识别高低电平来判断是否有按键触发。

(二)按键消抖

通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖

说白了有时候按键输入引脚有低电平不一定代表着是按键按下,可能是干扰信号。因此我们需要通过一些抖动处理,将这些干扰信号过滤,从而获得真实的按键触发信号。

我们如何去抖动呢?

首次检测到按键输入引脚有低电平后,稍作延时,再次读取该引脚,如果还是低电平,则确认是按键触发信号,否则,判断为干扰信号,不予处理。

(三)Hal库读取引脚函数

该函数返回值为该引脚读入的电平状态。

(四)实操

按下KEY2(PC13)按键,DS1(PC0)小灯点亮,反之熄灭。

1.时钟配置

2.IO端口配置

设置PC13为输出引脚

设置PB0为输出模式

//延时和按键函数

void Delay(unsigned int t)
{while(t--);
}
void Scan_Key()
{if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == RESET){   Delay(1000);if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == RESET){HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == SET);}}
}

在主函数while(1)中调用按键检测函数就好了。

3.实验现象

按键按下前:

按键按下后:

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

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

相关文章

SQLite的DBSTAT 虚拟表(三十六)

返回:SQLite—系列文章目录 上一篇:SQLite运行时可加载扩展(三十五) 下一篇:SQLite—系列文章目录 1. 概述 DBSTAT 虚拟表是一个只读的同名虚拟表,返回 有关用于存储内容的磁盘空间量的信息 的 SQLite 数据库。 示例用例…

FPGA - ZYNQ 基于Axi_Lite的PS和PL交互

前言 在FPGA - ZYNQ 基于EMIO的PS和PL交互中介绍了ZYNQ 中PS端和PL端交互的开发流程,接下来构建基于基于Axi_Lite的PS和PL交互。 开发流程 Axi_Lite从机 在FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑)中,详解介绍…

性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法

文章目录 一、前言二、加密接口1、什么是SM22、被测接口加密逻辑 三、准备工作四、JMeter 扩展实现步骤1:准备开发环境步骤2:了解实现方法步骤3:runTest 方法步骤4:getDefaultParameters 方法步骤5:setupTest 方法 五、…

HTX迪拜之夜盛大举行:共筑开放、互联的Web3生态系统

4月18日,由HTX、HTX DAO主办,去中心化AI云游戏协议DeepLink赞助的HTX迪拜之夜主题活动“领航者相聚,引领币圈新风向”在迪拜盛大举行。通过在全球第二大加密中心-迪拜的频繁亮相,HTX正积极塑造自己作为行业领导者的形象&#xff0…

Mysql学习一

目录 1.启动数据库: 2.命令行连接到MySQL(winr输入cmd) 3.MySQL的三重结构: 4.SQL语句分类: 1.启动数据库: winr——输入services.msc进入本地服务 2.命令行连接到MySQL(winr输入cmd&#x…

109. Python的turtle库简介

109. Python的turtle库简介 【目录】 文章目录 109. Python的turtle库简介1. 什么是turtle库?2. 用turtle库绘制一个爱心图案3. 库的导入方法3.1 直接导入整个库3.2 从库中导入特定的函数或类3.3 导入库中的所有内容3.4 为导入的库设置别名3.5 为导入的函数或变量设…

阿里巴巴Java开发规范——编程规约(3)

# 阿里巴巴Java开发规范——编程规约(3) 编程规约 (四) OOP规约 1.【强制】构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init 方法中 这条编程规范的目的是为了保持代码的清晰性、可读性…

AOP

代理模式 提出问题 现有缺陷 假设我们有一个计算类,里面有加减乘除四个方法,现在我们要为这四个方法添加日志,即在方法执行的前后分别输出一句话,这时我们会发现如下缺陷: 1.对核心业务有干扰。核心业务是加减乘除…

货拉拉0-1数据指标体系构建与应用

目录 一、背景 二、指标体系搭建 2.1 指标设计 2.2 指标体系搭建 2.3 指标维度拆解 三、指标标准化建设 四、指标元数据管理 五、指标应用&未来规划 原文大佬介绍的这篇指标体系构建有借鉴意义,现摘抄下来用作沉淀学习。如有侵权请告知~ 一、背景 指标…

汽车摄像头匿名化处理解决方案,保护信息的安全性和隐私性

随着智能交通和自动驾驶技术的迅猛发展,汽车摄像头已成为现代汽车不可或缺的一部分,摄像头所捕捉的图像信息也引发了日益严峻的信息安全问题。如何在充分利用摄像头功能的同时,保障个人隐私和信息安全,已成为企业亟待解决的问题。…

IP地址定位技术引发的个人隐私保护问题

IP地址定位技术对互联网的影响深远且多面,它不仅改变了网络管理与优化的方式,还极大地推动了在线广告营销、电子商务、地理信息服务等多个领域的发展。然而,与此同时,它也引发了一系列关于个人隐私保护的问题。 首先,I…

vue的学习之用vue写一个hello,vue

根据以下步骤下载vue.js 介绍 — Vue.js 创建一个damo.html &#xff0c;引入vue.js即可 <body><div id"app">{{ message }}</div><!-- Vue --><!-- 开发环境版本&#xff0c;包含了有帮助的命令行警告 --><script src"js/vu…

清华新突破,360°REA重塑多智能体系统:全方位提升复杂任务表现

引言&#xff1a;多智能体系统的新篇章——360REA框架 在多智能体系统的研究领域&#xff0c;最新的进展揭示了一种全新的框架——360REA&#xff08;Reusable Experience Accumulation with 360 Assessment&#xff09;。这一框架的提出&#xff0c;不仅是对现有系统的一次重大…

如何修改WordPress数据库表前缀以提高安全性

WordPress作为世界上最受欢迎的内容管理系统之一&#xff0c;吸引了数以百万计的用户。然而&#xff0c;正因为其广泛的使用&#xff0c;WordPress网站也成为了黑客攻击的目标之一。其中一个最常见的安全漏洞是使用默认的数据库表前缀wp_&#xff0c;使得黑客能够更轻松地进行大…

Oracle交换分区测试

1、用exchange分区表减少初始化过程中对业务中断的影响 2、创建分区表 create table t_p (id number,name varchar2(30),addr varchar2(50)) partition by range(id) (partition p1 values less than(10), partition p2 values less than(20), partition p3 values less …

sql(ctfhub)

一.整数型注入 输入1 输入2 输入2-1&#xff0c;回显为1的结果&#xff0c;说明是数字型&#xff0c;只有数字型才可加减 判断字段数为2 查询数据库 查表 查列 显示flag内容 二.字符型注入 输入1 输入2 输入2-1&#xff0c;说明为字符型&#xff0c;不是数字型 判断闭合方式为…

【数据分析面试】27. 计算广告评论比例 (SQL)

题目: 计算广告评论比例 假设你有一个ads表&#xff0c;包含ID和广告名称&#xff0c;比如“劳动节衬衫促销”。feed_comments表保存了不同用户在常规信息流中对广告的评论。moments_comments表保存了不同用户在moments中对广告的评论。 编写一个查询&#xff0c;获取广告在f…

问题总结笔记

1.向量旋转 问题&#xff1a; 将一个向量旋转90 方法&#xff1a;旋转矩阵 FVector FrontDir EndMousePoint - Point; FrontDir.Normalize(); FVector Left FVector(-FrontDir.Y, FrontDir.X, 0); Verties.Add(Point Left * (WallWedith / 2)); Verties.Add(FVector(Vertie…

BFS 专题 ——FloodFill算法:733.图像渲染

文章目录 前言FloodFill算法简介题目描述算法原理代码实现——BFSCJava 前言 大家好啊&#xff0c;今天就正式开始我们的BFS专题了&#xff0c;觉得有用的朋友给个三连呗。 FloodFill算法简介 中文&#xff1a;洪水灌溉 举个例子&#xff0c;正数为凸起的山峰&#xff0c;负…

攻防世界---misc---easycap

1.下载附件是一个流量包&#xff0c;拿到wireshark中分析 2.查看分级协议 3.过滤data 4.追踪tcp流 5.得到flag