实现现象:当按某个按键,将打印按键引脚。
#define KEY2_PIN_NUM P2_4
#define KEY2_GPIO_PIN GPIO_GetPin(KEY2_PIN_NUM)
#define KEY3_PIN_NUM P2_3
#define KEY3_GPIO_PIN GPIO_GetPin(KEY3_PIN_NUM)
//#define KEY4_PIN_NUM P3_5
//#define KEY4_GPIO_PIN GPIO_GetPin(KEY4_PIN_NUM)
#define KEY1_PIN_NUM P4_1
#define KEY1_GPIO_PIN GPIO_GetPin(KEY1_PIN_NUM)
#define KEY0_PIN_NUM P4_0
#define KEY0_GPIO_PIN GPIO_GetPin(KEY0_PIN_NUM)
static bool key0_sta = false;
static bool key1_sta = false;
static bool key2_sta = false;
static bool key3_sta = false;
void m_key_handler(bool *p_pre_key_sta,uint32_t key_gpio_pin)
{
uint8_t temp;
temp = GPIO_ReadInputDataBit(key_gpio_pin);
if ( 0 == temp)
{
if ( false==p_pre_key_sta[0] )
{
DBG_DIRECT("0X%X-key push line:%d\n",key_gpio_pin,__LINE__);
p_pre_key_sta[0] = true;
}
} else
{
p_pre_key_sta[0] = false;
}
}
void polling_key_demo(void)
{
Pad_Config(KEY0_PIN_NUM, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH);
Pad_Config(KEY1_PIN_NUM, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH);
Pad_Config(KEY2_PIN_NUM, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH);
Pad_Config(KEY3_PIN_NUM, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH);
Pinmux_Config(KEY0_PIN_NUM, DWGPIO);
Pinmux_Config(KEY1_PIN_NUM, DWGPIO);
Pinmux_Config(KEY2_PIN_NUM, DWGPIO);
Pinmux_Config(KEY3_PIN_NUM, DWGPIO);
RCC_PeriphClockCmd(APBPeriph_GPIO, APBPeriph_GPIO_CLOCK, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = KEY0_GPIO_PIN | KEY1_GPIO_PIN | KEY2_GPIO_PIN | KEY3_GPIO_PIN ;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_ITCmd = DISABLE;
GPIO_Init(&GPIO_InitStruct);
while (1)
{
m_key_handler(&key0_sta,KEY0_GPIO_PIN);
m_key_handler(&key1_sta,KEY1_GPIO_PIN);
m_key_handler(&key2_sta,KEY2_GPIO_PIN);
m_key_handler(&key3_sta,KEY3_GPIO_PIN);
}
}