C51 短按抬起开关 和 长按开关 程序怎么写,求教

C51 短按抬起开关 和 长按开关 程序怎么写,求教,第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()。

#include<reg51.h>

#define uchar unsigned char

sbit key=P1^0

sbit close=P1^1

uchar times=0

void t0isr() interrupt 1

{

TH0=(65536-50000)/256

TL0=(65536-50000)%256

times++

if(key==1)times=0

if(times>60)close=0

}

main()

{

TMOD=0x01

TH0=(65536-50000)/256

TL0=(65536-50000)%256

ET0=1

EA=1

close=1

while(1)

{

if(key==0){TR0=1times=0}

if(key==1)TR0=0

}

}

1.

首先需要硬件支持,也就是单片机某个引脚可以控制断电和维持上电

2.

按键的的作用也可以给单片机供电,并且还要有个专门的引脚检测按键状态。

3.

软件:首先是长按判断。这个最好用按键扫描。就是检测按键按下时候,定时器计时,如果松开就立即清零。在设置一个功能函数检测定时值,大于两秒后,就表示长按。

4.

按键按下单片机供电开始计时,如果达到长按标准,就输出引脚控制持续供电,这时候按键松了也不会断电。

5.

运行期间,按键再次按下并符合长按,那木引脚输出停止供电,这时候如果按键松开,那就彻底没电关机。


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

原文地址:https://54852.com/yw/12090527.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存