热门标签 | 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并持续关注。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 在多线程编程环境中,线程之间共享全局变量可能导致数据竞争和不一致性。为了解决这一问题,Linux提供了线程局部存储(TLS),使每个线程可以拥有独立的变量副本,确保线程间的数据隔离与安全。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • Keras 实战:自编码器入门指南
    本文介绍了使用 Keras 框架实现自编码器的基本方法。自编码器是一种用于无监督学习的神经网络模型,主要功能包括数据降维、特征提取等。通过实际案例,我们将展示如何使用全连接层和卷积层来构建自编码器,并讨论不同维度对重建效果的影响。 ... [详细]
  • js常用方法(1)startWithJava代码varstartsWithfunction(str,regex){if(regexundefined||strundefined|| ... [详细]
  • 本文介绍了一个项目中如何在Windows平台上实现多声道音频数据的采集,特别是针对DANTE音频接口的8路立体声音频通道。文章详细描述了使用Windows底层音频API进行音频采集的方法,并提供了一个具体的实现示例。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文介绍了一种解决二元可满足性(2-SAT)问题的方法。通过具体实例,详细解释了如何构建模型、应用算法,并提供了编程实现的细节和优化建议。 ... [详细]
  • 本题旨在通过给定的评级信息,利用拓扑排序和并查集算法来确定全球 Tetris 高手排行榜。题目要求判断是否可以根据提供的信息生成一个明确的排名表,或者是否存在冲突或信息不足的情况。 ... [详细]
  • 在 Go 语言中,& 和 * 是两个常令人困惑的操作符。本文将详细介绍这两个操作符的功能及其应用场景,帮助开发者更好地理解和使用它们。 ... [详细]
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社区 版权所有