怎么用C语言C51程序实现单片机按键长按开机与长按关机?

怎么用C语言C51程序实现单片机按键长按开机与长按关机?,第1张

1.

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

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//等待放开按键

}

}

}

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存