找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4744|回复: 2
收起左侧

简单的STM32开关按键单击、双击、三击以及长安检测程序

[复制链接]
ID:147114 发表于 2019-8-24 09:08 | 显示全部楼层 |阅读模式
下列为一路按键检测,可以增加到多路,原理都是这样的,工程应用在附件里。

STM32单片机源程序如下:

                      //按键检测
void key_scan(void)
{
key_s.get_key_num=get_key_value();
if(key_s.get_key_num)               //判断是否有按键按下
{
  switch(key_s.get_key_num)
  {
//============================================================================================   
   case KEY_1:                     //按键1按下
    switch(key_s.state)
    {
      case KEY_NONE:            //之前没有检测到按下
       key_s.state=KEY_1_DOWN;
       break;
      case KEY_1_DOWN:          //检测到按下
       key_s.long_count++;   //长按检测开始
        if(key_s.long_count>=KEY_LONG_TIME)
       {
        key_s.key_resault=KEY_1_LONG;
        key_s.state=KEY_1_LONG;
       }
       break;
      case KEY_1_UP:              //双击按下
       key_s.state=KEY_1_DUBDOW;
        key_s.count=0;
       break;
      case KEY_1_LONG:            //长按按下等待释放
       break;
      case KEY_1_DUBDOW:          //双击按下等待释放
       break;
      case KEY_1_TIEBLE:          //三击按下等待释放
       break;
      case KEY_1_DOUBLE:          //三击按下
        key_s.state=KEY_1_TIEBLE;
       break;
      
      default:
       break;
    }
    break;
   default:
    break;
  }
}
else
{
   switch(key_s.state)
   {
     case KEY_NONE:            //没有检测到按下
      key_s.count=0;
      key_s.double_count=0;
      key_s.long_count=0;
      key_s.trible_count=0;     
      break;
//============================================================================================     
     case KEY_1_DOWN:          //检测到按键1按下后松手
      key_s.state=KEY_1_UP;
     break;
     case KEY_1_UP:
       key_s.count++;         //单击计数超时检测
       key_s.double_count++;
       if(key_s.count>=KEY_DOUBLE_MAX)
       {
        key_s.key_resault=KEY_1_DOWN;
        key_s.state=KEY_NONE;
       }
      break;
      case KEY_1_LONG:
       key_s.state=KEY_NONE;
       break;
      case KEY_1_DUBDOW:
       key_s.state=KEY_1_DOUBLE;
       break;
      case KEY_1_DOUBLE:
       key_s.count++;        //双击计数超时检测
        key_s.trible_count++;
        if(key_s.count>=KEY_DOUBLE_MAX)
       {
        if((key_s.double_count>=KEY_DOUBLE_MIN)&&(key_s.double_count<=KEY_DOUBLE_MAX))
         {
          key_s.key_resault=KEY_1_DOUBLE;
         }
        key_s.state=KEY_NONE;
       }      
        break;
       case KEY_1_TIEBLE:
       if((key_s.trible_count>=KEY_DOUBLE_MIN)&&(key_s.trible_count<=KEY_DOUBLE_MAX))
        {
         key_s.key_resault=KEY_1_TIEBLE;
        }
       key_s.state=KEY_NONE;  
        break;
     default:
      break;
   }
}

}

全部资料51hei下载地址:
STM32_key_chank.7z (184.6 KB, 下载次数: 113)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:579837 发表于 2020-3-14 18:18 | 显示全部楼层
受教受教,谢谢
回复

使用道具 举报

ID:165291 发表于 2021-1-12 19:35 | 显示全部楼层
牛牛的,谢谢啊!拿来用下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表