4.3.认识按键抖动并消除抖动

原创 2016年06月02日 10:40:32

实验目的:认识按键抖动并消除抖动

预备知识:
(1)什么是抖动:按键的内部结构是一个弹簧,当按键被按下的时候,弹簧可能会抖动好几次,而CPU轮训读取按键的IO端口的速度是很快的,可在抖动期间可能会多次读取IO口的电平值造成“按一次按键增加多次的现象”
(2)通过延时一段时间来“错过抖动期”
(3)全局变量:全局变量定义在函数外面,其作用与为整个程序,生命周期为从程序开始到程序结束。
实验过程分析:
(1)通过“按键一次使数码管增加1”实验,了解什么是抖动
(2)如何消除抖动
(3)测试代码

第一步:通过上节课代码进行改造成按键一次使数码管增加1
第二步:发现现象:按一次可能会增加好多数,而非只增加1
第三步:分析现象发现按键抖动

实验代码:

/******************** 按键一次使数码管增加1实验的代码************************/

#include<reg51.h>

sbit key1 = P1^0;       //  按键1接在P1^0
                        //  P0端口接数码管
unsigned char dnum = 0;
int dm[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc7,0xa1,0x86,0x8e};
                        //独立数码管的段码表

void display(void);
void delay(void);

void main(void)
{

    while(1)
    {
        if(key1==0)             //如果按键1被按下,则数码管就显示增加1
        {           
            display();
        }

          delay();      //延时函数
    }
}
//数码管显示函数
void display(void)
{                           //只有按键被按下,此函数才被执行
    dnum = dnum +1          //display函数每被执行一次,dnum 就 + 1
    P0 =dm[dnum];           //P0端口接到数码管上
}

void delay()
{
    unsigned char i = 0,j = 0;
    for(i=0;i<200;i++)
        for(j=0;j<200;j++);
}

上面的代码会导致一个问题,当按下一个按键时,数码管不是增加1,而是增加很多次,考虑其中的原理就是按键的抖动

/**************************** 按键消抖代码****************************/

#include<reg51.h>

sbit key1 = P1^0;
unsigned char dnum = 0;      //标记数码管显示的标记数
int dm[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc7,0xa1,0x86,0x8e};
    //独立数码管的段码表

void add_display(void);
void delay10ms(void);
void delay(void);

void main(void)
{
    unsigned char i=0;
    unsigned char keynum = 0;

    while(1)
    {
        if(key1==0)         //在1点检测到低电平
        {       
            delay10ms();    //延时10ms之后再来检测该电平
            if(key1 == 0)   //在2点及其之后,还是低电平,说明确实是按键被按下
            {
                add_display() ;     //显示函数被执行,数码管显示加 1
            }   

        }
        delay();
    }
}
/********************独立数码管显示****************************/
void add_display(void)
{
    dnum += 1;
    P0 = dm[dnum];
}
/*************延时函数(时间未知)*******************************/
void delay(void)
{
    unsigned char i = 0,j = 0;
    for(i=0;i<200;i++)
        for(j=0;j<200;j++);

}
/****************延时10ms*************************************/
void delay10ms(void)
{
    unsigned char a,b,c;
    for(c=5;c>0;c--)
        for(b=4;b>0;b--)
            for(a=248;a>0;a--);
}

实验总结
(1)当按住一个按键不松开时,数码管会不停地增加,这是为什么?下节课介绍完整的按键检测。

版权声明:本文为博主原创文章,转载请注明出处。

ARM学习随笔(11)中断学习深入之按键去抖

通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产...
  • bgk083
  • bgk083
  • 2014年07月26日 11:38
  • 978

按键抖动与处理

为什么会有按键抖动(百度百科)         通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而...
  • iLoveHdr
  • iLoveHdr
  • 2013年11月21日 10:22
  • 3496

基于延时采样的按键消抖方法

基于延时采样的按键消抖方法本作品采用知识共享署名-相同方式共享 3.0 未本地化版本许可协议进行许可。按键抖动常见的按键有轻触按键和触摸按键。前者通过内部金属片受力弹动实现按键的接通和断开,后者通过电...
  • liberatetheus
  • liberatetheus
  • 2017年06月03日 20:54
  • 483

用简单算法去除图像抖动

有时人们需要去除视频中的抖动。     本人用一种简单算法实现了该功能,实际效果还不错。     主要思想是这样的:在第一帧图像中选择一块特征明显的纹理Patch,然后在随后的每一帧图像中...
  • kklots
  • kklots
  • 2012年09月26日 23:03
  • 3085

AD去抖动之软件滤波

AD去抖动 ,软件滤波   说明:AD转换经常会发现数据不稳定,除了硬件滤波,还可以程序滤波,减小误差,用时间换取精度 1、限幅滤波法(又称程序判断滤波法)      A、方法:   ...
  • yscyh
  • yscyh
  • 2015年03月21日 15:19
  • 734

AVR单片机软件按钮消抖与确认

第一次写博客,有不对或不好的地方欢迎指正。                                      按钮在按下与弹起的过程中会出现一定的抖动,这有时会对应用过程产生影响,所以我想了一...
  • shuguang1223
  • shuguang1223
  • 2017年03月14日 11:10
  • 230

【Arduino官方教程第一辑】示例程序 2-3 按键去抖

由于物理性质和机械特性的原因,矩阵按键经常在按下后的一小段时间产生不定状态。这很可能被程序误认为是短时间内的多次按键操作。本例向你展示如何进行按键去抖。...
  • amagamag
  • amagamag
  • 2016年04月21日 16:45
  • 3664

Android酱油笔记之按钮抖动

第一步:准备两个动画效果的XML文件,加入到 res/anim/目录下: Shake.xml文件,抖动的方式: ...
  • slow_liao
  • slow_liao
  • 2014年02月27日 17:31
  • 2437

消除视频抖动

安装 https://help.ubuntu.com/community/OpenCV bian
  • span76
  • span76
  • 2014年11月21日 11:32
  • 6958

G-sensor的抖动问题

20130108 G-sensor的抖动问题: 现象:当手机在桌面静止的时候,测试应用显示z轴报点为10左右,但会频繁出现-10。x和y轴也有这个现象。用测试应用绘制曲线图发现数据完全不平滑,高概...
  • coder_jack
  • coder_jack
  • 2013年02月02日 16:37
  • 1613
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4.3.认识按键抖动并消除抖动
举报原因:
原因补充:

(最多只允许输入30个字)