历史上的今天
今天是: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;
}
史海拾趣
|
天线增益是指:在输入功率相等的条件下,实际天线与理想的辐射单元在空间同一点处所产生的信号的功率密度之比。它定量地描述一个天线把输入功率集中辐射的程度。增益显然与天线方向图有密切的关系,方向图主瓣越窄,副瓣越小,增益越高。 可以这样 ...… 查看全部问答> |
|
各路高手, 我现在遇到些问题:在取电池电量的时候用到Windows API了,但是还是总是有些问题。 public class SYSTEM_POWER_STATUS_EX2 { // Fields public byte ACLineStatus; public byte Backup ...… 查看全部问答> |
|
请问各位高手:我在安装 avr studio 4.19 完后,在打开程序出现 \"No compiler/assembler installed \" . 在办公电脑上装没事,在自家电脑上就有这样的现象。卸、装好多次了,还是一样。请问是什么原因?… 查看全部问答> |




