单片机按键短按和长按的程序

单片机按键短按和长按的程序,第1张

不能给你程序,只能给你思路。

设置定时器(建设100ms),在设嫌闭置一个变量x,(100ms自加1)

在主循环中判断按键是否按下,并判断x的值大小;

假设 x每隔100ms加1

y是按键状态(为1表示按孙核下,为0 表示未按)

z记录则者掘按键状态的(初始值0)

b 记录长安 a记录短按

eg:

if(!z)

{

if(y)

{

a=1;

z=1

}

}

else if(x>10)// 1s

{

b=1

}

if(key==1)

 delay(10)//小延时防抖

 if(key==1)

 {

  delay(200)//短长分界线

  if(key==0)

   led1=!led1//即如果短时间过后,按键松开,记为短按。取反led1

  else//若短时橘握宽间内还按着

  {

   delays(2);//过2s再次检测

   皮备if(key==1)//若此时key还为1,这说明为长按

   {

    led2=!led2//长按,取反led2

    while(key)//检测完长按后,就用循环等待按键松开。

    //这样你圆亮按键按多久,led2的状态都不会变

   }

  } 

 }

}

这里设置按键key,按下为=1,松开为=0。这需要你按此接电路。

你还需要一个延时很小的函数delay(),和延时一秒的延时函数delays()。

放定时器呗,将按钮闭合作为计时器的弯销悔输入条件,当你按按斗芹钮,计时器就开始计时,然后计时器的数值,可以拿出比较,判断时间长短。当然也可以放计数器,用定埋正时脉冲检测按钮,按钮闭合就计数,从而判断时间长短


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8225468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存