首先需要硬件支持,也就是单片机某个引脚可以控制断电和维持上电
2.
按键的的作用也可以给单片机供电,并且还要有个专门的引脚检测按键状逗铅仿态。
3.
软件:首先是长按判断。这个最好用按键扫描。就是检测按键按下时候,定时器计时,如果松开就立即清零。在设置一个功能函数检测定山纤时值,大于两秒后,就表示长按。
4.
按键按下单片机供电开始计时,如果达到长按标准,就输出引脚控制持续供电,这时候按键松了也不会断电。
5.
运行期间,按键再次按下并符合长按,那木引脚输出停止供电,这时候如果按键激咐松开,那就彻底没电关机。
#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
}
}
写一个信中凯给你把,51的吧#include
"at89c51.h"
//P1.0
为按键输入端,上拉电阻,按键接地
//P1.1
为培游按键输出端,低电平有效
//晶振频率为4M其他频率请调整延时
void
main(void)
{
unsigned
char
a,b
p1^0=1
//作为按键输入,在准双向IO口中应该置位
p1^1=1
//关闭LED
while(1)
{
if(p1^0==0)
{
for(a=20a>0a--)
for(b=250b>0b--)/滑唤/去抖
if(p1^0==0)
{
wait://按键已经按下
if(p1^0==1)
{
//按键放开
p1^1=~p1^1;//led状态取反,就一亮一灭的了
}
else
goto
wait//等待放开按键
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)