个人不理解51单片机长按短按的c语言编写(只是略知要定时器):
思路是,①利用定时器将某个变量自加大于2000ms时判断为长按,否则为短按,进入相应的程序中再次将该变量清零,但是不会用c语言表示出来:②想实现:短按数码管显示0,长按显示1并且蜂鸣器响一声,长按后显示,不是长按松开键后显示(基于你自己的原理图,最好可以附上原理图,谢谢)
实现长短按键的功能,我从学单片机开始,一直在写,一直改进
直到2015年的时候,看了安富莱的开发板的按键代码,之后我再也不去研究了。
他的代码实现了;按键滤波,长短按键,上下升沿检测,单次触发,连发等功能功能。非常完美。
51上也是可以跑的,只要你明白了代码的思路,完全可以移植过去。
【安富莱STM32-V6开发板试用体验】+1.STM32F429之经典按键检测
https://bbs.icxbk.com/thread-102588-1-1.html(出处: ICKEY BBS)
这个不需要定时器也可以判断长按短按的,延时检测我就不加了手机打字麻烦
if(!key)
{
while(!key)
temp++;
delayms(10);
if(temp==200)
while(!key);
长按执行的内容;
}
if(i<200)断按执行内容;
temp=0;
一般按键处理(只有长短按区别时)可以不用到定时器的,一般都是采用延时检测
在大循环中判断进入检测状态(就是有键按下)下面是伪C语言,你要具体实现
if( 按键检测变量置位 ){
delay(10); // 稍微延时去抖判断
// 开始正式检测
delay( 长按检测延时量 )
// 长按处理
}else{
// 短按处理
//噪音,退出检测