普中STM32-PZ6806L开发板(HAL库函数实现-按键扫描)

简介

实现按键扫描, 实现四个按键按下控制灯的亮灭

电路原理图

按键电路原理图
在这里插入图片描述
按键与主芯片引脚原理图
在这里插入图片描述

其他知识

原理图分析

Key_UP按下会有高电平输入, 所以电路设置应该是默认低电平, 初始化为下拉输入
Key_Left/Right/Down按下会有低电平, 初始化为下拉输入

消除按键抖动

按键按下内部弹片会有抖动,引起检测多次触发信号, 需要进行延时防止抖动

实现步骤

创建项目

参考 普中STM32-PZ6806L开发板(STM32CubeMX创建项目并点亮LED灯)

初始化多个按键引脚

在这里插入图片描述

添加用户代码

key.h

#ifndef __KEY_H__
#define __KEY_H__#include "stm32f1xx_hal.h"typedef enum
{KEY_PRESSED,KEY_NORMAL,
} KEY_Status;typedef struct 
{GPIO_TypeDef *GPIOx;uint16_t GPIO_Pin;GPIO_PinState PressedState;void (*KeyPressedCallback)(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
}KEY_Info;KEY_Status KEY_CheckStatus(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PressedState);void KEY_KeysForeachAction(KEY_Info *keys, uint8_t size);#endif //__KEY_H__

key.c

#include "key.h"KEY_Status KEY_CheckStatus(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PressedState)
{if ( PressedState == HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) ){HAL_Delay(100);if ( PressedState == HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) ){return KEY_PRESSED;}}return KEY_NORMAL;
}void KEY_KeysForeachAction(KEY_Info *keys, uint8_t size)
{while (1){for (int i = 0; i < size; ++i){if ( KEY_PRESSED == KEY_CheckStatus(keys[i].GPIOx, keys[i].GPIO_Pin, keys[i].PressedState) ){keys[i].KeyPressedCallback(keys[i].GPIOx, keys[i].GPIO_Pin);break;}}}
}

main.c

