#ifndef KEY_H_ #define KEY_H_ #include "stdint.h" #define KEY_TEST1_Status GPIOB_ReadPortPin(GPIO_Pin_20) #define KEY_TEST2_Status GPIOB_ReadPortPin(GPIO_Pin_19) #define KEY_TEST3_Status GPIOB_ReadPortPin(GPIO_Pin_18) #define KEY_PRESS 0x00 #define KEY_LOOSEN 0x01 #define KEY_DELAY_COUNT 2 #define KEY_DELAY_COUNT_LONG 100 typedef enum { KEY_CH1, KEY_CHN_MAX, }KEY_CHN_e; typedef enum { KEY_STA_S0 = 0, KEY_STA_S1 = 1, KEY_STA_S2 = 2, }KEY_STA_e; typedef enum { KEY_VAL_NOT, //没按下 KEY_VAL_SHORT_PRESS, //单击 KEY_VAL_CONT_LONG_PRESS, //连续长按 KEY_VAL_SINGLE_LONG_PRESS, //长按单击 KEY_VAL_LONG_PRESS_LOOSEN, //长按松开 }KEY_VAL_e; typedef struct { uint8_t KEY_STA[KEY_CHN_MAX]; uint8_t key_val[KEY_CHN_MAX]; //0:没动作, 1:短按松开, 2:长按连击, 3:长按松开 uint8_t key_longPress[KEY_CHN_MAX]; //0:没动作, 1:长按单击 uint8_t key_time[KEY_CHN_MAX]; uint8_t delayCnt[KEY_CHN_MAX]; }KEY_t; /****************复用IO定义*****************/ #define MultIO_OUTPUT 1 #define MultIO_INPUT 2 #define MultIO_Pin1 GPIO_Pin_11 //PB11 #define MultIO_Pin1_ModeCfg(x) { if(x == MultIO_OUTPUT){GPIOB_ModeCfg(MultIO_Pin1, GPIO_ModeOut_PP_20mA);}else if(x == MultIO_INPUT){GPIOB_ModeCfg(MultIO_Pin1, GPIO_ModeIN_PU);} } #define MultIO_Pin1_H GPIOB_SetBits(MultIO_Pin1) #define MultIO_Pin1_L GPIOB_ResetBits(MultIO_Pin1) #define MultIO_Pin1_Read GPIOB_ReadPortPin(MultIO_Pin1) /* GPIOB端口引脚状态,0-引脚低电平,(!0)-引脚高电平 */ /*******************************************/ #define MultIO_OutPut_Time 5 #define MultIO_InPut_Time 12 #define MultIO_InPut_ScanTime 5 #define MultIO_Pin_High 0x01 #define MultIO_Pin_Low 0x00 #define MultIO_Input_PRESS MultIO_Pin_Low #define MultIO_Input_LOOSEN MultIO_Pin_High #define MultIO_Input_DELAY_COUNT 20 #define MultIO_Input_DELAY_COUNT_LONG 600 typedef enum { MultIO_CH1, MultIO_CHN_Max, }MultIO_Pin_CH_e; /*按键相关定义*/ typedef enum { INPUT_NOT, //没按下 INPUT_SHORT_PRESS, //单击 INPUT_CONT_LONG_PRESS, //长按 INPUT_SINGLE_LONG_PRESS, //长按单击 INPUT_LONG_PRESS_LOOSEN, //长按松开 }MULTIO_INPUT_VAL_e; typedef enum { INPUT_STA_S0 = 0, INPUT_STA_S1 = 1, INPUT_STA_S2 = 2, }MULTIO_INPUT_STATE_e; typedef enum { MultIO_IDLE, MultIO_Input_Mode, MultIO_Output_Mode, }MultIO_State_e; typedef struct { uint8_t State; //状态机状态 uint8_t reset_flag; //复位标志 uint8_t output_state[MultIO_CHN_Max]; uint8_t input_state[MultIO_CHN_Max]; uint8_t input_val[MultIO_CHN_Max]; //0:没动作, 1:短按松开, 2:长按连击, 3:长按松开 uint8_t last_input_val[MultIO_CHN_Max]; uint8_t delayCnt[MultIO_CHN_Max]; uint8_t delayOffCnt[MultIO_CHN_Max]; uint16_t input_time[MultIO_CHN_Max]; uint32_t wait_tick; }MultIO_State_t; void Key_Init(void); void Multipexing_IO_Init(void); void Multipexing_IO_Task(void); #endif