单片机按键去抖

发布者:静心静气最新更新时间:2016-09-05 来源: eefocus关键字:单片机  按键去抖 手机看文章 扫描二维码
随时随地手机看文章
       我们首先要清楚为什么要按键去抖。先看先按键按下的波形图       
按键去抖 - jaky - jaky的博客

 

通过这个图形就很清楚为什么要按键去抖了,要是不去抖的话,当按下按键的时候就会在0~5ms内出现抖动,相当于在不停地按下按键而就不是只按了一次了。稳定闭合时间大约是10ms,松手抖动的时间和按下抖动的时间差不多。

        去抖的方法有硬件去抖和软件去抖

        我们常用牺牲CPU的时间来软件去抖,就是按下按键后延时5~10ms时间后再来检查是否有按键按下,松手检测也一样。

硬件去抖的方法如图所示

按键去抖 - jaky - jaky的博客

 

独立按键的去抖方法很简单,就是在按下和松手后分别加一小段延时再来判断。

例:

sbit key=P1^1;

........................

.......................

if(!key)     //如果有按键按下

{

     delay(10);  //延时一小段时间

    if(!key)    //真有按键按下

    {

      。。。。。。。。/ /   执行按键按下后的操作

    }

  while(!key); //   松手检测,要是没有松手的话就一直执行while循环

}

原理就是这样,去抖的方法很多。

 

按键的松手检测主要根据键盘扫描的方式来决定,今天写了一个矩阵键盘扫描的程序,然后加了松手检测。结果没达到预想的要求。后来才发现是检测方式错了。

程序是这样的

uchar keyscan()
{
      static uchar H,L,temp;
      P1=0Xf0;
      L=P1&0xf0;
      if(L!=0xf0)
     {
           delay(18);
           if(L!=0xf0)
           {
                L=P1&0xf0;
                P1=L|0x0f;    //P1口重新赋值了   
                H=P1&0X0F;  
           }
     }
 /*

P1=0XF0;

L=P1&0XF0;

while(L1!=0XF0)   //松手检测   

{

L=P1&0XF0;

}
 */
   temp=H+L;   


  switch(temp)
   {
    case 0xee:key=1;get1=!get1;break;
    case 0xed:key=2;get1=!get1;break;
    case 0xeb:key=3;get1=!get1;break;
    case 0xe7:key=4;get1=!get1;break;
    case 0xde:key=5;get1=!get1;break;
    case 0xdd:key=6;get1=!get1;break;
    case 0xdb:key=7;get1=!get1;break;
    case 0xd7:key=8;get1=!get1;break;
    case 0xbe:key=9;get1=!get1;break;
    case 0xbd:key=0;get1=!get1;break;
    case 0xbb:key=0xee;get1=!get1;break;
   }       
    return key;
    
}

按键去抖 - jaky - jaky的博客   
按键去抖 - jaky - jaky的博客           

关键字:单片机  按键去抖 引用地址:单片机按键去抖

上一篇:STM8 CAN总线的IdMask模式的讲解
下一篇:EM78P458电压表的制作

推荐阅读最新更新时间:2024-03-16 15:07

