135 lines
3.0 KiB
C
135 lines
3.0 KiB
C
|
|
#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, //û<><C3BB><EFBFBD><EFBFBD>
|
|||
|
|
KEY_VAL_SHORT_PRESS, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
KEY_VAL_CONT_LONG_PRESS, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
KEY_VAL_SINGLE_LONG_PRESS, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
KEY_VAL_LONG_PRESS_LOOSEN, //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
|
|||
|
|
}KEY_VAL_e;
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
uint8_t KEY_STA[KEY_CHN_MAX];
|
|||
|
|
uint8_t key_val[KEY_CHN_MAX]; //0:û<><C3BB><EFBFBD><EFBFBD>, 1:<3A>̰<EFBFBD><CCB0>ɿ<EFBFBD>, 2:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3:<3A><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
|
|||
|
|
uint8_t key_longPress[KEY_CHN_MAX]; //0:û<><C3BB><EFBFBD><EFBFBD>, 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
uint8_t key_time[KEY_CHN_MAX];
|
|||
|
|
uint8_t delayCnt[KEY_CHN_MAX];
|
|||
|
|
}KEY_t;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/****************<2A><><EFBFBD><EFBFBD>IO<49><4F><EFBFBD><EFBFBD>*****************/
|
|||
|
|
#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<4F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>0-<2D><><EFBFBD>ŵ͵<C5B5>ƽ<EFBFBD><C6BD>(!0)-<2D><><EFBFBD>Ÿߵ<C5B8>ƽ */
|
|||
|
|
|
|||
|
|
/*******************************************/
|
|||
|
|
|
|||
|
|
#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;
|
|||
|
|
|
|||
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>*/
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
INPUT_NOT, //û<><C3BB><EFBFBD><EFBFBD>
|
|||
|
|
INPUT_SHORT_PRESS, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
INPUT_CONT_LONG_PRESS, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
INPUT_SINGLE_LONG_PRESS, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
INPUT_LONG_PRESS_LOOSEN, //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
|
|||
|
|
}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; //״̬<D7B4><CCAC>״̬
|
|||
|
|
|
|||
|
|
uint8_t reset_flag; //<2F><>λ<EFBFBD><CEBB>־
|
|||
|
|
|
|||
|
|
uint8_t output_state[MultIO_CHN_Max];
|
|||
|
|
|
|||
|
|
uint8_t input_state[MultIO_CHN_Max];
|
|||
|
|
uint8_t input_val[MultIO_CHN_Max]; //0:û<><C3BB><EFBFBD><EFBFBD>, 1:<3A>̰<EFBFBD><CCB0>ɿ<EFBFBD>, 2:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3:<3A><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
|
|||
|
|
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
|