独立按键应用与按键消抖

   由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动。由于单片机检测 IO口速度非常快,超过弹片抖动的频率,所以在检测按键状态时,要消除按键抖动的影响。一般认为,抖动不超过10ms。
为了避免这种现象而做的措施就是按键消抖,消抖方法分为:硬件消抖和软件消抖。
(1)硬件消抖
在按键上并联一个电容(RC电路),利用电容的充放电特性来对抖动过程中产生的电压毛刺进行平滑处理,从而实现消抖。
(2)软件消抖
当检测到按键状态变化后,先等待一个 10ms 左右的延时时间,让抖动消失后再进行一次按键状态检测,如果与刚才检测到的状态相同,就可以确认按键已经稳定的动作了。
判断按键一次按下的具体方法:
a)检查到按键按下后,进行10-15ms延时,用于跳过这个抖动区域;
b)延时后再监测按键状态,如果没有按下表明是抖动或者干扰造成,如果仍旧按下,可以认为是真正的按下。并进行对应的操作。
3)同样按键释放后也要进行去抖动延时,延时后监测按键是否真正松开

独立按键的使用以及消抖

如图独立按键的右边都接的GND,左边连接IO口,当我们的按键按下时IO口由高电平转化为低电平,但是在我们按下去的时候会有机械抖动,这是我们就可以用软件延时来消抖

#include<reg52.h>
#include<intein.h>
typedef unsigned char u16;
typedef unsigned int u8;
sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;//定义按键连接的IO口
sbit led0=P2^0;//定义灯
#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0//定义全局变量
void Delay10ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 18;
	j = 235;
	do
	{
		while (--j);
	} while (--i);
}//延时函数
u8  key_scan(u8 mode)
{
   static u8 key;
   if(mode) key=1;
   if(KEY1==0||KEY2==0||KEY3==0||KEY4==0)
   {
	  key=0;
      Delay10ms();
   	  if(KEY1==0)//实现消抖
	  return  KEY1_PRESS;
	  else if(KEY2==0)
	  return  KEY2_PRESS;
	  else  if(KEY3==0)
	  return   KEY3_PRESS;
	  else  if(KEY4==0)
	  return   KEY4_PRESS;
   }
 else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)
   {
   	key=1;
   }
   return KEY_UNPRESS; 
} 

int main()
{
  u8 key=0;
  while(1)
  {
   key=key_scan(0);
   if(key=KEY1_PRESS)
   {
   led0=!led0;
   }
  }
}




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值