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

补充一下,我已经有用这个按键做了三个档位功能(都是短按)

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

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

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

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

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-02-01
加个长按检测,检测方法和短按一样,记录连续几个按下状态(中间无复位),当状态计数>设定,就是长按了追问

怎么加,这部份要怎么写

怎么用C语言\/C51程序实现单片机按键长按开机与长按关机?
软件:首先是长按判断。这个最好用按键扫描。就是检测按键按下时候,定时器计时,如果松开就立即清零。在设置一个功能函数检测定时值,大于两秒后,就表示长按。按键按下单片机供电开始计时,如果达到长按标准,就输出引脚控制持续供电,这时候按键松了也不会断电。运行期间,按键再次按下并符合长按,那木...

51单片机C语言编程如何实现长按按键实现数值的累加
这个可以用定时器来做,比如检查某键,按键时间超过2秒后一个变量开始累加知道键释放为止。实现方法如下: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;ti...

下面51单片机C语言程序怎么改成按钮按一下才执行,再按一下就停止,如此...
IO直接作为循环条件即可,如下:如果用户按下键不放会有问题,最好改为用户按下键再弹起为一次输入。

51单片机如何用一个按键控制一段程序的运行与停止
首先,你需要为你的项目创建一个新的文件,这是基础步骤,它将承载你的代码逻辑(1、在51单片机项目中,新建一个文件用于存放程序代码。)。接着,配置你的按键和LED。假设你选择的按键S1连接到P3的第2引脚,当按键按下时,可以通过编程使其对应P1的第5引脚点亮LED(2、按键S1的输入设置为P3^2,LED...

51单片机C语言编程如何实现长按按键实现数值的累加
这个可以用定时器来做,比如检查某键,按键时间超过2秒后一个变量开始累加知道键释放为止。实现方法如下: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...

51单片机如何用一个按键控制一段程序的运行与停止
1、创建项目文件。2、按键:S1=P3^2,点亮: led=P1^5。3、创建C语言主函数。4、创建循环效果,检测效果。while(1) {}。5、选择输出的效果。6、当按下一个按键时,关闭灯,整个程序运行,再按一次,程序停止。

C语言写单片机程序 如何让操纵杆在某一个键一直按着的时候才能有用
1、声明一个按键状态变量key_status,并初始化为0 2、当按键按下并抬起时(此处应该做软件滤波),认为按键被触发,此时:如果key_status==0, 就让key_status赋值为1 如果key_status==1, 就让key_status赋值为0 3、操纵杆作用七段数码管动作程序只有在key_status==1的时候执行,其他不动作 while(...

求单片机红外遥控解码识别长按和短按键的C语言例子
长按键: 隔110ms左右发一次引导码(重复),并不带任何数据(全部为高电平)所以根据这个特点可以识别长按键:程序接收一帧数据后,提取出地址和数据,然后判断 ...\/\/有地址和数据的,为一次按键 ...\/\/地址和数据为空的,为重复按键 if((ir_addr_code==0xffff)&&(ir_origin_data==0xff)&&(ir_...

需要一个C语言程序。51单片机控制:按键按一下,延迟1分钟后开灯,灯亮半...
sbit led=P1^1;void delayms(uint i) \/\/1ms延时程序 { uchar j;for(;i>0;i--){ for(j=0;j<125;j++)\/\/如果延时时间误差较大,可按比例改变125这个数 \/\/取值范围0-255,数值越大,延时越长 {;} } } void delay1s(uint i) \/\/1s延时程序 { for(;i>0;i--){delay1ms(1000);}...

请问单片机C51用C语言怎么编这个例子
sbit K2=P2^1;void delay(uchar count){uchar i;for(i=0;i<count;i++){TMOD=0X01;TH0=(65536-50000)%256;TL0=(65536-50000)\/256;TR0=1;while(!TF0);TF0=0;} void keyscan(){ if(K1==0)delay(1);if(K1==0){NUM++;if(NUM==3);{NUM=0;} } switch(NUM){case 1:{delay...

相似回答