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

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

3天内不再提示

单片机实现按键的电路和程序设计资料说明

Wildesbeast 来源:单片机教程网 作者:单片机教程网 2020-10-06 18:14 次阅读

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

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时候,按键号码会显示在实验板的数码管上,同时可以听到按键音。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    237

    文章

    22450

    浏览量

    645891
  • 单片机
    +关注

    关注

    6001

    文章

    43978

    浏览量

    620866
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79547
收藏 人收藏

    评论

    相关推荐

    单片机程序设计(上)

    在《单片机必须了解的外设功能——GPIO/串行通信》和《单片机必须了解的外设功能——定时器/中断功能》中对利用单片机的功能进行程序设计进行了说明
    发表于 09-12 10:58 3689次阅读
    <b class='flag-5'>单片机</b>与<b class='flag-5'>程序设计</b>(上)

    单片机原理及c语言程序设计

    0417、C语言程序设计及应用实例单片机的C语言应用程序设计 0413、单片机原理与应用及C51程序设计课件电子教案0414、《
    发表于 08-14 16:31

    11个单片机程序设计经典项目!25个项目资料免费放送!

    大家补上。它们分别是:流水灯程序设计(项目2)数码管0~9显示程序设计(项目3)单片机系统的按键(项目4)利用外部中断实现
    发表于 06-21 20:44

    11个单片机程序设计经典项目!内含25个免费项目资料

    0~9显示程序设计(项目3)单片机系统的按键(项目4)利用外部中断实现按键的输入(项目5)单只数码管秒显示(项目6)6位数码管动态显示(项目
    发表于 06-23 12:45

    单片机C语言程序设计实训

    单片机C语言程序设计实训100例大集合本书基于Keil μVision程序设计平台和Proteus硬件仿真平台,精心编写了100余个8051单片机C语言
    发表于 07-14 06:44

    怎么实现51单片机程序设计

    C语言的特点是什么?怎么实现51单片机程序设计
    发表于 11-02 06:05

    怎么实现基于STM32单片机流水灯仿真与程序设计

    怎么实现基于STM32单片机流水灯仿真与程序设计
    发表于 11-23 06:45

    如何实现pulse sensor模块基于51单片机程序设计

    如何实现pulse sensor模块基于51单片机程序设计
    发表于 02-07 06:33

    STM32F103ZET6单片机双串口互发程序设计实现是什么?

    实现是什么?二、使用步骤1.下载程序2.测试步骤和程序说明总结前言    daodanjishui物联网核心原创技术之STM32F103ZET6
    发表于 02-22 07:50

    AVR单片机读卡器程序设计资料说明

    本文档的主要内容详细介绍的是AVR单片机读卡器程序设计资料说明
    发表于 01-29 10:04 14次下载
    AVR<b class='flag-5'>单片机</b>读卡器<b class='flag-5'>程序设计</b>的<b class='flag-5'>资料</b><b class='flag-5'>说明</b>

    使用51单片机进行广告屏和按键扫描的C语言程序和设计资料说明

    本文档的主要内容详细介绍的是使用51单片机进行广告屏和按键扫描的C语言程序和设计资料说明
    发表于 05-05 08:00 1次下载
    使用51<b class='flag-5'>单片机</b>进行广告屏和<b class='flag-5'>按键</b>扫描的C语言<b class='flag-5'>程序</b>和设计<b class='flag-5'>资料</b><b class='flag-5'>说明</b>

    STC12C5616AD单片机实现16位AD按键电路图和源代码等资料说明

    本文档的主要内容详细介绍的是STC12C5616AD单片机实现16位AD按键电路图和源代码等资料说明
    发表于 11-15 08:00 68次下载
    STC12C5616AD<b class='flag-5'>单片机</b><b class='flag-5'>实现</b>16位AD<b class='flag-5'>按键</b>的<b class='flag-5'>电路</b>图和源代码等<b class='flag-5'>资料</b><b class='flag-5'>说明</b>

    使用单片机实现门铃设计的程序资料说明

    本文档的主要内容详细介绍的是使用单片机实现门铃设计的程序资料说明
    发表于 06-08 17:20 10次下载
    使用<b class='flag-5'>单片机</b><b class='flag-5'>实现</b>门铃设计的<b class='flag-5'>程序</b>和<b class='flag-5'>资料</b><b class='flag-5'>说明</b>

    单片机按键使用程序 (51单片机

    单片机独立按键使用程序 (51单片机)独立按键单片机中很重要的一个器件,在这篇文章里,通过这个
    发表于 11-11 18:36 105次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>按键</b>使用<b class='flag-5'>程序</b> (51<b class='flag-5'>单片机</b>)

    stm32单片机如何实现一个按键切换两个程序

    stm32单片机如何实现一个按键切换两个程序? 作为一款功能强大的微控制器,STM32单片机可以支持多种应用场景,其中一个实用的功能是
    的头像 发表于 09-14 14:22 4466次阅读