文章
博客 网店

 ESP8266 IDF开发7-硬件定时器扫描按键输入


ESP_IDF提供了一种硬件定时器使用接口,这在类似扫描按键这种应用上是个不错的选择,使用硬件定时器检测按键相比任务中扫描方式有两个优势
1.占用系统资源少
2.响应有保障,不丢按键操作
以下为实现示例:

包含头文件

#include "driver/hw_timer.h"

#define GPIO_KEY_PIN 13


引脚初台化


  gpio_config_t io_conf;
  
  //按键检测引脚初始化
  io_conf.intr_type = GPIO_INTR_DISABLE;
  io_conf.mode = GPIO_MODE_INPUT;
  io_conf.pin_bit_mask = 1<   io_conf.pull_down_en = 0;
  io_conf.pull_up_en = 1;//上接电阻打开
  gpio_config(&io_conf);



硬件定时器安装

  //硬件定时器,用于扫描按键输入
  hw_timer_init(scan_timer,0);
  hw_timer_alarm_us(5000,true); //5ms中断


定时器回调函数(即定时器执行内容),注意该函数是在中断中调用

//5ms定时器 按键输入检测
void scan_timer(void* parameter)
{

  if(gpio_get_level(GPIO_KEY_PIN)==0) //按下
  {
    if(g_KeyScanCnt < 1000)
      g_KeyScanCnt++;
  }
  else
  {
    if(g_KeyScanCnt > 3) 
    {
      if(g_KeyScanCnt < 600)//短按
      {
        PostMessageFromISR(ID_MSG_KEY,0);//按键确认发送到处理任务
      }
      else //长按
      {
        PostMessageFromISR(ID_MSG_KEY,1);//按键确认发送到处理任务
      }
    }
    g_KeyScanCnt=0;
  }
}



芯艺工作室    蒙ICP备06005492号
Copyright© 2004-2023 ChipArt Studio All Rights Reserved