#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint v=0,time=0
sbit key=P1^0
void t0isr() interrupt 1
{
TH0=(65536-50000)/256
TL0=(65536-50000)%256
time++
if((key==0)&&(time>40)v++ //如果按键时间超过2秒且键未释放,变量+1
if(key==1)time=0 //如果键释放,时间复位
}
main()
{
TMOD=0x01
TH0=(65536-50000)/256
TL0=(65536-50000)%256
TR0=1
ET0=1
EA=1
while(1)
}
1.首先需要硬件支持,也就是单片机某个引脚可以控制断电和维持上电
2.
按键的的作用也可以给单片机供电,并且还要有个专门的引脚检测按键状逗铅仿态。
3.
软件:首先是长按判断。这个最好用按键扫描。就是检测按键按下时候,定时器计时,如果松开就立即清零。在设置一个功能函数检测定山纤时值,大于两秒后,就表示长按。
4.
按键按下单片机供电开始计时,如果达到长按标准,就输出引脚控制持续供电,这时候按键松了也不会断电。
5.
运行期间,按键再次按下并符合长按,那木引脚输出停止供电,这时候如果按键激咐松开,那就彻底没电关机。
长按3秒进携氏入程序可以这样while(1)
{
散凯if( key==0)//按键按下
{
cnt++
if( cnt>300)
{
辩掘散 cnt=0//到3秒,退出本循环进入下一段程序
break
}
dely(10)//延时10毫秒
}
}
while(1)
{
...//此为主程序段
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)