又好久没来写blog,最近在做项目发现之前写的stm32操作都忘了,还好做了个记录,回来看了下很多忘了的就又知道怎么做了。

下面是我之前写的一个按键检测的框架,适合比较多的按键操作,从信号接收、滤波、最好处理按键任务,大体上没什么问题,不过没具体测试过到时可能会有bug。

 /******************************************************************************
* @file button.c
* @author wule
* @version
* @date
* @brief
******************************************************************************
*
*****************************************************************************/ typedef unsigned char ButtonSizeType; typedef enum{
RESET = ,
SET = !RESET,
}FLAG; typedef struct button_bit{
ButtonSizeType button1:;
ButtonSizeType button2:;
ButtonSizeType button3:;
ButtonSizeType button4:;
ButtonSizeType button5:;
ButtonSizeType button6:;
ButtonSizeType button7:;
ButtonSizeType button8:;
}ButtonBitType; typedef union
{
ButtonBitType button_bit;
ButtonSizeType button;
}ButtonType; ButtonType InputFlag; //初始化按键标志状态
void Init_Button_Variable(void)
{
InputFlag.button = ;
} //判断函数,读取每个按键的状态
ButtonSizeType ReadButtonBit(void)
{
ButtonType button_bit; button_bit.button = ; button_bit.button_bit.button1 = ;
button_bit.button_bit.button3 = ;
button_bit.button_bit.button5 = ; return button_bit.button;
}
//滤波,返回值代表当前按键的值
ButtonSizeType Button_Filter(void)
{
ButtonSizeType bf_buf;
static ButtonSizeType bf_pre_buf = ,bf_backval = ;
static unsigned char bf_filtercnt = ; bf_buf = ReadButtonBit(); if(bf_buf != bf_backval && bf_buf == bf_pre_buf)//判断两次是否相同
{
bf_filtercnt ++;
if(bf_filtercnt > )//作一个简单的滤波
{
bf_backval = bf_pre_buf;
}
}
else
{
bf_pre_buf = bf_buf;
bf_filtercnt = ;
} return bf_backval;
}
//处在一个时间可控的位置,这里可以实现各种按键的操作
void ButtonTask(void)
{
ButtonType bt_state = Button_Filter();//得到按键状态 if(InputFlag.button_bit.button1 == && bt_state.button_bit.button1 == )
{
//单次触发
}
else if(InputFlag.button_bit.button1 == && bt_state.button_bit.button1 == )
{
//单次释放
} if(bt_state.button_bit.button1 == )
{
//计时触发
}
else
{
//结束判断按的时间
}
}

【C语言】单片机上的按键检测框架的更多相关文章

  1. nRF52832 矩阵按键调试 同一列上的按键 任意两个按键 按下 检测不到低电平(电平拉不下来)

    参考链接:https://blog.csdn.net/zhanghuaishu0/article/details/78505045 调试过程中发现 同一列上的按键 任意两个按键 按下 检测不到低电平( ...

  2. 使用Twitter异常检测框架遇到的坑

    在Github上搜索“Anomaly Detection”,Twitter的异常检测框架(基于R语言)高居榜首,可见效果应该不错: 但是活跃度并不高,3-4年没人维护了: 因此在使用时难免会遇到一些坑 ...

  3. nRF51822外设应用[2]:GPIOTE的应用-按键检测

    版权声明:本文为博主原创文章,转载请注明作者和出处.    作者:强光手电[艾克姆科技-无线事业部] 1. nRF51822寄存器类型 nRF51822的寄存器和一般的单片机有所差别,nRF51822 ...

  4. STM32f103按键检测程序实现长按短按

    背景 只要使用单片机,按键检测基本上是一定要实现的功能.按键检测要好用,最重要的是实时和去抖.初学者往往会在主循环调用按键检测程序(实时)并利用延时去抖(准确).这种在主循环内延时的做法对整个程序非常 ...

  5. 按键检测GPIO输入

    1. 项目 通过按键控制开关LED灯,按下按键灯亮,再按一下灯灭. 2. 代码 mian.c #include "stm32f10x.h" //相当于51单片机中的 #includ ...

  6. 第12章 GPIO输入—按键检测

    第12章     GPIO输入—按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  7. 第12章 GPIO输入-按键检测—零死角玩转STM32-F429系列

    第12章     GPIO输入—按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  8. 谁能用通俗的语言解释一下什么是 RPC 框架

    转载自知乎:https://www.zhihu.com/question/25536695 知乎上很多问题的答案还是很好的,R大就经常在上面回答问题~ 谁能用通俗的语言解释一下什么是 RPC 框架? ...

  9. 第13章 GPIO输入—按键检测

    本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 按键检测使用到GPIO外设的基本输入功能,本章中不再赘 ...

随机推荐

  1. 无法添加sql server ER图

    Database diagram support objects cannot be installed because this database does not have a valid own ...

  2. mysql 性能分析套件

    #!/usr/local/python3./bin/python3. #!coding:utf- #################################### #目地:用于诊断mysql性 ...

  3. 8051、ARM和DSP指令周期的测试与分析

    在实时嵌入式控制系统中,指令周期对系统的性能有至关重要的影响.介绍几种最常用的微控制器的工作机制,采用一段循环语句对这几种微控制器的指令周期进行测试,并进行分析比较.分析结论对系统控制器的选择有一定的 ...

  4. jQuery之位置

    1.offset()获取匹配元素在相对浏览器窗口的偏移量 返回一个对象,包括两个属性.left:相对浏览器窗口左边的距离.top:相对浏览器顶部的距离.  $("#div1").o ...

  5. Redis Clients Handling

    This document provides information about how Redis handles clients from the point of view of the net ...

  6. C#中Split分隔字符串的应用(C#、split、分隔、字符串)

    转载地址 .用字符串分隔: using System.Text.RegularExpressions; string str="aaajsbbbjsccc"; string[] s ...

  7. python多线程简单例子

    python多线程简单例子 作者:vpoet mail:vpoet_sir@163.com import thread def childthread(threadid): print "I ...

  8. Java菜鸟学习笔记--数组篇(三):二维数组

    定义 //1.二维数组的定义 //2.二维数组的内存空间 //3.不规则数组 package me.array; public class Array2Demo{ public static void ...

  9. JAVA JNI

    jni非常好的一篇文章 http://m.blog.csdn.net/article/details?id=22827307 JAVA JNI介绍 http://blog.csdn.net/cyg08 ...

  10. cenos 7 安装php7

    1. CentOS/RHEL 7.x: rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm ...