#ifndef _KEY_H_
#define _KEY_H_
#include "HAL_gpio.h" // 换成STM32F103对应的GPIO库
#include "type.h" // type.h主要是一些类型的重命名
#define KEY_UP_GRP GPIOA
#define KEY_UP_IDX GPIO_Pin_9
#define KEY_UP_IS_DOWN() GPIO_ReadInputDataBit(KEY_UP_GRP, KEY_UP_IDX)
#define KEY_UP_CONFIG() GPIOConfig(KEY_UP_GRP, KEY_UP_IDX, GPIO_Mode_IPU) // 这个函数我在之前帖子里面写过
#define KEY_DOWN_GRP GPIOA
#define KEY_DOWN_IDX GPIO_Pin_10
#define KEY_DOWN_IS_DOWN() GPIO_ReadInputDataBit(KEY_DOWN_GRP, KEY_DOWN_IDX)
#define KEY_DOWN_CONFIG() GPIOConfig(KEY_DOWN_GRP, KEY_DOWN_IDX, GPIO_Mode_IPU)
#define KEY_FUNC_GRP GPIOA
#define KEY_FUNC_IDX GPIO_Pin_11
#define KEY_FUNC_IS_DOWN() GPIO_ReadInputDataBit(KEY_FUNC_GRP, KEY_FUNC_IDX)
#define KEY_FUNC_CONFIG() GPIOConfig(KEY_FUNC_GRP, KEY_FUNC_IDX, GPIO_Mode_IPU)
#define KEY_TURN_GRP GPIOA
#define KEY_TURN_IDX GPIO_Pin_12 | GPIO_Pin_13
#define KEY_TURN_IS_DOWN() GPIO_ReadInputDataBit(KEY_TURN_GRP, KEY_TURN_IDX)
#define KEY_TURN_CONFIG() GPIOConfig(KEY_TURN_GRP, KEY_TURN_IDX, GPIO_Mode_IPU)
//====================================================================================
typedef enum
{
CONFIRM_KEY = 1,
FUNC_KEY,
UP_KEY,
DOWN_KEY
} key_event_t;
#define state_keyUp 0 //初始状态,未按键
#define state_keyDown 1 //键被按下
#define state_keyLong 2 //长按
#define state_keyTime 3 //按键计时态
#define return_keyUp 0x00 //初始状态
#define return_keyPressed 0x01 //键被按过,普通按键
#define return_keyLong 0x02 //长按
#define return_keyAuto 0x04 //自动连发
#define key_down 0 //按下
#define key_up 0xf0 //未按时的key有效位键值
#define key_longTimes 100 //10ms一次,200次即2秒,定义长按的判定时间
#define key_autoTimes 20 //连发时间定义,20*10=200,200毫秒发一次
#define KEYS1_VALUE 0xe0 //keyS1 按下
#define KEYS2_VALUE 0xd0 //keyS2 按下
#define KEYS3_VALUE 0xb0 //keyS3 按下
#define KEYS4_5_VALUE 0x70 //keyS4_5 按下
//====================================================================================
void KeyProcess(void); //T0定时器调用的工作函数
void KeyTimerInit(void);
#endif /* _KEY_H_ */ |