美文网首页C语言深度学习
嵌入式C语言学习系列第1篇---单片机按键消抖操作

嵌入式C语言学习系列第1篇---单片机按键消抖操作

作者: CodeAllen | 来源:发表于2018-07-08 10:46 被阅读27次

基本思想就是监测,延时,监测。。。,放进循环中可进行扫描式操作

/**
  * 函数功能: 读取按键KEY1的状态
  * 输入参数:无
  * 返 回 值: KEY_DOWN:按键被按下;
  *           KEY_UP  :按键没被按下
  * 说    明:无。
  */
KEYState_TypeDef KEY1_StateRead(void)
{
  /* 读取此时按键值并判断是否是被按下状态,如果是被按下状态进入函数内 */
  if(HAL_GPIO_ReadPin(KEY1_GPIO,KEY1_GPIO_PIN)==KEY1_DOWN_LEVEL)
  {
    /* 延时一小段时间,消除抖动 */
    HAL_Delay(10);
    /* 延时时间后再来判断按键状态,如果还是按下状态说明按键确实被按下 */
    if(HAL_GPIO_ReadPin(KEY1_GPIO,KEY1_GPIO_PIN)==KEY1_DOWN_LEVEL)
    {
      /* 等待按键弹开才退出按键扫描函数 */
      while(HAL_GPIO_ReadPin(KEY1_GPIO,KEY1_GPIO_PIN)==KEY1_DOWN_LEVEL);
       /* 按键扫描完毕,确定按键被按下,返回按键被按下状态 */
      return KEY_DOWN;
    }
  }
  /* 按键没被按下,返回没被按下状态 */
  return KEY_UP;
}

中断模式(利用io口回调中断中处理)

/**
  * 函数功能: 按键外部中断服务函数
  * 输入参数: GPIO_Pin:中断引脚
  * 返 回 值: 无
  * 说    明: 无
  */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin==KEY1_GPIO_PIN)
  {
HAL_Delay(20);/* 延时一小段时间,消除抖动 */
if(HAL_GPIO_ReadPin(KEY1_GPIO,KEY1_GPIO_PIN)==KEY1_DOWN_LEVEL)
{
  BEEP_TOGGLE;
  LED1_ON;
  LED2_ON;
  LED3_ON;
}
__HAL_GPIO_EXTI_CLEAR_IT(KEY1_GPIO_PIN);
  }
  else if(GPIO_Pin==KEY2_GPIO_PIN)
  {
HAL_Delay(20);/* 延时一小段时间,消除抖动 */
if(HAL_GPIO_ReadPin(KEY2_GPIO,KEY2_GPIO_PIN)==KEY2_DOWN_LEVEL)
{
  BEEP_TOGGLE;
  LED1_OFF;
  LED2_OFF;
  LED3_OFF;
}
__HAL_GPIO_EXTI_CLEAR_IT(KEY2_GPIO_PIN);
  }
}

相关文章

  • 嵌入式C语言学习系列第1篇---单片机按键消抖操作

    基本思想就是监测,延时,监测。。。,放进循环中可进行扫描式操作 中断模式(利用io口回调中断中处理)

  • C语言简介

    C语言兼有高级语言和低级语言的特点 广泛应用于操作系统和应用软件的编写以及单片机和嵌入式系统的开发 C语言的产生 ...

  • C语言学不会,编程能力无法提升,原来是这些习惯造成的,赶快改掉!

    现在很多小伙伴都在学习C语言,C语言作为一门入门语言可以让你更加容易的了解计算机原理且C语言想单片机嵌入式方向发展...

  • 学习单片机的四个阶段

    第一阶段:学会C语言的常用语法,熟悉51单片机开发平台软件keil的操作,了解单片机的大概原理特性,能读懂按键,数...

  • 实验室项目小结

    1 嵌入式操作系统 为什么要用嵌入式操作系统 普通的单片机编程:程序(软件)——单片机硬件; 嵌入式操作系统开发:...

  • 13 矩阵按键

    单片机STC89C52学习——13 矩阵按键 汇总:00 单片机STC89C52学习参考教程:普中科技 1 工作原...

  • 12 独立按键

    单片机STC89C52学习——12 独立按键 汇总:00 单片机STC89C52学习参考教程:普中科技 1 工作原...

  • 2020-01-16

    今天晚上正式开始学习c语言了。经过好几天的看bilibili的朱友鹏讲解嵌入式及他的专栏,发现单片机和嵌入式不是一...

  • 功能记录

    1、C语言可以做嵌入式开发。如51单片机、ARM等。 2、C语言可以写漂亮的界面。以windows开发为例,你可以...

  • 2018-02-13@单片机

    按键程序 文天祥10天学会单片机系列

网友评论

    本文标题:嵌入式C语言学习系列第1篇---单片机按键消抖操作

    本文链接:https://www.haomeiwen.com/subject/rhtouftx.html