void onKeyPress( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{if ( KEY_UP_GPIO_Port ==  GPIOx && KEY_UP_Pin == GPIO_Pin){LED_LightControl(LED1, LED_ON);}else if (KEY_DOWN_GPIO_Port ==  GPIOx && KEY_DOWN_Pin == GPIO_Pin){LED_LightControl(LED1, LED_OFF);}else if (KEY_LEFT_GPIO_Port ==  GPIOx && KEY_LEFT_Pin == GPIO_Pin){LED_LightControl(LED2, LED_ON);}else if (KEY_RIGHT_GPIO_Port ==  GPIOx && KEY_RIGHT_Pin == GPIO_Pin){LED_LightControl(LED2, LED_OFF);}
}int main()
{
KEY_Info infos[4] = {{ KEY_UP_GPIO_Port, KEY_UP_Pin, GPIO_PIN_SET, onKeyPress},{ KEY_DOWN_GPIO_Port, KEY_DOWN_Pin, GPIO_PIN_RESET, onKeyPress},{ KEY_LEFT_GPIO_Port, KEY_LEFT_Pin, GPIO_PIN_RESET, onKeyPress},{ KEY_RIGHT_GPIO_Port, KEY_RIGHT_Pin, GPIO_PIN_RESET, onKeyPress},};...while(1){KEY_KeysForeachAction((KEY_Info*)infos, sizeof(infos)/sizeof(KEY_Info));}...
}

共赏

普中STM32-PZ6806L开发板(HAL库函数实现-按键扫描) 点灯

代码

不需要下载, 基本代码上面都提供了

参考

普中STM32-PZ6806L开发板(HAL库函数实现-批量操作GPIO引脚实现跑马灯)

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

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

相关文章

相机同步遇到的小问题

出现问题 在进行两个相机显示的时候&#xff0c;出现了相机显示不同步的情况&#xff0c;具体情况如下视频所示&#xff1a; 华睿/大华相机左右相机显示不同步 可以见到视频之中&#xff0c;右相机是比左相机更快一点的&#xff0c;但是有的时候就是同步的。我调用的代码是现成…

最新GPT4.0使用教程,AI绘画,ChatFile文档对话总结+GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

亚信安慧AntDB数据库:企业核心业务系统数据库升级改造的可靠之选

在近期召开的“2023年国有企业应用场景发布会”上&#xff0c;亚信安慧公司的核心数据库产品AntDB闪耀登场&#xff0c;技术总监北陌先生针对企业核心业务系统数据库升级改造的关键议题发表了深度分享。他从研发、工程实施和运维管理三个维度细致剖析了当前企业在进行数据库升级…

Linux系统安装MySQL

Linux系统安装MySQL 第一步&#xff1a;下载YUM wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm第二步&#xff1a;安装MySQL的YUM 仓库 rpm -ivh mysql57-community-release-el7-11.noarch.rpm第三步&#xff1a;查看MySQL版本 yum repolist …

嵌入式科普(9)vscode无法跳转和恢复默认配置

一、目的/概述 二、解决办法 2.1 使能Intelli Sense Engine 2.2 vscode恢复默认配置 2.3 c/c与clangd冲突 嵌入式科普(9)vscode无法跳转和恢复默认配置 一、目的/概述 1、2024年的第一天突然vscode无法跳转,莫名其妙 2、尝试了各种设置和插件都无效&#xff0c;卸…

【萤火虫系列教程】1/5-Adobe Firefly 注册账号

001-Adobe Firefly 注册账号 AI时代如火如荼&#xff0c;Adobe也不甘落后&#xff0c;于今年3月份发布AI创意生成工具Firefly&#xff08;中文翻译&#xff1a;萤火虫&#xff09; Adobe Firefly简介 Adobe Firefly的官方介绍为&#xff1a;Firefly是Adobe产品中新的创意生成…

YOLOv8模型yaml结构图理解(逐层分析)

前言 YOLO-V8&#xff08;官网地址&#xff09;&#xff1a;https://github.com/ultralytics/ultralytics 一、yolov8配置yaml文件 YOLOv8的配置文件定义了模型的关键参数和结构&#xff0c;包括类别数、模型尺寸、骨架&#xff08;backbone&#xff09;和头部&#xff08;hea…

Geotrust DV通配符证书保护域名数量

Geotrust是一家知名的SSL证书提供商&#xff0c;旗下有多种类型的SSL数字证书&#xff0c;保护网站数据在传输过程中的安全性和完整性&#xff0c;帮助用户确认其网站的安全。通配符SSL证书是Geotrust颁发的一种可以同时保护多个域名站点的SSL证书。今天就随SSL盾小编了解Geotr…

Jmeter 性能 —— 电商系统TPS计算

1、怎么计算得出TPS指标 ①第一个通过运维那边给的生产数据&#xff0c;看一下生产进件有多少&#xff0c;计算得来的&#xff0c;如果没有生产数据&#xff0c;或者不过就看如下的方法 ②第二个就是根据最近一个月的实际访问数据&#xff0c;比如每天调用了多少个接口&#…

将 validator 校验器从 ParameterValidator 中抽离出来

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 pyparamval…

01、Kafka ------ 下载、安装 ZooKeeper 和 Kafka

目录 Kafka是什么&#xff1f;安装 ZooKeeper下载安装启动 zookeeper 服务器端启动 zookeeper 的命令行客户端工具 安装 Kafka下载安装启动 Kafka 服务器 Kafka是什么&#xff1f; RabbitMQ的性能比ActiveMQ的性能有显著提升。 Kafka的性能比RabbitMQ的性能又有显著提升。 K…

【React系列】react-router

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识react-router 1.2. 前端路由原理 前端路由是如何做到URL和内容进行映射呢&#xff1f;监听URL的改变。 UR…

【MySQL】orderby/groupby出现Using filesort根因分析及优化

序 在日常的数据库运维中&#xff0c;我们可能会遇到一些看似难以理解的现象。比如两个SQL查询语句&#xff0c;仅仅在ORDER BY子句上略有不同&#xff0c;却造成了性能的天壤之别——一个飞速完成&#xff0c;一个则让数据库崩溃。今天就让我们围绕这个问题&#xff0c;深入剖…

prometheus grafana linux服务器监控

文章目录 前传node-exporter安装配置promethues监控node节点grafana操作查看监控&#xff1a;外传 前传 prometheus grafana的安装使用&#xff1a;https://nanxiang.blog.csdn.net/article/details/135384541 本文说下监控nginx&#xff0c;prometheus grafana linux 安装配…

(NeRF学习)NeRF复现 win11

目录 一、获取源码二、环境三、准备数据集1.下载数据集方法一&#xff1a;官方命令方法二&#xff1a;官网下载数据集 2.修改配置 四、开始训练1.更改迭代次数2.开始训练方法一&#xff1a;方法二&#xff1a; 3.使用预训练模型 五、NeRF源码学习 一、获取源码 git clone http…

初识MySQL

一、什么是数据库 数据库&#xff08;Database&#xff0c;简称DB&#xff09;&#xff1a;长期存放在计算机内&#xff0c;有组织、可共享的大量数据的集合&#xff0c;是一个数据“仓库”。 数据库的作用&#xff1a; 可以结构化存储大量的数据&#xff0c;方便检索和访问…

kubeadm开快速的搭建一个k8s集群

kubeadm开快速的搭建一个k8s集群 二进制适合大集群&#xff0c;50台以上主机 kubeadm更适合中小企业的业务集群。 master节点 20.0.0.92 docker kubelet kubeadm kubectl flannel node1 20.0.0. 94 docker kubelet kubeadm kubectl flanne node2 20.0.0.03 docker kubelet…

面试题:聊聊 SpringBoot 中的 SPI 机制

文章目录 简介Java SPI实现示例说明实现类1实现类2相关测试 源码分析Spring SPISpring 示例定义接口相关实现 相关测试类输出结果源码分析 总结 简介 SPI(Service Provider Interface)是JDK内置的一种服务提供发现机制&#xff0c;可以用来启用框架扩展和替换组件,主要用于框架…

HTTPS协议详解

目录 前言 一、HTTPS协议 1、加密是什么 2、为什么要加密 二、常见加密方式 1、对称加密 2、非对称加密 三、数据摘要与数据指纹 1、数据摘要 2、数据指纹 四、HTTPS加密策略探究 1、只使用对称加密 2、只使用非对称加密 3、双方都使用非对称加密 4、对称加密非…

开发个小破软件——网址导航,解压就能用

网址导航 网站导航也称链接目录&#xff0c;将网站地址或系统地址分类&#xff0c;以列表、图文等形式呈现&#xff0c;帮助快速找到需要的地址。 应用场景 高效查找&#xff1a;网址导航是很好的入口&#xff0c;通过分类清晰的网站推荐&#xff0c;可以迅速访问网站资源。…