
{
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.
运行期间,按键再次按下并符合长按,那木引脚输出停止供电,这时候如果按键松开,那就彻底没电关机。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)