热门标签 | 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
如果觉得楼主写可以给个打赏(支付宝),让楼主更有信心写下去,谢谢!
在这里插入图片描述


推荐阅读
  • go 链路追踪_GoZero 是如何追踪你的请求链路?
    “go-zero是一个集成了各种工程实践的web和rpc框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。”序言微服务架构中,调用链可 ... [详细]
  • OpenCV入门(八)--形态学图像处理
    膨胀膨胀是指将一些图像(或图像中的一些区域,A)与核(B)进行卷积。核可以是任何的形状或大小,它拥有一个单独定义出来的参考点。膨胀举例:腐蚀腐蚀是 ... [详细]
  • 看这篇之前,如果没有看过之前的文章,移步拉到文章末尾查看之前的文章。回顾先捋一下,之前我们实现的Vue类,主要有一下的功能:属性和方法的代理proxy监听属性watcher事件对于 ... [详细]
  • 前两天有位朋友邀请我回答个问题,为什么MongoDB(索引)使用B-树而Mysql使用B+树?我觉得这个问题非常好,从实际应用的角度来学习数据结构,没有比这更好的方法了。因为 ... [详细]
  • 前面介绍过一种非顺序数据结构是散列表,本文将详细介绍另一种非顺序数据结构——树,它对于存储需要快速查找的数据非常有用二叉树、满二叉树、完全二叉树、堆、 ... [详细]
  • 下面,我用最简洁的文字尽可能作最详尽的回答:两者之间存在的“五大不同”。与此同时,着重说明MicrosoftWindows64位(x64)操作系统,相对于32位(x86)操作系统的最大优势和劣势是什 ... [详细]
  • Bzoj1185最小矩阵覆盖[旋转卡壳+凸包+处理[0]情况]
    题目链接题目大意:就是给你若干个点用一个最小的矩形把这些点覆盖掉就是给你若干个点用一个最小的矩形把这些点覆盖掉就是给你若干个点用一个最小的矩形把这些点覆盖掉解题思路& ... [详细]
  • Oracle 数据库 12.2新特性手册Core Improvements内核卷
    Oracle数据库12.2新特性手册-CoreImpro ... [详细]
  • 左上角|开局_#冲刺创作新星# O了个H(OpenHarmony羊了个羊复刻学习)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了#冲刺创作新星#O了个H(OpenHarmony羊了个羊复刻学习)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • poj 2421 Constructing Roads 解题报告
    题目链接:http:poj.orgproblem?id2421实际上又是考最小生成树的内容,也是用到kruskal算法。但稍稍有点不同的是, ... [详细]
  • MySQL的内存结构与物理结构
    从MySQL的物理结构和内存结构开始了解整个MySQL的运行机制,其中有几个特别重要的概念,也是平时工作中更加关注的地方,如:binlog、redolog、表空间、慢查询日志、My ... [详细]
  • 标准库Vector类型使用需要的头文件:#includeVector:Vector是一个类模板。不是一种数据类型。Vector ... [详细]
  • typedef是一种有趣的声明形式:它为一种类型引入新的名字,而不是为变量分配空间。在某些方面,typedef类似于宏文本替换——它并没有 ... [详细]
  • 【剑指offer】11.二叉树的深度
    总目录:算法之旅导航目录 1.问题描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视 ... [详细]
  • 在做linux下面的网络编程时写了如下一段程序[cpp:showcolumns]viewplaincopy102030405060708090100110120130140150& ... [详细]
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社区 版权所有