尊重他人劳动成果,请勿转载!!!

电路图如下:
MCU采用89C52单片机,晶振12MHZ。

1、没有消除抖动的原始代码:

#include <REGX52.H>
#include <intrins.h>
sbit KeyValue=P3^7;
unsigned char code segment[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//定义数码管显示0~9
void main(){static char count=1;P2=segment[0]; //开始运行显示0while(1){if(KeyValue==0){ P2=segment[count];count++if(count>=10){   //超过0~9,数码管显示回到0count=0;}}}
}

按键效果如下:

51单片机按键抖动

2、延时消除抖动

存在如下缺点:

  1. delay()延时函数会占用大量时间;
  2. 需要while循环不断的扫描按键,对单片机运算资源的浪费。
#include <REGX52.H>
#include <intrins.h>
sbit KeyValue=P3^7;
unsigned char code segment[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(){ //延时程序unsigned int i=20500;while(i--);
}
void main(){static char count=1;P2=segment[0];while(1){if(KeyValue==0){//按键按下delay();//延时一段时间if(KeyValue==0){//重新判断按键状态P2=segment[count];count++;if(count>=10){count=0;}}}}
}

3、使用定时器消抖
原理说明:1次按下+1次抬起构成一个按键动作,当同时检测到这两个动作时,才完成一次按键操作。按下时,将按键值存储为0;抬起时,将按键值存储为1。在前一次的按键值为0的前提下,检测当前按键值是否为1,如果为1,表示此次按键有效,否则此次按键无效。

缺点:会占用一个定时器

#include <REGX52.H>
#include <intrins.h>
sbit KeyValue=P3^7;
bit  KeyStatus=1;
unsigned char code segment[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/*********未经允许,请勿转载!!!***********/
void main(){bit KeySave=1;unsigned char count=0;P2=segment[0];/**************开启中断**************************/EA=1;TMOD=0x01;TH0=0xF8;TL0=0xCD;ET0=1;TR0=1;while(1){if(KeyStatus!=KeySave){//检测按键值是否改变,初始时按键值为1,在此检测按键值是否变为0,为0则继续if(KeySave==0){//如果前一次的按键值为0,说明本次按键抬起,本次按键有效;否则为按键按下操作,跳转到最后一步,将按键值取反count++;//对按键值+1if (count>=10){count=0;}P2=segment[count];}KeySave=~KeySave;}}
}
void InterruptTimer0() interrupt 1 {static unsigned KeyBuff=0xff;TH0=0xF8;TL0=0xCD;KeyBuff=(KeyBuff<<1)|KeyValue;switch(KeyBuff){case 0xff:KeyStatus=1;break;case 0x00:KeyStatus=0;break;default:break;}
}

51单片机按键消抖方式总结相关推荐

  1. stm32硬件消抖_STM32单片机按键消抖和FPGA按键消抖大全

    原标题:STM32单片机按键消抖和FPGA按键消抖大全 写在前面: 按键去抖:由上图可以看出理想波形与实际波形之间是有区别的,实际波形在按下和释放的瞬间都有抖动的现象,抖动时间的长短和按键的机械特性有 ...

  2. 单片机入门资料,按键消抖方式,按键怎么消抖

     1.什么是按键消我们先来看一下按键按下去的波形图 1.按键消抖原理 我们可以看到当按键按下的那一时刻和松开的时候有类似于锯齿的形状那就是按键抖动,这个抖动不是我们人为能控制得了的,所以我们只能对进行 ...

  3. 单片机按键“消抖”的思考

    初学单片机时,讲到了一个按键"消抖"概念,视屏教程中只是说到要确定按键是不是真正按下,所以需要加一个延时来判断. 附上延时消抖程序代码: 代码1 void keypros() {i ...

  4. stm32 工业按键检测_STM32单片机按键消抖和FPGA按键消抖大全

    写在前面: 物联网STM32入门 - 直播课程 - 创客学院​www.makeru.com.cn 按键去抖:由上图可以看出理想波形与实际波形之间是有区别的,实际波形在按下和释放的瞬间都有抖动的现象,抖 ...

  5. FPGA---多按键消抖检测

    在学习了单按键消抖方法后,按键消抖的关键点就是20ms的延时,这一点和单片机按键消抖的思路是一样的.但是FPGA的延时需要通过寄存器计数,这个是比较消耗内部资源的.如果要检测4个按键时,最简单的方法就 ...

  6. ISE 下按键消抖实验

    实验原理 按键做为基本的人机输入接口,在很多电子设计中都能见到,由于机械特性,在按键按下或 松开的时候,按键输入值是有抖动的,无论按下去是多平稳,都难以消除抖动,按键消抖方式有 很多,本实验主要是通过 ...

  7. 51单片机定时器中断按键消抖(无延时)

    单片机入门学习记录(二) 在机械按键的触点闭合和断开时,都会产生抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理.按键的抖动对于人类来说是感觉不到的,但对单片机来说,则是完全可以感应 ...

  8. [51单片机]按键部分(软件消抖)

    独立按键: 电路图: 独立按键需要考虑按键消抖的问题.按消键抖通常的按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一 ...

  9. 单片机矩阵消抖延时c语言,单片机矩阵按键定时器消抖程序源码

    芯片是采用的stc89c51单片机. 下面是矩阵键盘的电路图,矩阵键盘是接在p2口的. 下面是单片机部分的图,数码管显示等完整的原理图可以从http://www.51hei.com/f/ks51.pd ...

最新文章

  1. LinkQueue的基本创建
  2. SQL Server 中 SELECT INTO 和 INSERT INTO SELECT语句的区别
  3. jscience中的parse转换
  4. 阿里云debian mysql_记录下在阿里云linux上安装与配置Mysql
  5. junit数据驱动测试_使用Junit和Easytest进行数据驱动的测试
  6. Python3 模块相关及输入输出模式
  7. App 签名过期或泄露怎么办?别担心,Google 已经给出解决方案!
  8. Ubuntu16.04版安装VMwareTools的步骤和没法挂载目录问题的解决
  9. Cordova for iOS
  10. 基础集合论 第一章 3 集合论的公式和条件
  11. AIDA64 Business Edition 4.00.2700绿色单文件破解版下载
  12. excel 行列转换
  13. 用这个抢票神器,一抢一个准!
  14. NODE.JS DM数据库驱动简介及搭建
  15. html表格打印边框不全,解决table边框在打印中不显示的问题 (转)
  16. echarts画关系图,指定有的关系为双向箭头,有的关系为单向箭头
  17. http状态码-504
  18. 利用Python3开发一款小工具(界面的设计)
  19. 【个人总结】2020计算机保研经历(北大信科、上交、浙大、南大、中科院)
  20. 微信点赞功能测试用例,面试答题

热门文章

  1. 高通骁龙820A凭什么能赢得众多车厂的芳心
  2. Tms320F28335中PWM触发ADC16路级联顺序采样
  3. 第1章 面向对象分析和设计
  4. 【转载】递推公式的特征方程及通项公式
  5. nginx rua代码同步非阻塞
  6. 经典递归算法之Fibonacci序列
  7. 利用JACK在Windows下PC之间传递声音
  8. OpenStack双网卡、多节点搭建
  9. IBM开放创新推动和谐区域医疗
  10. PostgreSQL CAST 转换数据类型