设为首页
联系站长
加入收藏
 您现在位于:电子驿站 → 单片机轻松入门
 
   
    手把手教你学单片机

轻触按键在单片机系统中的应用

单片机轻松入门教学 ------- 『电子驿站』原创,转载请注明出处!
-------------------------------------------------------------------------------------------------------------

    按键在单片机智能控制系统中常用作为人机交互中输入信息作用,我们通过按键输入各种信息,调整各种参数或发出控制指令,按键处理是一个很重要的功能模块,按键处理程序关乎整个系统的交互性能,也影响系统的稳定性,按键检测处理是单片机学习开发的基本功,我们必须很好地学习掌握按键处理技术。

    在单片机应用系统中,按键主要有两种形式: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时候,按键号码会显示在实验板的数码管上,同时可以听到按键音。

带按键音效的按键扫描实验例程
 
;**************************************************************
;*            ★★★ 按键扫描实验程序 ★★★                 *
;*『电子驿站单片机实验板、开发板配套例程,程序转载请著明出处』*
;* E-mail: support@ourmpu.com QQ留言: 451338254 476485321    *
;* 编程:袁雄飞 http://www.ourmpu.com/ 更多例程请登陆网站     *
;**************************************************************
;* 按K1~K4时,检测到的按键码显示在对应数码管上               *
;***************************************************************
      ORG     0000H
      AJMP    START           ;转到初始化程序

      ORG     0033H
START:
      K1 BIT P3.2             ;定义按键K1
      K2 BIT P3.3             ;定义按键K2
      K3 BIT P3.4             ;定义按键K3
      K4 BIT P3.5             ;定义按键K4
      MOV     SP,#50H         ;SP初始化
      MOV     P3,#0FFH        ;端口初始化
      
MAIN: JB      K1,SK2          ;检测按键K1
      ACALL   YS20ms          ;调用20ms延时消抖动
      JB      K1,SK2          ;如果K1为高电平,则是抖动
      MOV     P0,#0FFH        ;关闭数码管
      ACALL   SOUND           ;发出一声按键提示音
K1DD: JNB     K1,K1DD         ;等待K1按键释放
      MOV     P0,#0F9H        ;显示按键号码“1”
      MOV     P2,#0BEH        ;第1位数码管允许显示
      AJMP    MAIN

SK2:  JB      K2,SK3          ;检测按键K2
      ACALL   YS20ms          ;调用20ms延时消抖动
      JB      K2,SK3          ;如果K2为高电平,则是抖动
      MOV     P0,#0FFH        ;关闭数码管
      ACALL   SOUND           ;发出一声按键提示音
K2DD: JNB     K2,K2DD         ;等待K2按键释放
      MOV     P0,#0A4H        ;显示按键号码“2”
      MOV     P2,#0BDH        ;第2位数码管允许显示
      AJMP    MAIN

SK3:  JB      K3,SK4          ;检测按键K3
      ACALL   YS20ms          ;调用20ms延时消抖动
      JB      K3,SK4          ;如果K3为高电平,则是抖动
      MOV     P0,#0FFH        ;关闭数码管
      ACALL   SOUND           ;发出一声按键提示音
K3DD: JNB     K3,K3DD         ;等待K3按键释放
      MOV     P0,#0B0H        ;显示按键号码“3”
      MOV     P2,#0BBH        ;第3位数码管允许显示
      AJMP    MAIN

SK4:  JB      K4,MAIN         ;检测按键K4
      ACALL   YS20ms          ;调用20ms延时消抖动
      JB      K4,MAIN         ;如果K4为高电平,则是抖动
      MOV     P0,#0FFH        ;关闭数码管
      ACALL   SOUND           ;发出一声按键提示音
K4DD: JNB     K4,K4DD         ;等待K4按键释放
      MOV     P0,#99H         ;显示按键号码“4”
      MOV     P2,#0B7H        ;第4位数码管允许显示
      AJMP    MAIN

YS20ms:                       ;20ms延时子程序
      MOV     R7,#128
DL1:  MOV     R6,#0FFH
DL0:  DJNZ    R6,DL0
      DJNZ    R7,DL1
      RET

SOUND:                        ;音效子程序
      MOV     R7,#228
SDL1: CPL     P3.7
      MOV     R6,#0FFH
SDL0: DJNZ    R6,SDL0
      DJNZ    R7,SDL1
      SETB    P3.7
      RET

      END

 

 

 
本站部分软件资料来源于网络,如有涉及版权问题,请及时联系站长删除
   451338254    476485321
『电子驿站』版权所有 Copyright (C) 2005-2007 ourmpu.com All Rights Reserved