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

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

3天内不再提示

基于GPIO的按键板实现方案

454398 来源:csdn 作者:NutriYang 2020-10-18 11:43 次阅读

介绍简单的ADC实现,需要IC提供一个额外的ADC。但出于IC成本的考虑,无法提供这个的ADC时,但提供了多个额外的GPIO(General Purpose Input Output:双向的:可以为输入/输出,只有两个状态High/Low),就可以使用本篇的实现方法了。

基于GPIO的按键板

基于GPIO的按键板实现,需要提供额外的GPIO口供使用。GPIO口足够多的话可以一个按键对应一个GPIO,不够多的时候可以使用矩阵扫描方式实现,若可供使用的GPIO连矩阵扫描方式都不满足,还可以增加二极管来进一步扩展成2个GPIO实现6个按键,本节将简单介绍这些方法。另外还可以通过扩展GPIO的方法来实现,将在下一篇幅中专门介绍。

嵌入式开发中,GPIO是最常用的控制接口,普通GPIO只具有High/Low两个状态,我们可以对其进行Read/Write操作。

1:足够多的GPIO供使用

则每个按键对应一个GPIO口,电路设计可以保证:无按键动作GPIO口为Low,有按键动作GPIO口为High,或者相反。软件设计只需要逐个扫描每个GPIO口的状态,就可以知道某个按键是否有动作。

2:有限的GPIO供使用:使用矩阵扫描按键方式是最常见的方案。

其原理如下:任意两个GPIO之间连接一个按键,比如GPIO_1 & GPIO_2,其默认状态为Low,按键按下的话,两者就连通了,这就意味着,我们可以先给GPIO_1一个High信号,接着去读取GOIO_2,如果得到High,则这个按键被按下了,否则就是没有按键动作。

数学告诉我们,基于这种方案的N个GPIO口,最多可以实现N*(N-1)/2个按键,也就是N的组合数。如下图:4个GPIO(A/B/C/D)实现6(KEY_1…KEY_6)个按键的原理图

变成也是比较简单了,给个C代码如下:

这里通过适当的流程设计,可以使得代码紧凑有序。在按键比较少的情况下,一个挨着一个的去读写的方法也不错,但在较多按键的时候,上面代码的流程设计就比较具有优势了。能够在1分钟内,看明白为什么使用 i*k+k-1 作为返回索引,我相信你的逻辑能力很OK。

3:进一步扩展---2个GPIO实现6个按键

如果在你的设计中,GPIO口的数量很有限,不能满足矩阵扫描方式的需要,那么你有两种选择:1 扩展GPIO口,下一篇幅中将专门讨论;2 增加一些二极管来进一步扩充矩阵扫描方式的能力。我们这里讨论一个2个GPIO实现6个按键的方法,原理图如下:

这种实现方法实际上就是利用了二极管的单向导通特性,使得我们可以区分更多的按键,分析如下:

1:Write GPIO_1=1 & GPIO_2=1,接着Read if GPIO_1==0 & GPIO_2==0,则为 KEY_3;

if GPIO_1==0 & GPIO_2==1,则为 KEY_1;

if GPIO_1==1 & GPIO_2==0,则为 KEY_2;

2:Write GPIO_1=0 & GPIO_2=1, 接着Read if GPIO_2==0,则为 KEY_4 or KEY_6;

需要进一步判断:Write GPIO_1=1 & GPIO_2=0 然后Read:if GPIO_1==0 则为 KEY_4;

if GPIO_1==1 则为 KEY_6;

3:反序执行步骤2,可以区分出 KEY4 & KEY5。

明白了原理,软件编程实现就比较简单了,给出一个实现如下:

在这个编程实现里,在写操作之后,可能需要适当的Delay以使得其状态稳定;若是基于总线的嵌入式系统,也需要在函数退出前释放总线。

3:总结与讨论

基于矩阵扫描方式的按键板实现,是很最常用的。在GPIO口比较紧缺的情况下,可以通过在电路中适当增加几个二极管来解决。如果这样还不能解决,就必须设法扩展GPIO了,稍后讨论。

下面给出了一个很不错的 矩阵扫描+二极管扩展 的电路图,你能为它写一个驱动吗?相当具有挑战性哦,试试看吧……

