热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【STM32随笔一】按键消抖处理

【STM32随笔一】按键消抖处理【STM32随笔一】按键消抖处理通过计数的形式,对按键进行消抖处理,而非用延时的形式,具体可向下查看。一、按键类型说明以下定义了两个类型在接下

【STM32随笔 一】按键消抖处理


【STM32随笔 一】按键消抖处理

通过计数的形式,对按键进行消抖处理,而非用延时的形式,具体可向下查看。

一 、按键类型说明

以下定义了两个类型在接下来的程序下会用到,释义可看注释

//返回类型
typedef enum{
eErr_Ok, //返回成功
eErr_Fail //返回失败
}err_t;
//函数类型
typedef u8 (*KeyCallBack_t)(void);
//按键类型
typedef struct
{u16 usCnt; //按键按下或者弹起计数u8 ucActiveLevel; //有效电平KeyCallBack_t ucValCallBack; //按键值回调函数u16 usDebounDly; //消抖时间}key_t;

二 、按键类型初始化

key_t 是按键类型,可查看(一)
key_t *pkey:需初始化的按键类型
u8 active:设置检测高电平还是低电平
u16 dly:设置消抖时间
可查看以下代码实现:

// An highlighted block
void vKey_Init(key_t *pkey,u8 active,u16 dly,KeyCallBack_t callback)
{pkey->usCnt = 0;pkey->ucActiveLevel = active;pkey->ucValCallBack= callback;pkey->usDebounDly = dly;
}

二 、按键消抖实现

如果当前按键电平等于设置的电平
{计数值加1;如果计数值大于等于设置的电平{计数值 = 边界值;//防止计数值累加溢出返回成功;}
}
否则
{计数值清零;
}
返回失败;以下是代码的实现:

err_t xKey_Detect(key_t *pkey)
{if(pkey->ucValCallBack()==pkey->ucActiveLevel){pkey->usCnt++; //if(pkey->usCnt > pkey->usDebounDly) //{pkey->usCnt = pkey->usDebounDly; //return eErr_Ok;}}else{pkey->usCnt = 0;}return eErr_Fail;
}

三、在单片机中的实现

此代码是在stm32f407ve中实现的,只是对高电平消抖,如有兴趣自己可以对高低电平都消抖。这只是初始版本,以下是代码自己可下载:
在QQ群中可下载:857081287
如果觉得楼主写可以给个打赏(支付宝),让楼主更有信心写下去,谢谢!
在这里插入图片描述


推荐阅读
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 前文|功能型_品读鸿蒙HDF架构
    前文|功能型_品读鸿蒙HDF架构 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 本文探讨了如何使用pg-promise库在PostgreSQL中高效地批量插入多条记录,包括通过事务和单一查询两种方法。 ... [详细]
  • Keras 实战:自编码器入门指南
    本文介绍了使用 Keras 框架实现自编码器的基本方法。自编码器是一种用于无监督学习的神经网络模型,主要功能包括数据降维、特征提取等。通过实际案例,我们将展示如何使用全连接层和卷积层来构建自编码器,并讨论不同维度对重建效果的影响。 ... [详细]
  • Node.js 中 GET 和 POST 请求的数据处理
    本文详细介绍了如何在 Node.js 中使用 GET 和 POST 方法来处理客户端发送的数据。通过示例代码展示了如何解析 URL 参数和表单数据,并提供了完整的实现步骤。 ... [详细]
  • 本文详细介绍了ASP.NET缓存的基本概念和使用方法,包括输出缓存、数据缓存及其高级特性,如缓存依赖、自定义缓存和缓存配置文件等。通过合理利用这些缓存技术,可以显著提升Web应用程序的性能。 ... [详细]
  • C++ 中的可调用对象及其应用
    本文介绍了 C++ 中的可调用对象概念,包括函数指针、仿函数、类成员函数指针等,并详细探讨了 `std::function` 和 `std::bind` 在统一处理这些可调用对象时的作用和实现方法。 ... [详细]
  • 开发笔记:图像分割基于阙值+边缘检测+区域法图像分割matlab源码含GUI
    开发笔记:图像分割基于阙值+边缘检测+区域法图像分割matlab源码含GUI ... [详细]
  • 本文详细介绍了Linux内核中misc设备驱动框架的实现原理及应用方法,包括misc设备的基本概念、驱动框架的初始化过程、数据结构分析以及设备的注册与注销流程。 ... [详细]
  • 本题要求计算给定两个正整数a和b时,2的-a次方与2的-b次方之和,并将结果以最简分数形式表示。输入包括多组测试数据,每组数据包含两个在2到20范围内的整数。 ... [详细]
  • Barbican 是 OpenStack 社区的核心项目之一,旨在为各种环境下的云服务提供全面的密钥管理解决方案。 ... [详细]
  • 本文介绍了如何通过ARM编译器组件重定向标准C运行时库的I/O函数,以适应不同的硬件平台。原文链接:https://www.keil.com/pack/doc/compiler/RetargetIO/html/retarget_overview.html ... [详细]
author-avatar
书友55218170
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有