大学生
最后登录1970-1-1
在线时间 小时
注册时间2018-5-23
|
/***********************************************头文件**************************************************************/
#ifndef _BSP_KEY_
#define _BSP_KEY_
#include "stm32f10x.h"
typedef enum{
KEY_RESEALE=0,
KEY_WATING,
KEY_PRESSED
}KEY_STATE;
typedef enum{
KEY_NOPRESSED=0,
KEY_DOWN,
KEY_UP,
KEY_SHORTPERSSED,
KEY_LONG_PRESSED
}KEY_RESULT;
void key_config(void);
KEY_RESULT KEY_TouchDetect(void);
#endif /*_BSP_KEY_*/
/**************************************************.c文件****************************************************************/
void key_config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
GPIO_Init(GPIOA,&GPIO_InitStruct);
}
KEY_RESULT KEY_TouchDetect(void)
{
static KEY_STATE key_state =KEY_RESEALE;
KEY_RESULT key_result=KEY_NOPRESSED;
static uint32_t key_count=0;
switch(key_state)
{
case KEY_RESEALE:
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))
{
key_state=KEY_WATING;
key_result=KEY_NOPRESSED;
}
else
{
key_state=KEY_RESEALE;
key_result=KEY_NOPRESSED;
}
break;
case KEY_WATING:
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))
{
key_count++;
if(key_count>1000)
{
key_count=0;
key_state=KEY_PRESSED;
key_result=KEY_DOWN;
}
else
{
key_state=KEY_RESEALE;
key_result=KEY_NOPRESSED;
}
}
else
{
key_state=KEY_RESEALE;
key_result=KEY_NOPRESSED;
}
break;
case KEY_PRESSED:
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))
{
key_count++;
if(key_count<10000)
{
key_state=KEY_PRESSED;
key_result=KEY_SHORTPERSSED;
}
else
{
key_state=KEY_PRESSED;
key_result=KEY_LONG_PRESSED;
}
}
else
{
key_count=0;
key_state=KEY_RESEALE;
key_result=KEY_UP;
}
break;
}
return key_result;
}
/*******************************************************测试文件****************************************************************/
key_config();
while(1)
{
res=KEY_TouchDetect();
if(res==KEY_DOWN) printf("按键按下\n");
if(res==KEY_SHORTPERSSED) printf("按键短按\n");
if(res==KEY_LONG_PRESSED) printf("按键长按\n");
if(res==KEY_UP) printf("按键弹起\n");
}
/******************************************************end of file☺☺☺☺☺************************************************************************/
|
|