贸泽开售英飞凌MOTIX™ TLE989x MCU: 单芯片功率IC,更适合汽车/BLDC电机控制
2023 年 10 月 23 日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 贸泽开售英飞凌MOTIX™ TLE989x MCU: 配备CAN (FD) 接口的单芯片功率IC,更适合汽车/BLDC电机控制 (Mouser Electronics) 即日起开售英飞凌MOTIX™ TLE989x微控制器 (MCU)。 TLE989x系列微控制器扩展了其全面且经过验证的MOTIX™ MCU嵌入式功率IC产品组合,并采用CAN (FD) 作为通信接口。与TLE987x产品系列相比,此系列的处理能力提高了约60%,同时还拥有额外的功能安全和网络安全功能,如安全启动和密钥
[工业控制]
贸泽开售英飞凌MOTIX™ TLE989x <font color='red'>MCU</font>:  单芯片功率IC,更适合汽车/BLDC电机控制
提高 MSP430G 系列单片机的 Flash 擦写寿命的方法
摘要 在嵌入式设计中,许多应用设计都需要使用EEPROM 存储非易失性数据,由于成本原因,某些单片机在芯片内部并没有集成EEPROM。MSP430G 系列处理器是TI 推出的低成本16 位处理器,在MSP430G 系列单片机中并不具备EEPROM。为了存储非易失性数据,MSP430G 系列处理器在芯片内部划分出了256 字节的Flash 空间作为信息Flash,可用于存储非易失性数据,但是由于Flash 与EEPROM 在擦写寿命上存在一定差距,所以在实际应用中,这种应用方式并不能够满足所有客户的需求。本应用笔记介绍了使用代码区域Flash 来模拟EEPROM,通过一定的软件处理算法,可以大大增加数据存储周期的一种方法。本文给
[单片机]
提高 MSP430G 系列<font color='red'>单片机</font>的 Flash 擦写寿命的方法
STM32 | MCU错误代码自动追踪库的使用经验分享
大家在用STM32的时候有没有遇到过HardFault的问题呢: 下面针对这个问题做个小总结。 现象还原:在debug模式下进行仿真调试,全速运行再停止运行,程序会跑到 HardFault_Handler函数中,产生 HardFault,即硬错。其产生的原因大概有如下几类: (1)数组越界操作; (2)内存溢出,访问越界; (3)堆栈溢出,程序跑飞; (4)中断处理错误; 针对HardFault问题的定位,网上有几种方法,大概都是围绕着:在debug模式下,查看一些地址,分析寄存器、函数调用栈等,这是很让人头疼的事情。这里分享一种简单的、直观的HardFault错误定位的方法,使用开源库: CmBacktrace 。这
[单片机]
STM32 | <font color='red'>MCU</font>错误代码自动追踪库的使用经验分享
单片机的三种时钟信号源的特点及应用介绍
与51、AVR等单片机不同msp430的时钟信号源有LFXT1,XT2,DCO三种。 1、LFXT1:可接高速和低速晶振,在低速模式下,它可以外接32k的晶振而不需要负载电容,这种方式较为常见主要用来为ACLK提供低速的时钟信号,以供低速外设使用。 2、XT2:高速振荡器,它可以接一个0.4~16M的晶振,它相当于高速模式下的LFXT1。通常将它配置成一个高速的振荡源,为MCLK何SMCLK提供高速时钟信号。 3、DCO:内部数字控制振荡器,它的频率可以通过DCOCLK进行配置。在系统PUC之后,DCOx=7,MODx=3,表示选择了最高的频率。 前面介绍了MSP430中有三个个时钟信号源,MSP430的时钟信号也有三种
[单片机]
<font color='red'>单片机</font>的三种时钟信号源的特点及应用介绍
AT89S51单片机报警器的设计
1.实验任务 用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。 2.电路原理图 图4.6.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上; (2).在“音频放大模块”区域中的SPK OUT端口上接上一个8欧的或者是16欧的喇叭; (3).把“单片机系统”区域中的P1.7/RD端口用导线连接到“四路拨动开关”区域中的K1端口上; 4.程序设计内容 (1).信号产生的方法 500
[单片机]
AT89S51<font color='red'>单片机</font>报警器的设计
单片机静态方式点亮数码管
电路只驱动一个数码管,该数码管为共阴管,公共端接地,段管直连到单片机的P2口,所用单片机为AT89C52,电路图如下所示: 通过昨天对数码管的讲解,我们知道如果要点亮一个共阴型的数码管,只需要把公共端连到低电平,段管给高电平就可以,如下图所示。 所以看程序: 第4行:共阴数码管的字段表; 第17行:for循环,循环10次,控制数码管的显示内容; 第19行:将所要显示的内容送给数码管; 本次的内容很简单,希望对初学者有个借鉴作用。
[单片机]
<font color='red'>单片机</font>静态方式点亮数码管
瑞萨电子推出5V高性能RX660 32位MCU
瑞萨电子推出5V高性能RX660 32位MCU,为家电和工业应用提供卓越的噪声容限 首款支持CAN FD总线协议的RX产品家族MCU,在工业设备和机器人应用中实现高速通信 2022 年 8 月 2 日,中国北京讯 - 全球半导体解决方案供应商瑞萨电子今日宣布 ,推出RX 32位MCU产品家族的新成员—— RX660微控制器(MCU)产品群 。新产品支持5V工作电压,为暴露在高电磁干扰下的家用电器和工业设备提供卓越的噪声容限。RX660作为瑞萨高端RX通用MCU产品中首个支持5V的器件,也是RX产品家族中首款内置CAN FD控制器的器件,可实现高速数据通信。全新RX660 MCU的高工作电压可以省去目前许多3V MCU
[单片机]
瑞萨电子推出5V高性能RX660 32位<font color='red'>MCU</font>
国内首发 | 曦华科技推出首款车规级电容触控型32位MCU
车规级电容触控型MCU 曦华科技车规级电容触控型CVM012x系列MCU正式上市。作为国产首颗可以实现HoD应用的真车规级单芯片解决方案,该系列产品继承了已经批量量产的曦华CVM01平台,集成了ARM Cortex-M0+内核、大容量的Flash存储器、SRAM存储器和丰富的外设资源。同时,CVM012x系列车规MCU集成了高性能电容检测IP,采用曦华独创的专利电容检测技术,具备极高的电容检测精度,自互一体电容检测技术,最高支持2nF负载电容、30ch自容通道以及15 x 15ch互容通道,支持Active Shielding技术以更好的支持触摸防水性能。CVM012x系列支持多封装和多Flash配置,具有丰富的
[汽车电子]
国内首发 | 曦华科技推出首款车规级电容触控型32位<font color='red'>MCU</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved