32单片机学习之按键输入

2019-04-15 17:29发布

按键输入时将IO口用做输入使用,操作步骤为:1.按键初始化(使能端口时钟,若按键IO口与jtag重合,要关闭jtag,设置端口为上拉输入,其他与流水灯相同) void KEY_init()
 {
 GPIO_InitTypeDef GPIO_InitStructure;


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟


GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15;//PA15
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA15

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;//PC5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC5
 
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉  
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0
 }②按键防抖,有两种模式,一种支持长按,一种支持防抖u8 KEY_Scan(u8 mode)
{  
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1;  //支持连按  
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(100);//去抖动 
key_up=0;
if(KEY0==0)return KEY0_PRES;
else if(KEY1==0)return KEY1_PRES;
else if(WK_UP==1)return WKUP_PRES; 
}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;     
return 0;// 无按键按下
}