0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

独立按键检测技术讲解

CHANBAEK 来源:嵌入式开发教程 作者:郭学提 2023-07-12 11:53 次阅读

独立按键根据其击键持续时间可分为短按和长按。在一键多功能技术中,短按和长按所实现的功能是不一样的。如MP3播放器中的下一曲按扭,短按时执行的功能是选择下一曲,而长按时则是当前歌曲的快进。一般将按键按下的时间小于1S以内的称为短按键,按键按下超过1S的称为长按。大部分单片机中所讲述的按键都属于短按功能。本节通过按键短按功能讲述独立按键的检测及软件防抖动的基本方法。如图所示的实验电路中,其按键检测程序代码如下:

图片

sbit  LED0=P1^0;          //定义LED0为P1.0口
sbit  LED1=P1^1;           //定义LED1为P1.1口
sbit  LED2=P1^2;           //定义LED2为P1.2口
sbit  LED3=P1^3;           //定义LED3为P1.3口
sbit  LED4=P1^4;           //定义LED4为P1.4口
void  main(void)  
{
  unsigned char SW;          //定义按键检测中间变量
  while(1)
  {     
    SW=P2&0x1F;          //屏蔽P2口高3位
    switch(SW)
     {
      case 0x1E:  
        LED0=0 ;        //执行SW1按下的功能
        break;
      case  0x1D:  
        LED1=0  ;      //执行SW2按下的功能
        break;
      case  0x1B:  
        LED2=0  ;      //执行SW3按下的功能
        break;
      case  0x17:  
        LED3=0  ;      //执行SW4按下的功能
        break;
      case  0x0F:  
        LED4=0  ;      //执行SW5按下的功能
        break;
      default:           //没键按下 退出
        break;  
      }
  }
}

独立按键检测技术一般是通过检测与按键相连的I/O口线的状态。由图可知当按键按下时,与其连接的I/O口线将向单片机系统输入低(单片机读取的值是0)。因此通过检测I/O口是否有低输入可判断是否有按键按下。上述程序能够检测到按键按下,检测不到按键释放的,每次只能检测到一个按键,同一时刻有两个或以上的按键按下时按键无效(无按键按下)。而且没有添加软件去抖动功能,但是它提供了一种按键检测的基本思路。另外读者还可通过条件判断语句if来检测按键的状态。下面介绍一种具有软件防抖动功能,能检测按键释放、闭合的程序。其程序在结构上可分为两部分:主函数、防抖动延时函数。

主函数通过switch语句检测出被按下的按键,并执行被按下按键的任务。当检测到按键按下后并没有马上执行按键的任务而是延时10ms躲开按键机械抖动(如果此时立即执行按键功能,可能是误动作,因为有可能是外界干扰引起瞬间起与按键相连的I/O口线为低电平)。然后再检测按键是否还处在闭合状态,如果仍然处在闭合状态,则执行按键的任务。反之则退出。其程序代码如下:

