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

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

3天内不再提示

这些单片机按键设计方案,拿走不谢

MCU开发加油站 来源:互联网 作者:佚名 2017-12-11 10:55 次阅读

单片机系统里,按键是常见的输入设备,在本文江介绍几种按键硬件、软件设计方面的技巧。一般的在按键的设计上,一般有四种方案:

一是GPIO口直接检测单个按键,如图1.1所示;

二是按键较多则使用矩阵键盘,如图1.2所示;

三是将按键接到外部中断引脚上,利用按键按下产生的边沿信号进行按键检测,如图1.3所示;

四是利用单片机的ADC,在不同的按键按下后,能够使得ADC接口上的电压不同,根据电压的不同,则可以识别按键,如图1.4所示。

图1.1方案一

图1.2方案二

图1.3方案三

图1.4方案四

在以上四种设计上,各有优点和不足。

第一种是最简单和最基础的,对于单片机初学者很容易理解和使用,但是缺点是,需要在主循环中不断检测按键是否按下,并且需要做消抖处理。若主循环中某个函数任务占用时间较长,则按键会有不同程度的“失灵”。

第二种,优点是能够在有限的GPIO情况下,扩展尽可能多的按键。但缺点同上,需要不停检测按键是否按下。

第三种方式是效率最高,不需要循环检测按键是否按下,但是缺点是,需要单片机有足够的外部中断接口以供使用。

第四种的优点是,只需要单片机的一个ADC接口,一根线,就能对多个按键进行识别,缺点是按键一旦内部接触不良,则可能按键串位,且按键产生的抖动,会造成一定的识别错误。

在以上的三种常见按键设计的基础上,现在分享我学习和工作中总结的按键方案。

改进一:在原方案一的基础上,加上与门电路,使得任何一个按键按下,都能产生中断,然后在中断里面识别是哪个按键被按下。因此不需要循环扫描,大大提高了效率。方案如图1.5所示。只需要每个按键对应地增加一个二极管,利用二极管的线与特性,可以实现按下任何按键,都能产生中断信号,但是按键之间互不影响。二极管选用普通整流二极管即可,本人亲测可行。

图1.5 改进一

改进二:在原有的ADC按键的基础上,也可用增加二极管的方式,实现按键中断,并在中断服务程序里进行AD转换,从而识别按键。电路如图1.6所示。

图1.6 改进二

改进三:因为按键不可避免的有抖动,因此按键消抖可以通过硬件消痘和软件消抖。现在分享一个十分简单且有效的硬件消痘方法:给按键并联一个104左右的电容。软件上基本不用处理即可避免抖动。

改进四:在按键扫描检测的方案下,如果主循环中有某个函数占用时间较长,则按键会发生或长或短的“失灵”,现分享我的一个解决方案。将按键扫描放到定时器中断里面,这样就可周期性地检测按键按下情况,不受主循环的影响。并且,能解析出按键的不同状态,即按下、按住、弹起、为按下这四种状态,用以实现更丰富的功能。

但需注意两点,一是定时器的定时时间,不可过长也不可过短,过长容易检测不到按下,过短会占用大量时间资源。二是中断服务程序需简单明了,只做检测用,通过全局变量传递,在主循环内完成按键响应,中断服务函数内尽量不要占用太多时间。

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

    关注

    6034

    文章

    44554

    浏览量

    634526