编辑:hfy

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

    关注

    0

    文章

    406

    浏览量

    34245
  • 软件编程
    +关注

    关注

    1

    文章

    35

    浏览量

    11094
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50564
收藏 人收藏

    评论

    相关推荐

    FMC扩展子卡 6 路422,8 组LVDS,8 路GPIO

    。 本产品基于一些逻辑转换芯片而设计,能实现差分信号转单端输出给载板、载板的单端信号转差分输出;422 信号的输入/ 输出;GPIO 信号由载板实现输入或者输出控制。 QT7414 板卡的电气与机械设计
    的头像 发表于 02-26 15:04 133次阅读
    FMC扩展子卡 6 路422,8 组LVDS,8 路<b class='flag-5'>GPIO</b>

    STM32怎么实现按键开关机

    STM32按键开关机需要以下步骤: 1. 硬件连接。 2. 配置GPIO引脚。 3. 编程实现按键检测。 4. 编程实现开关机控制功能。 详
    的头像 发表于 12-07 15:17 1602次阅读

    单片机的GPIO如何实现触摸按键的功能呢?

    单片机的GPIO如何实现触摸按键的功能呢? 触摸按键是一种使用触摸电容技术实现按键,它通过利用
    的头像 发表于 12-07 11:43 2431次阅读

    全志R128按键控制蜂鸣器GPIO配置详解

    按键控制蜂鸣器 首先我们搭建电路,如下: 引脚 按键 PA25 按键1脚 GND 按键3脚 PA29 蜂鸣器触发脚 载入方案 我们使用的开
    发表于 11-27 10:16

    基于STC8A8K64S4A12开发板的GPIO按键检测实验

    做完了GPIO点灯实验,成就感满满,不知道小白的我是不是入门了,哈哈!开始做下一个GPIO按键检测的实验。
    的头像 发表于 11-15 17:03 602次阅读
    基于STC8A8K64S4A12开发板的<b class='flag-5'>GPIO</b><b class='flag-5'>按键</b>检测实验

    GPIO中断例程实现按键检测和定时采样,中断无法返回

    我利用GPIO中断例程实现按键检测功能,同时加入了定时采样后,发现GPIO中断无法返回,不管是否清除了中断标志,我怀疑是不是例程里少了一步中断返回。 但不知道先楫对于处理完中断后返回应
    发表于 10-14 19:47

    基于DSP28335开发板实现SD_FAT32的电路方案设计源码

    基于DSP28335_开发板实现SD_FAT32的电路方案设计源码
    发表于 09-20 07:52

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

    ,非常实用。下面,我们将详细介绍如何在STM32单片机上实现一个按键切换两个程序。 一、 STM32单片机按键切换原理 为了实现按键切换两个
    的头像 发表于 09-14 14:22 4435次阅读

    牙椅灯不亮问题维修检查方法

    操作按键板上的灯泡按键时,灯不亮。
    的头像 发表于 08-09 10:47 2142次阅读
    牙椅灯不亮问题维修检查方法

    详解GPIO输入实验

    在前两期的更新里,给大家介绍了STM32CubeMx的基础安装以及利用STM32CubeMx+MDK完成了GPIO输出实验(点亮一个LED灯),今天就给大家介绍GPIO输入实验—用USER按键来控制LD5的亮灭。
    的头像 发表于 07-02 16:36 687次阅读
    详解<b class='flag-5'>GPIO</b>输入实验

    电视机的按键功能是用什么电路实现

    电视机的按键功能是用什么电路实现的呢? 实践出真知,咱们先从电视机里把这个按键电路找出来。 拿这台海信电视机下手: 按键在背面,靠左边: 放大了看,共7个实体
    的头像 发表于 06-17 15:01 894次阅读
    电视机的<b class='flag-5'>按键</b>功能是用什么电路<b class='flag-5'>实现</b>的

    各种板端排线的连接方案沤血分享

    【专业作用】:按键板到LED板的FFCSP.CN排线连接,通常需要先确认两者之间的接口类型和引脚数量是否兼容。然后按照以下步骤进行排线连接:【安装步骤】1.将按键板和LED板放在同一平面上,确保它们
    的头像 发表于 06-06 10:29 1461次阅读
    各种板端排线的连接<b class='flag-5'>方案</b>沤血分享

    电视机的按键功能是用什么电路实现

    电视机的按键功能是用什么电路实现的呢?实践出真知,咱们先从电视机里把这个按键电路找出来。拿这台电视机下手: 按键在背面,靠左边: 放大了看,共7个实体
    发表于 06-01 08:16

    ARM Cortex-M学习笔记:按键

    按键 GPIO 端口有两个方案可以选择,一是采用上拉输入模式,因为按键在没按下的时候,是默认为高电平的,采且内部上拉模式正好符合这个要求。第二个方案
    的头像 发表于 05-15 15:12 1895次阅读
    ARM Cortex-M学习笔记:<b class='flag-5'>按键</b>

    GD32开发实战指南(基础篇) 第6章 按键

    按键 GPIO 端口有两个方案可以选择,一是采用上拉输入模式,因为按键在没按下的时候,是默认为高电平的,采且内部上拉模式正好符合这个要求。第二个方案
    的头像 发表于 05-11 08:57 3698次阅读
    GD32开发实战指南(基础篇) 第6章 <b class='flag-5'>按键</b>