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

    文章

    423

    浏览量

    34562
  • 软件编程
    +关注

    关注

    1

    文章

    41

    浏览量

    11304
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52138
收藏 人收藏

    评论

    相关推荐

    STM32 GPIO的八种工作模式

    GPIO (general purpose input output)是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
    的头像 发表于 11-06 09:40 676次阅读
    STM32 <b class='flag-5'>GPIO</b>的八种工作模式

    SOC GPIO操作

    sapphire Soc提供了两个GPIO组每组有4个GPIO,定义为GPIO[3:0],其中只有GPIO[1:0]可以支持中断。中断在程序中打开了
    的头像 发表于 11-01 11:06 148次阅读

    基于FPGA实现按键消抖处理

    引言: 按键在电子产品中经常用到,由于按键的机械特性,按键在闭合或松开的瞬间伴随着一连串的抖动,这样的抖动将直接影响设计系统的稳定性。因此,必须对抖动进行处理。本文介绍如何在FPGA中实现
    的头像 发表于 10-24 14:54 259次阅读
    基于FPGA<b class='flag-5'>实现</b><b class='flag-5'>按键</b>消抖处理

    gpio接口是干什么的 gpio四种输入输出模式怎么选择

    这些引脚的电平状态,实现与外部设备的通信和交互。GPIO接口在嵌入式系统、物联网设备、树莓派项目等领域有着广泛的应用,为电子设备的通信和交互提供了重要的支持。 具体来说,GPIO接口的作用主要包括以下几个方面: 输入功能 :
    的头像 发表于 10-06 16:07 3009次阅读

    GPIO静电放电防护方案

    GPIO静电放电防护方案 方案简介 GPIO的全称是General Purpose Input Output (通用输入/输出端口),简称为GPIO
    的头像 发表于 09-19 17:02 366次阅读
    <b class='flag-5'>GPIO</b>静电放电防护<b class='flag-5'>方案</b>

    基于MSP430实现电视的电容式触摸按键

    电子发烧友网站提供《基于MSP430实现电视的电容式触摸按键.pdf》资料免费下载
    发表于 08-28 11:56 0次下载
    基于MSP430<b class='flag-5'>实现</b>电视的电容式触摸<b class='flag-5'>按键</b>

    如何在FPGA中实现按键消抖

    在FPGA(现场可编程门阵列)中实现按键消抖是一个重要的设计环节,特别是在处理用户输入时,由于物理按键的机械特性和电气特性,按键在按下和释放的瞬间会产生抖动现象,这种抖动可能导致系统错
    的头像 发表于 08-19 18:15 2001次阅读

    全志模块设备开发之GPIO编程基础介绍

    实际操作中,我们使用LED和按键实现GPIO输出和输入的实验,相关的实验过程和相关代码如下。 9.4.1 导出GPIO口 ​ 为了导出GPIO
    发表于 08-05 13:33

    STM32 GPIO八种模式及工作原理详解

    一. 前言   GPIO全称General Purpose Input Output,是微控制数字输入/输出的基本模块,可以实现微控制器与外部环境的数字进行交换。借助GPIO微控制器可以实现
    的头像 发表于 07-22 09:32 6461次阅读
    STM32 <b class='flag-5'>GPIO</b>八种模式及工作原理详解

    CC2340R5无法读取到按键按下的动作怎么解决?

    自定的按键方案:选取DIO9、DIO10、DIO11来实现按键 syscfg中各GPIO的配置如下图所示 BUTTON菜单的配置 希
    发表于 05-30 07:59

    STM32矩阵按键造成IO口的损坏的原因?

    看了网上的4*4矩阵按键,不带外部中断,可实现多个按键同时按下。发现行线都配置成GPIO_Mode_Out_PP推挽输出,我认为当同一个列线上有两个
    发表于 05-17 06:02

    【GD32F470紫藤派开发板使用手册】第二讲 GPIO-按键查询实验

    通过本实验主要学习以下内容: GPIO输入功能原理; 按键查询输入检测原理;
    的头像 发表于 04-30 11:39 753次阅读
    【GD32F470紫藤派开发板使用手册】第二讲 <b class='flag-5'>GPIO</b>-<b class='flag-5'>按键</b>查询实验

    什么是GPIOGPIO组成原理

    GPIO全拼叫General Purpose Input Output(通用输入输出)简称IO口也叫总线扩展器,GPIO口是由引脚,功能寄存器组成,不同的架构中的GPIO封装不同,所使用的引脚数与寄存器数不同,具体可以参考芯片手
    发表于 04-28 12:30 7029次阅读
    什么是<b class='flag-5'>GPIO</b>?<b class='flag-5'>GPIO</b>组成原理

    电视机经典ADC按键威廉希尔官方网站 实现方案

    3根线实现7个按键,什么原理? 直接上威廉希尔官方网站 原理图!不同电视厂家的设计会有一点差异,但基本都是这个原理。
    的头像 发表于 04-07 10:25 1203次阅读
    电视机经典ADC<b class='flag-5'>按键</b>威廉希尔官方网站
<b class='flag-5'>实现</b><b class='flag-5'>方案</b>

    用tc275开发板实现can通信,一直不工作怎么解决?

    最近我想用 tc275的官方开发板实现can通信,一直不工作,在我反复检查了好几遍代码之后,感觉实在找不出错误来,就疑惑这块shield buddy板子上是否有CAN transceiver 芯片?
    发表于 02-01 07:08