原文标题:单片机按键设计的四个方案详解

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机按键中断配置教程

    一些小伙伴觉得单片机入门太难了,又要懂原理图、又要懂寄存器、还要学编程语言。
    的头像 发表于 10-23 16:30 616次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>按键</b>中断配置教程

    基于51单片机的手动数字时钟

    具体实现功能由51单片机+8位共阴数码管+独立按键构成。具体功能:(1)利用数码管显示时分秒,显示格式为“时-分-秒”;(2)利用6个按键控制时、分、秒,设定好后自动开始时钟显示;(3)设置秒复位
    的头像 发表于 10-22 14:12 215次阅读
    基于51<b class='flag-5'>单片机</b>的手动数字时钟

    单片机工作的原因

    单片机工作是一个复杂的问题,可能涉及多个方面的因素。以下是对单片机工作原因的详细分析,旨在帮助技术人员或爱好者更好地理解和解决这一问题。
    的头像 发表于 10-17 18:11 1091次阅读

    单片机方案开发:如何给电子产品单片机选型?

    在给电子项目做IC方案开发时,总是需要考虑到许多关键因素。在本文中,对于给即将开发的电子产品做好单片机选型。英锐恩单片机开发工程师将从以下几点进行介绍。 一、选择制造商: 许多生产单片机
    发表于 09-25 10:56

    单片机io一般包含哪几种状态

    ) : 当IO口处于输入状态时,它可以接收外部信号,并将这些信号传递给单片机的内部电路进行处理。这种状态下,IO口主要用于读取外部传感器信号、按键状态或其他外部设备的数据。 输出状态(Output State) : 在输出状态下
    的头像 发表于 09-14 14:35 666次阅读

    单片机程序烧录成功为什么运行

    烧录问题 : 确保烧录过程没有中断或错误。 检查烧录器和连接线是否工作正常。 确认烧录器设置(如电压、波特率等)与单片机兼容。 电源问题 : 检查单片机是否获得了正确的电源电压。 确保电源稳定,没有
    的头像 发表于 09-02 09:45 1940次阅读

    基于STM32单片机的简易波形发生器设计

    系统内使用STM32单片机进行主控,proteus内部集成示波器,使用按键可以调节波形的输出方式,在示波器上可以实时观察波形的变化。
    的头像 发表于 06-27 10:18 1789次阅读
    基于STM32<b class='flag-5'>单片机</b>的简易波形发生器设计

    基于51单片机的电子钟【调时,DS1302,数码管,独立按键】(仿真)

    基于51单片机的电子钟【调时,DS1302,数码管,独立按键】(仿真)
    的头像 发表于 04-10 00:41 2427次阅读
    基于51<b class='flag-5'>单片机</b>的电子钟【调时,DS1302,数码管,独立<b class='flag-5'>按键</b>】(仿真)

    基于51单片机的电子钟【整点报时,6数码管,独立按键】(仿真)

    基于51单片机的电子钟【整点报时,6数码管,独立按键】(仿真)
    的头像 发表于 04-10 00:37 940次阅读
    基于51<b class='flag-5'>单片机</b>的电子钟【整点报时,6数码管,独立<b class='flag-5'>按键</b>】(仿真)

    应用单片机开发的ST LINK调试器设计制作

    在调试ST单片机的过程中,ST-LINK是一个很好使用的调试工具。今天,我们就根据网络上的设计方案进行简化,设计制作一个ST LINK调试器,用于之后的单片机开发。
    发表于 03-06 10:26 1109次阅读
    应用<b class='flag-5'>单片机</b>开发的ST LINK调试器设计制作

    8-Bit 触控式 Flash 单片机中文资料

    该系列单片机是一款 8 位具有高性能精简指令集且完全集成触摸按键功能的 Flash 单片机。此系列单片机含有触摸按键功能和可多次编程的 Fl
    发表于 02-28 10:01 4次下载

    想把单片机引脚配置普通的按键输入引脚,是选择哪种模式?

    请大家帮忙,想把单片机引脚配置普通的按键输入引脚,是选择哪种模式?以下哪种模式:激活上/下拉器件激活下拉激活上拉激活,Pn——out连续采样输入值
    发表于 02-20 07:08

    单片机晶振起振后会有什么情况

    时钟信号的情况下,单片机无法执行程序,无法完成预定的功能。 无法进行通信:很多单片机芯片都支持通信接口,如UART、SPI和I2C等,这些通信接口都需要时钟信号的支持。如果晶振起振,
    的头像 发表于 01-04 17:12 2032次阅读

    单片机如何读取键盘数据

    单片机作为一种嵌入式系统,往往需要与外部设备进行交互。其中之一的重要环节就是通过键盘读取输入的数据。在本文中,我们将详细介绍如何使用单片机读取键盘数据,包括键盘的原理、扫描方式、连接方式以及编程实现
    的头像 发表于 01-04 17:09 1745次阅读

    单片机程序读取需要什么工具

    单片机程序读取的工具可以分为硬件工具和软件工具两类。下面将详细介绍这些工具的种类、功能和使用方法。 一、硬件工具 单片机开发板:单片机开发板是最基本的硬件工具之一,它通常由主控芯片、输
    的头像 发表于 01-02 18:10 3813次阅读