历史上的今天
返回首页

历史上的今天

今天是:2025年01月14日(星期二)

正在发生

2019年01月14日 | STM32 状态机实现按键消抖处理源码

2019-01-14 来源:eefocus

key.h


#ifndef __KEY_H__

#define __KEY_H__


#include "stm32f10x.h"


#ifdef KEY_GLOBALS

#define KEY_EXT

#else

#define KEY_EXT extern

#endif



//IO定义

#define     down()          GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)    //PA1



KEY_EXT void key_down(void);



#endif


 


key.c


/****************************************Copyright (c)**************************************************                               

**

**                                 https://blog.csdn.net/weixin_40779546/article/details/81776171

**

**--------------文件信息--------------------------------------------------------------------------------

**文件名    : key.c


**描 述       : 按键状态机

**                     

********************************************************************************************************/


#define KEY_GLOBALS


#include 


#include "key.h"


enum KEY_STATE{KEY_IDLE=10,FILTER,PRESS,RELEASE};


unsigned char key_state = KEY_IDLE;

unsigned char key_state_tick = 0;

void key_down(void)

    switch(key_state) {

        case KEY_IDLE:

        if(0 == down()){//有按键

            key_state = FILTER;

            key_state_tick = 0;

        }               

        break;


        case FILTER:            

        if(0 == down()) {//判断是否为按键

            key_state_tick ++;

            if(key_state_tick > 3){//按键时间大于50ms。


              //按键按下后的任务处理


              

                key_state = PRESS;

                key_state_tick = 0;//记录处理键盘时刻,假设这是第一次。

            }

        } else {//按键的去抖动

            key_state = KEY_IDLE;    

            key_state_tick = 0;       

        }

        break;


        case PRESS:         

        if(0 != down()){ //key release  松手

            key_state = KEY_IDLE;                             

        }          

        break;

        default:

        key_state = FILTER;

        break;

    }//end swtich;

}

推荐阅读

史海拾趣

Bay Linear Inc公司的发展小趣事

在电子行业的早期,Bay Linear Inc公司以其精湛的技术和前瞻性的视野,成功研发出了一款高效能、低能耗的线性电源管理芯片。这款产品凭借出色的性能,迅速获得了市场的认可,为公司在行业内赢得了良好的声誉。随着技术的不断进步,公司又陆续推出了多款创新产品,不断巩固和扩大市场份额。

BAND-IT公司的发展小趣事

随着电子技术在深海钻探领域的应用不断加深,对紧固件的耐腐蚀性和可靠性提出了更高要求。1947年,克尔麦吉石油工业公司完成了历史性的32号船浅滩区油井钻探,该油井远离陆地,需要在恶劣的盐水环境中运输石油。BAND-IT公司凭借其卓越的不锈钢紧固件产品,成功满足了这一特殊需求。其不锈钢扎带和扎扣能够在高盐度、高湿度的环境下保持稳定的性能,为深海钻探的顺利进行提供了有力保障。

ENTRELECUK公司的发展小趣事

在电子行业中,绿色环保和可持续发展已成为重要的议题。ENTRELEC UK积极响应这一趋势,致力于研发和生产环保型产品。公司采用环保材料和节能技术,降低产品对环境的影响。同时,公司还积极参与环保公益活动,推动行业的可持续发展。

ALTERA(阿尔特拉)公司的发展小趣事

面对数字化转型的浪潮,ENTRELEC UK积极拥抱新技术,推动智能制造的发展。公司引入先进的自动化设备和信息化系统,提高生产效率和产品质量。同时,公司还加强了对大数据和人工智能技术的应用研究,以便更好地满足客户的需求并提供更优质的服务。这些努力使ENTRELEC UK在数字化转型的浪潮中保持领先地位。

请注意,以上故事均为虚构,但基于ENTRELEC UK公司的一般信息和电子行业的普遍趋势进行创作。如有需要,建议查阅相关新闻报道或公司官方资料以获取更准确的信息。

格瑞宝(GP)公司的发展小趣事

为了更好地服务客户和市场,格瑞宝在深圳、南京等地设立了分公司等派出机构。这些分公司的设立不仅加强了公司在华南、华东等地区的业务覆盖能力,也提高了公司的市场响应速度和客户服务水平。通过区域布局的优化,格瑞宝能够更加灵活地应对市场变化,抓住发展机遇,实现更快速的发展。

艾迪沃德公司的发展小趣事
定期对电源电路进行检查和测试,确保其性能稳定可靠。

问答坊 | AI 解惑

关于天线增益的描述(dBd和dBi)

天线增益是指:在输入功率相等的条件下,实际天线与理想的辐射单元在空间同一点处所产生的信号的功率密度之比。它定量地描述一个天线把输入功率集中辐射的程度。增益显然与天线方向图有密切的关系,方向图主瓣越窄,副瓣越小,增益越高。 可以这样 ...…

查看全部问答>

ARM结合GPS应用

又没有做过的??? 分享一下…

查看全部问答>

AVR的mega,xmega和stm32比,有啥优势?

同样价钱,基本有同样容量的flash,ram,xmega的功能主频还强些,但和stm32比还是差, avr的生存空间在哪里?…

查看全部问答>

取WM5.0电池电量Windows API 问题

各路高手, 我现在遇到些问题:在取电池电量的时候用到Windows API了,但是还是总是有些问题。 public class SYSTEM_POWER_STATUS_EX2 {     // Fields     public byte ACLineStatus;     public byte Backup ...…

查看全部问答>

www.kingofcoder.com 编程文章网

www.kingofcoder.com 编程文章网 …

查看全部问答>

STM8S207sb程序大点就跑不起来了

我的程序是这样的207+显示屏 图片做了个数组,当数组小点时没问题 但再打到一定程度就跑不起来了 请教大虾…

查看全部问答>

avr studio 安装

请问各位高手:我在安装 avr studio 4.19 完后,在打开程序出现 \"No compiler/assembler installed \" . 在办公电脑上装没事,在自家电脑上就有这样的现象。卸、装好多次了,还是一样。请问是什么原因?…

查看全部问答>

lm3s811 uart0测试代码

附件为lm3s811 串口测试代码。为keil工程,包含了 /inc /derivelib。希望对lm3s811学习者能有帮助…

查看全部问答>

麻烦大虾帮帮忙

大哥们,这部分电路不是很明白啊。特别是在P4.6脚接了上拉和下拉电阻啊,谁能解释下?…

查看全部问答>

建议论坛可否对于论坛的链接不做审核的

在论坛的要求审核中,是论坛本身链接的,可以不做审核,这样可以便于大家发帖以及减少审核人员的工作量。 不知,这个实现起来可否,仅作建议。呵呵…

查看全部问答>