极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9968|回复: 6

一个按键短按、长按检测程序

[复制链接]
发表于 2016-12-12 21:09:58 | 显示全部楼层 |阅读模式
对一个按键短按、长按检测程序:
#define BUTTON_PIN_1     7       // 定义一个按键Button pin1
#define DC_PIN                13      // LED pin

int get_key(void)
{    int k0,k1,tt=0;
AA1:  k0=digitalRead(BUTTON_PIN_1);  delay(30);
      k1=digitalRead(BUTTON_PIN_1);
      if(k1==LOW) goto AA1;  //判断按键是否低电平,如果低,循环检测,如果高则下一句
AA2:     tt++;                        //对按键高电平计数
      k0=digitalRead(BUTTON_PIN_1);  delay(10);
      k1=digitalRead(BUTTON_PIN_1);
      if(k1==HIGH) goto AA2;  //判断按键是否高电平,如果高,继续计数,如果低电平,则表示按键结束
   if(tt<30)    return 11;         //如果按键时间小于30*10ms=0.3s,则返回“11”,也可以自己任意定义返回值
   if(tt>150)  return 12;         //如果按键时间大于150*10ms=1.5s,则返回“22”,也可以自己任意定义返回值,如果需要更长时间,修改系数150即可
}

void setup() {
  pinMode(BUTTON_PIN_1,INPUT);
  pinMode(DC_PIN,OUTPUT);
  delay(100);
  digitalWrite(DC_PIN,LOW);
}
//短按<300ms,LED亮;
//长按>1500ms,  LED熄灭。
void caidan()  /*菜单选择*/
{  int ch;
for(;;)
{       ch=get_key();
  switch(ch)
  {
   case 11:    /*短按LED亮 */
    digitalWrite(DC_PIN,HIGH);
    delay(10);
    break;

   case 12:    /*长按LED灭 */
    digitalWrite(DC_PIN,LOW);
    delay(10);
    break;
   defult: break;
  } /*   End of switch   */
} /*   End for(;;)     */
} /*  End caidan()    */

void loop()
{   
  while(1) {
          caidan();
          delay(10);
        }//End while
}
回复

使用道具 举报

发表于 2016-12-13 08:08:15 | 显示全部楼层
其实对于一些按键  感觉这个不适用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 14:55:02 | 显示全部楼层
单片机菜鸟 发表于 2016-12-13 08:08
其实对于一些按键  感觉这个不适用

其实可以在函数里面判断多个按键的
回复 支持 反对

使用道具 举报

发表于 2016-12-13 15:08:30 | 显示全部楼层
hubertdong 发表于 2016-12-13 14:55
其实可以在函数里面判断多个按键的

没有  我是说防抖那里
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-13 18:05:18 | 显示全部楼层
单片机菜鸟 发表于 2016-12-13 15:08
没有  我是说防抖那里

经验证,对小型的按键防抖还行
回复 支持 反对

使用道具 举报

发表于 2017-1-23 09:30:36 | 显示全部楼层
hubertdong 发表于 2016-12-13 14:55
其实可以在函数里面判断多个按键的

对于,红外按键,
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-11-18 02:46 , Processed in 0.073967 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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