key.c支持按键连续按 S为0不支持连续按 S为1支持连续按
#include "KEY.H"
#include "delay.h"
void key_init(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
u8 key_scan(u8 s){
static u8 flag=1;//按钮松开的标记
if(s){
flag=1;}//s为1支持连续按
if(flag&&(key0==0||key1==0||key_up==1)){
delay_ms(30);//去抖动
flag=0;
if(key0==0){return key0_value;}
else if(key1==0){return key1_value;}
else if(key_up==1){return keyup_value;}
else if(key0==1&&key1==1&&key_up==0){flag=1;}
return 0;
}
}