专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机按键程序设计及电路设计

作者:mcu110   来源:51hei   点击数:  更新时间:2007年08月06日   【字体:

    在单片机应用系统中,按键主要有两种形式:1、直接按键; 2、矩阵编码键盘。直接按键的每个按键都单独接到单片机的一个I/O口上,直接按键则通过判断按键端口的电位即可识别按键操作;而矩阵键盘通过行列交叉按键编码进行识别。下面我们以S51增强型单片机实验板的直接按键来学习单片机轻触按键在单片机系统中的应用。

S51增强型单片机实验板的4个轻触按键原理图。。。

S51增强型单片机轻触按键原理图
图 1

    一、按键时序分析

    通常所用的按键为轻触机械开关,正常情况下按键的接点是断开的,当我们按压按钮时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而机械触点在闭合及断开的瞬间均伴随有一连串的抖动,按键的时序如下图2所示,抖动时间的长短由按键的机械特性及操作人员按键动作决定,一般为5ms~20ms;按键稳定闭合时间的长短是由操作人员的按键按压时间长短决定的,一般为零点几秒至数秒不等。

轻触按键操作时序示意图
图 2

    从上面图2中我们可以看到,一次完整的击键过程,包含以下5个阶段:
    1. 等待阶段: 此时按键尚未按下,处于空闲阶段。
    2. 前沿(闭合)抖动阶段:此时按键刚刚按下,但按键信号还处于抖动状态,这个时间一般为5~20ms。为了确保按键操作不会误动作,此时必须有个前沿消抖动延时。
    3. 键稳定阶段:此时抖动已经结束,一个有效的按键动作已经产生。系统应该在此时执行按键功能;或将按键所对应的键值记录下来,待按键释放时再执行。
    4. 后沿(释放)抖动阶段:一般来说,考究一点的程序应该在这里再做一次消抖延时,以防误动作。但是,如果前面“前沿抖动阶段”的消抖延时时间取值合适的话,可以忽略此阶段。
    5. 按键释放阶段:此时后沿抖动已经结束,按键已经处于完全释放状态,如果按键是采用释放后再执行功能,则可以在这个阶段进行按键操作的相关处理。


    二、按键实验例程

    下面我们通过几个实验例程来学习按键扫描编程及按键软件消抖动的编程,通过这些对比实验,给大家一个更加感性的认识。

    1、按键K1控制LED指示灯实验:本程序通过实验板上的按键K1控制P1.0上的LED亮灭。程序功能如下:当K1按下开关时指示灯亮,再次按下时指示灯灭。

   轻触按键K1控制指示灯的实验例程(没有软件消抖动处理)
 
实验结果分析:


      ORG     0000H
      AJMP    START       ;跳转到初始化程序

      ORG     0033H
START:MOV     SP,#60H     ;SP初始化
      MOV     P3,#0FFH    ;端口初始化

MAIN: JB      P3.2,MAIN   ;检测按键K1有没有按下
      CPL     P1.0        ;执行按键命令,改变P1.0指示灯状态
      JNB     P3.2,$      ;等待按键K1释放
      AJMP    MAIN        ;返回重新检测按键

      END

 


    由于本实验程序中没有进行软件消抖动延时处理,我们把程序烧写到单片机上运行时,多次按压K1控制LED的亮灭,发控制不太稳定,大约按十次,LED发光二极管的输出状态有2到3次是错误的。

    这就是因为没有软件去抖动的原因,在按键的前沿抖动或后沿抖动期间,抖动脉冲均有可能被程序检测而错误执行,此时相当于按键被按压和松开了N次,LED的输出状态也已经改变了N次,故松开按键后LED的状态是一个随机结果。

 


   2、改进的按键K1控制LED指示灯实验:本程序通过实验板上的按键K1控制P1.0上的LED亮灭。程序功能如下:当K1按下开关时指示灯亮,再次按下时指示灯灭。

    改进的轻触按键K1控制指示灯的实验例程(经过软件消抖动处理)
 
实验结果分析:


      ORG     0000H
      AJMP    START       ;跳转到初始化程序

      ORG     0033H
START:MOV     SP,#60H     ;SP初始化
      MOV     P3,#0FFH    ;端口初始化

MAIN: JB      P3.2,MAIN   ;检测按键K1有没有按下
      ACALL   YS20ms      ;消前沿抖动延时,实现软件去抖动
      JB      P3.2,MAIN   ;再次检测按键,如果为高电平,则是抖动
      CPL     P1.0        ;执行按键命令,改变P1.0指示灯状态
      JNB     P3.2,$      ;等待按键K1释放
      AJMP    MAIN        ;返回重新检测按键

YS20ms:
      MOV     R7,#40      ;延时20ms子程序
YS1:  MOV     R6,#229
      DJNZ    R6,$
      DJNZ    R7,YS1
      RET

      END

 


    由于本实验程序中对按键的前沿抖动进行20ms的软件消抖动延时处理,我们把程序烧写到单片机上运行,多次按压K1控制LED的亮灭,发控制就很稳定了,不会出现控制错误的现象。

    通过本实验,可以看出软件去抖动延时还是很重要的,消抖动延时时间一般在5~20ms之间,实际应用时候根据实验取得最佳延时。

    本程序没有对按键松开时的后沿抖动进行消抖动,如果在要求很严格的系统中,建议增加后沿消抖动延时处理,这样可以确保按钮不会产生误动作。

 

 

    3、带按键音效的按键扫描实验例程:下面的按键扫描实验例程除了有软件消抖动功能外,还具有按键音效,当按压按键K1~K4时候,按键号码会显示在实验板的数码管上,同时可以听到按键音。

关闭窗口

相关文章