多按键都触发
比如:按键1、按键2、按键3都触发动作--亮灯,思路是每个按键都触发中断,然后在中断里实现亮灯操作
过程:我这里直接定义了按键的数量为三个(改成你的按键数量)
:#define CONFIG_ELEMENT_NUM 6
1: 按键io初始化打开每个按键的中断:
static void _button_init(void)
{
uint8_t i = 0;
GPIO_InitTypeDef gpio_init[ELEMENT_NUM];
for (i = 0; i < ELEMENT_NUM; i++) {
gpio_init[i].GPIO_Pin = gpio_key_map[i]%8;
gpio_init[i].GPIO_Mode = GPIO_Mode_In_Up;
gpio_init[i].GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init((GPIO_TypeDef *)(gpio_key_map[i]/8), &gpio_init[i]);
zero_gpio_init();
/*Interrupt configuration*/
GPIO_SetInterrupt((GPIO_TypeDef *)(gpio_key_map[i]/8), gpio_key_map[i]%8, Fall_Interrupt|Rising_Interrupt);
}
NVIC_Configuration(gpio_IRQn, 1, ENABLE);
}
2:在中断处理函数里实现操作:
void GPIO_IRQHandler(uint32_t unix_time)
{
uint8_t i = 0;//0 1 2 3 4 5
for(i = 0; i < ELEMENT_NUM; i++)
{
uint8_t val = GPIO_ReadDataBit((GPIO_TypeDef *)(gpio_key_map[i]/8), gpio_key_map[i]%8);//读取按键io值
if(val == 0)
{
rex_gpio_set(gpio_light[0], 1);//,设置灯的亮灭--开灯
}
}
}