STM32按键技巧

按键初始化:

void KEY_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE, ENABLE); //使能PORTA,PORTE 时钟
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //设置成上拉输入
 GPIO_Init(GPIOE, &GPIO_InitStructure);    //初始化GPIOE.2,3,4
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  //设置成下拉输入
 GPIO_Init(GPIOA, &GPIO_InitStructure);    //初始化GPIOA.0
}

注:以上函数初始化GPIOE.2,3,4作为上拉输入,GPIOA.0作为下拉输入。上或下拉根据硬件电路来选择,若硬件电路触发输出高电平,对应IO配置为下拉输入,反之亦然。

长或短按配置:

u8 KEY_Scan(u8 mode)
{
 static u8 key_up = 1;
 if(mode)key_up = 1;
 if(key_up && (KEY0==0||KEY1==0||KEY2==0||KEY3==1))
 {
  delay_ms(20); //按键消抖
  key_up = 0;
  if(KEY0==0) return 1;
  else if(KEY1==0) return 2;
  else if(KEY2==0) return 3;
  else if(KEY3==1) return 4;
  delay_ms(500); //按键延时
 }
 else if(KEY0==1 && KEY1==1 && KEY2==1 && KEY3==0)
  key_up = 1;
 return 0;
}

注:上述程序中,形参mode为模式选择。mode=0,若触发其中之一按键,key_up=0,此时返回对应键值,而后结束程序。为短按;mode=1,若触发其中按键之一,key_up=1,返回对应按键值,延时500毫秒,满足循环条件继续返回对应键值。为长按。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值