sbit  SW1=P2^0;             //定义SW1为P2.0口
sbit  SW2=P2^1;             //定义SW1为P2.1口
sbit  SW3=P2^2;             //定义SW1为P2.2口
sbit  SW4=P2^3;             //定义SW1为P2.3口
sbit  SW5=P2^4;             //定义SW1为P2.4口
sbit  LED0=P1^0;          //定义LED0为P1.0口
sbit  LED1=P1^1;           //定义LED1为P1.1口
sbit  LED2=P1^2;           //定义LED2为P1.2口
sbit  LED3=P1^3;           //定义LED3为P1.3口
sbit  LED4=P1^4;           //定义LED4为P1.4口
void  main(void)  
{
  unsigned char SW;
  while(1)
 {     
    SW=P2&0x1F;                //屏蔽P2口高3位
    switch(SW)
    {
      case 0x1E:              //判断是不是SW1闭合
        delay(10);              //延时去抖动
        if(!SW1)              //再次确认SW1闭合
        {
          LED0=!LED0 ;          //执行SW1按下的功能
          while(!SW1);          //等待按键释放
          delay(5);             //延时去抖动
        }            
        break;
      case  0x1D:              //判断是不是SW2闭合
        delay(10);              //延时去抖动
        if(!SW2)              //再次确认SW2是否闭合
        {
          LED1=!LED1  ;        //执行SW2按下的功能
          while(!SW2);           //等待按键释放
          delay(5);             //延时去抖动
        }
        break;
      case  0x1B:               //判断是不是SW3闭合
        delay(10);             //延时去抖动
        if(!SW3)              //再次确认SW3是否闭合
        {  
          LED2=!LED2  ;        //执行SW3按下的功能
          while(!SW3);           //等待按键释放
          delay(5);            //延时去抖动
        }
        break;
      case  0x17:               //判断是不是SW4闭合
        delay(10);              //延时去抖动
        if(!SW4)              //再次确认SW4是否闭合
        {  
          LED3=!LED3  ;        //执行SW4按下的功能
          while(!SW4);           //等待按键释放
          delay(5);            //延时去抖动
        }
        break;
      case  0x0F:               //判断是不是SW5闭合
        delay(10);             //延时去抖动
        if(!SW5)              //再次确认SW5是否闭合
        {  
          LED4=!LED4  ;        //执行SW5按下的功能
          while(!SW5)          //等待按键释放
          delay(5);             //延时去抖动
        }
        break;
      default:                 //没键按下 退出
        break;  
     }
  }
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620849
  • Switch
    +关注

    关注

    1

    文章

    515

    浏览量

    57541
  • 检测技术
    +关注

    关注

    2

    文章

    336

    浏览量

    28899
  • 独立按键
    +关注

    关注

    1

    文章

    44

    浏览量

    11464
  • 按键检测
    +关注

    关注

    0

    文章

    21

    浏览量

    4797
收藏 人收藏

    评论

    相关推荐

    深入而全面:FPGA学习之独立按键检测

    几乎没有哪一个系统没有输入输出设备,大到显示器,小到led灯,轻触按键。作为一个系统,要想稳定的工作,输入输出设备的性能占了很重要的角色。本实验,小梅哥就通过一个独立按键检测实验,来
    发表于 12-11 11:18 1w次阅读

    独立键盘的检测原理及程序实现的方法

    由于在单片机在应用系统中,更多的会用到独立键盘,加之两者的检测原理基本相似,所以这一节里我主要讲解独立键盘的检测原理及程序实现的方法。 1、
    的头像 发表于 09-11 10:44 1238次阅读
    <b class='flag-5'>独立</b>键盘的<b class='flag-5'>检测</b>原理及程序实现的方法

    ATmega32应用 独立按键检测

    本帖最后由 suae 于 2011-7-27 16:24 编辑 ATmega32应用 独立按键检测[code]//显示相应的键值0~4#include#include#define uchar
    发表于 07-27 16:15

    独立按键按下的时间该怎么检测

    独立按键按下时间大于0.2s时执行操作,怎么检测按键按下时间呢?
    发表于 10-08 04:15

    独立按键的使用

    独立按键使用较为简单,一般需特别注意按键的抖动;因为按键的开关都有抖动,而如果在抖动时间内检测按键
    发表于 07-20 08:31

    独立按键编程

    【朱老师课程总结 侵删】第一部分、章节目录1.9.1.按键相关知识1.9.2.独立按键编程1.9.3.键值检测与显示1.9.4.按键的消抖1
    发表于 11-22 08:09

    独立按键实验

    51日更4独立按键实验按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态,如果按键按下,初始导通状态变为断开,初始断开状态变为导通。按键
    发表于 11-30 06:12

    独立按键使用的原理是什么

    ,直白来讲,就是能输出高低电平,也能读取高低电平。当按键按下时,相当于单片机I/O直接接地,读取出来的电平就是低电平。独立按键使用代码独立按键
    发表于 01-17 06:31

    矩阵按键按键独立按键检测有什么不同的地方?

    矩阵按键按键独立按键检测有什么不同的地方
    发表于 10-11 08:05

    8位端口检测8独立按键

    8位端口检测8独立按键 C51单片机源码,KEIL源文件,C语言编写
    发表于 06-20 16:36 17次下载

    小梅哥和你一起深入学习FPGA之独立按键检测(上)

    关键词:FPGA , 按键检测 几乎没有哪一个系统没有输入输出设备,大到显示器,小到led灯,轻触按键。作为一个系统,要想稳定的工作,输入输出设备的性能占了很重要的角色。本实验,小梅哥就通过一个
    发表于 09-26 07:40 470次阅读

    蓝桥杯之单片机设计与开发(3)——独立按键

    按下需要消抖,我们之前是使用delay延时程序消抖,但是不建议在程序中使用delay,我们可以使用定时器延时来完成消抖。我们之前写独立按键原理都是检测按键按下—>延时消抖—...
    发表于 11-05 12:05 7次下载
    蓝桥杯之单片机设计与开发(3)——<b class='flag-5'>独立</b><b class='flag-5'>按键</b>

    独立按键和矩阵按键判断按键是否被按下的方法

    独立按键独立按键的一端接地,另一端与单片机的某个 I/O 口相连, 开始时先给该 IO 口赋一高电平,然后让单片机不断地检测该 I/O 口是
    发表于 12-20 18:58 2次下载
    <b class='flag-5'>独立</b><b class='flag-5'>按键</b>和矩阵<b class='flag-5'>按键</b>判断<b class='flag-5'>按键</b>是否被按下的方法

    蓝桥杯单片机——独立按键、矩阵按键

    按键跳线帽需要短接J5口的1和2引脚,按键能使用16个(即上图中S4-S19)。矩阵按键的扫描方法可采用行列扫描法,分为两步:将行的输出设为低电平(0),检测列的电平输入值。将列的输出
    发表于 12-31 19:29 1次下载
    蓝桥杯单片机——<b class='flag-5'>独立</b><b class='flag-5'>按键</b>、矩阵<b class='flag-5'>按键</b>

    蓝桥杯 单片机 独立按键 的使用

    ,直白来讲,就是能输出高低电平,也能读取高低电平。当按键按下时,相当于单片机I/O直接接地,读取出来的电平就是低电平。独立按键使用代码独立按键
    发表于 01-18 10:44 6次下载
    蓝桥杯 单片机 <b class='flag-5'>独立</b><b class='flag-5'>按键</b> 的使用