6、GPIO输入按键检测(轮询检测)

news2024/10/6 12:19:04

目录

0x01、简介

0x02、硬件设计

0x03、编写函数

0x001、按键初始化

 0x002、按键检测

 0x003、按键led翻转

0x04、源程序下载地址


0x01、简介

       本次实验主要实现按键控制LED灯。

       由于机械按键在按下和抬起的时候会产生按键抖动,所以在设计的时候需要考虑如何消除抖

动,达到准确判断按键状态的目的。

       消除抖动有软硬两种方式,硬件方式可利用电容充放电的延时进行消除,软件可以通过程序进

行消除。

硬件消除抖动电路图如下:

在没有被按下的时候,GPIO 引脚的输入状态为低电平(按键所在的电路不通,引脚接地),当按键

按下时,GPIO 引脚的输入状态为高电平(按键所在的电路导通,引脚接到电源)

 由于我手上的开发板不具备硬件去除抖动的功能,所以我们这里主要介绍软件去抖动程序。

0x02、硬件设计

0x03、编写函数

0x001、按键初始化

/**
  *@brief     key初始化
  *@param     无
  *@return    无
  */
void Key_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;             // 设置成上拉输入
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}

 0x002、按键检测

/**
  *@brief     按键扫描
  *@param     mode:0,不支持连续按;1,支持连续按;
  *@return    0,没有任何按键按下;KEY_PRES,按键被按下
  */
uint8_t KEY_Scan(uint8_t mode)
{
    static uint8_t key_up = 1;                                // 按键按松开标志

    if(mode)key_up = 1;                                       // 支持连按

    if(key_up && (KEY == 0))
    {
        Delay_ms(10);//去抖动
        key_up = 0;
        if(KEY == 0)
        {
            return KEY_PRES;
        }
    }
    else if(KEY == 1)
    {
        key_up = 1;
    }
    return 0;                                                // 无按键按下
}

 0x003、按键led翻转

/**
  *@brief     按键led翻转测试
  *@param     无
  *@return    无
  */
void Key_Led(void)
{
    if(KEY_Scan(0) == KEY_PRES) //得到键值
    {
        if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_10) == 1)
        {
            GPIO_ResetBits(GPIOC, GPIO_Pin_10);
        }
        else
        {
            GPIO_SetBits(GPIOC, GPIO_Pin_10);
        }
    }
}

0x04、源程序下载地址

下面上传一个源程序供大家参考:

https://download.csdn.net/download/thebestleo/87351982https://download.csdn.net/download/thebestleo/87351982

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

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

相关文章

Pytorch可视化特征图(代码 亲测可用)

2013年Zeiler和Fergus发表的《Visualizing and Understanding Convolutional Networks》 早期LeCun 1998年的文章《Gradient-Based Learning Applied to Document Recognition》中的一张图也非常精彩,个人觉得比Zeiler 2013年的文章更能给人以启发。从下图的F6特征&…

会议OA项目-首页

目录一、Flex布局简介什么是flex布局?flex属性学习地址:案例演示二、轮播图组件及mockjs三、会议OA小程序首页布局一、Flex布局简介 布局的传统解决方案,基于盒状模型,依赖 display属性 position属性 float属性 什么是flex布局…

简单有效的Mac内存清理方法,不用收藏也能记住

Mac电脑使用的时间越久,系统的运行就会变的越卡顿,这是Mac os会出现的正常现象,卡顿的原因主要是系统缓存文件占用了较多的磁盘空间,或者Mac的内存空间已满。如果你的Mac运行速度变慢,很有可能是因为磁盘内存被过度占用…

如何理解并记忆DataFrame中的Axis参数

当我们遇到有axis参数的方法时,脑子里的第一反应应该是:这个方法一定是沿着某一方向进行某种“聚合”或者“过滤”操作。在此场景下,Axis参数就是用来设定操作方向的:是垂直方向还是水平方向? axis0: 一行一行推进&…

【微服务架构实战】第1篇之API网关概述

1.网关概述 采用分布式、微服务的架构模式开发系统时,API 网关是整个系统中必不可少的一环。 1.1 没有网关会有什么问题? 在微服务架构模式下,1个系统会被拆分成多个微服务,如果每个微服务都直接暴露给调用方,会有以…

MySQL主键和唯一键的区别

主键和唯一键基本知识参考这篇文章 MySQL表的约束 ,本篇文章主要是谈一谈主键和唯一键的区别从而更好的理解唯一键和主键。 在上篇文章中已经提到 主键: primary key 用来唯一的约束该字段里面的数据,不能重复,不能为空&#x…

vue父页面调用子页面及方法及传参,鼠标光标定位

项目场景: vue父页面调用子页面及方法 问题描述 vue中父界面调用子界面及方法时界面可以调用,但是调用方法的时候第一次报错,但是关掉界面再次重新打开就没问题了 原因分析: 在我之前添加鼠标指针定位的时候,如果在…

记录scoped属性的使用和引发的问题

背景 在对表格数据进行样式处理时,通过业务逻辑判断,进行对符合要求的表格填充背景色,没有符合预期的效果。反复排查校验代码和判断逻辑,都没有什么问题,可能还是样式上出现问题。再通过F12 选取元素对表格设置背景色时…

获取树形结构中,父节点下所有子/孙节点(递归方式)

获取树形结构中,父节点下所有子/孙节点(递归方式)1 树形结构(TreeItem类)2 测试代码(main函数)3 运行效果1 树形结构(TreeItem类) 这里通用型树形结构为TreeItem类&…

初学Java web(七)RequestResponse

Request&Response Request:获取请求数据 Response:设置响应数据 一.Request对象 1.Request继承体系 Tomcat需要解析请求数据,封装为requestx对象并且创建requestx对象传递到service方法中 使用request对象,查阅JavaEE API文档的HttpServletReque…

rocketMq架构原理精华分析(一)

rocketMq架构原理精华分析是我们这篇文章的核心,从消息中间件的对比、架构模型、消息模型、常见问题等逐一分析: 一、中间件对比: RabbitMq 集群效果不太好,底层不是java 语言,研究原理比较困难; Kafka是…

前端面试题之计算机网络篇 OSI七层网络参考模型

互联网数据传输原理 |OSI七层网络参考模型 OSI七层网络参考模型 应用层:产生网络流量的程序表示层:传输之前是否进行加密或者压缩处理会话层:查看会话,查木马 netstat-n传输层:可靠传输、流量控制、不可…

亿级流量的互联网项目如何快速构建?手把手教你构建思路

一. 大流量的互联网项目 1.项目背景 索尔老师之前负责的一个项目,业务背景是这样的。城市的基础设施建设是每个城市和地区都会涉及到的,如何在基建工地中实现人性化管理,是当前项目的主要诉求。该项目要实现如下目标: 工地工人的…

C语言实现http下载器(附代码)

C语言实现http的下载器。 例:做OTA升级功能时,我们能直接拿到的往往只是升级包的链接,需要我们自己去下载,这时候就需要用到http下载器。 这里分享一个: 功能: 1、支持chunked方式传输的下载 2、被重定…

Apollo开放平台8.0发布:多维升级“为开发者而生”

Apollo开放平台8.0重磅发布:多维升级“为开发者而生” Apollo开放平台迎来8.0版本,百度自动驾驶开放平台迈向易用性时代 百度Apollo EDU计划进展公布:已覆盖自动驾驶技术人才33.5万、700多所院校 Apollo Studio学习实践社区上线,新…

剑指offer----C语言版----第一天

目录 1. 数组中重复的数字Ⅰ 1.1 题目描述 1.2 思路一 1.3 思路二 1.4 思路三(最优解) 1. 数组中重复的数字Ⅰ 原题:剑指 Offer 03. 数组中重复的数字 - 力扣(LeetCode)https://leetcode.cn/problems/shu-zu-zhong-…

Python语言快速入门上

目录 1、前言 2、变量和常量 1)Python对象模型 2)Python变量 二、运算符和表达式 【运算符和表达式】 【位运算符】 【逻辑运算符】 【成员运算符】 【身份运算符】 【常用内置函数】 【基本输入输出】 【模块导入与使用】 【Python代码编…

【PCB专题】Allegro导出3D文件

在PCB布局时,已经决定了大部分器件要放置的位置。如接口、主要的芯片、模块等。因为放置好器件后可能与结构干涉,如果没有发现,那么不得不在Layout的后期调整器件位置,增加工作量。所以前期布局基本确定后就需要导出3D文件给结构工程师,由他查看是否有器件与结构、螺丝孔等…

全志Tina Linux Display 开发指南支持百问网T113 D1-H哪吒DongshanPI-D1s V853-Pro等开发板

1 概述 让显示应用开发人员了解显示驱动的接口及使用流程,快速上手,进行开发;让新人接手工作时能快速地了解驱动接口,进行调试排查问题。sunxi 平台DE1.0/DE2.0。与显示相关的应用开发人员,及与显示相关的其他模块的开…

操作系统期末考试必会题库1——引言+用户界面

1.请简要描述操作系统的定义及其功能。 操作系统定义: 是计算机系统中的一个系统软件,是一些程序模块的集合 ,它们管理和控制计算机系统中的软硬件资源,合理的组织计算机的工作流程,以便有效的利用这些资源为用户提供一…