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

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

    关注

    1

    文章

    441

    浏览量

    35811
  • 软件编程
    +关注

    关注

    1

    文章

    41

    浏览量

    11699
  • GPIO
    +关注

    关注

    16

    文章

    1313

    浏览量

    55724
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于迅为RK3588开发板实现高性能机器狗主控解决方案- AI能力实战:YOLOv5目标检测例程

    基于迅为RK3588开发板实现高性能机器狗主控解决方案- AI能力实战:YOLOv5目标检测例程
    的头像 发表于 11-28 11:32 875次阅读
    基于迅为RK3588开发<b class='flag-5'>板实现</b>高性能机器狗主控解决<b class='flag-5'>方案</b>- AI能力实战:YOLOv5目标检测例程

    极简主义者的福音:GPIO关机功能,短按长按一代码搞定!

    追求代码简洁高效?这个GPIO关机方案正适合你。仅需少量代码,即可实现按键短按执行重启、长按触发关机,结构清晰,易于移植和维护。 本文将以Air8000核心板为例,分享如何使用
    的头像 发表于 10-26 16:58 817次阅读
    极简主义者的福音:<b class='flag-5'>GPIO</b>关机功能,短按长按一代码搞定!

    在友晶DE1-SOC开发板实现Chirikov标准映射求解器

    该项目是在友晶DE1-SOC开发板实现Chirikov标准映射的求解器,并将其应用于图像加密和解密的概念验证。
    的头像 发表于 07-07 15:22 1629次阅读
    在友晶DE1-SOC开发<b class='flag-5'>板实现</b>Chirikov标准映射求解器

    AS32X601驱动系列教程 GPIO_按键检测详解

    在嵌入式系统开发中,GPIO(通用输入输出端口)是实现硬件与软件交互的关键组件。本节主要利用的时GPIO的输入采集功能,本节的主要功能为,读取板载按键,当
    的头像 发表于 05-23 16:44 644次阅读
    AS32X601驱动系列教程 <b class='flag-5'>GPIO</b>_<b class='flag-5'>按键</b>检测详解

    第六章 GPIO输入——按键检测

    本篇文章讲述了如何在W55MH32上实现按键输入检测,以及按键输入检测的注意事项、实现方式和代码讲解等。掌握了按键检测方式之后,我们就可以用
    的头像 发表于 05-22 16:41 751次阅读
    第六章 <b class='flag-5'>GPIO</b>输入——<b class='flag-5'>按键</b>检测

    基于RV1126开发板实现人脸识别方案

    在RV1126上实现人脸识别:在图像中找出人脸,并与数据库进行比对,得出该人脸对应的身份信息。 方案设计逻辑流程图,方案代码分为分为三个业务流程,主体代码负责抓取、合成图像,算法代码负责人脸识别功能,
    的头像 发表于 04-21 13:51 11次阅读
    基于RV1126开发<b class='flag-5'>板实现</b>人脸识别<b class='flag-5'>方案</b>

    基于RV1126开发板实现人脸识别方案

    在RV1126开发板上实现人脸识别:在图像中找出人脸,并与数据库进行比对,得出该人脸对应的身份信息。 方案设计逻辑流程图,方案代码分为分为三个业务流程,主体代码负责抓取、合成图像,算法代码负责人脸识别功能,
    的头像 发表于 04-21 10:24 107次阅读
    基于RV1126开发<b class='flag-5'>板实现</b>人脸识别<b class='flag-5'>方案</b>

    基于RV1126开发板实现人员检测方案

    在RV1126开发板实现人员检测:在图像中找出人。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负责抓取、合成图像,算法代码负责人员检测功能。
    的头像 发表于 04-18 17:14 220次阅读
    基于RV1126开发<b class='flag-5'>板实现</b>人员检测<b class='flag-5'>方案</b>

    基于RV1126开发板实现人脸识别方案

    在RV1126开发板实现人脸识别:在图像中找出人脸,并与数据库进行比对,得出该人脸对应的身份信息。 方案设计逻辑流程图,方案代码分为分为三个业务流程,主体代码负责抓取、合成图像,算法代码负责人脸识别功能,
    的头像 发表于 04-18 16:55 83次阅读
    基于RV1126开发<b class='flag-5'>板实现</b>人脸识别<b class='flag-5'>方案</b>

    RV1126 实现人脸检测方案

    基于RV1126开发板实现人脸检测方案,充分体现了电子方面的实践经验和目标检测技术。
    的头像 发表于 04-14 09:25 682次阅读
    RV1126 <b class='flag-5'>实现</b>人脸检测<b class='flag-5'>方案</b>

    为什么GPIO配置总是出问题?

    在STM32开发中,GPIO(通用输入输出)配置看似简单,但在实际开发中,很多人常常会遇到这些困惑:明明按照教程配置了GPIO,为什么LED灯就是不亮?为什么有时候按键无法响应,或者响应很慢
    的头像 发表于 04-07 11:59 1367次阅读
    为什么<b class='flag-5'>GPIO</b>配置总是出问题?

    瑞芯微RK安卓Android主板GPIO按键配置方法,触觉智能嵌入式开发

    触觉智能分享,瑞芯微RK安卓Android主板GPIO按键配置方法,方便大家更好利用主板空闲IO!
    的头像 发表于 02-26 16:29 1109次阅读
    瑞芯微RK安卓Android主板<b class='flag-5'>GPIO</b><b class='flag-5'>按键</b>配置方法,触觉智能嵌入式开发

    GPIO使用教程 GPIO接口应用

    交互,实现外部设备的控制和数据传输。 一、GPIO的基本概念 GPIO的全称是General-Purpose Input/Output,即通用输入/输出。它是一种在电子设备中常见的接口,允许控制和读取
    的头像 发表于 01-31 10:10 5180次阅读

    远心镜头应用手机按键检测

    远心镜头的手机按键检测方案具有高效、准确、稳定等优点。该方案能够实现对手机按键的全方位检测,包括按键
    的头像 发表于 01-20 10:18 676次阅读
    远心镜头应用手机<b class='flag-5'>按键</b>检测

    蓝桥杯中GPIO输入之按键实验

    第一节按键的基本知识按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键
    的头像 发表于 01-09 21:02 1342次阅读
    蓝桥杯中<b class='flag-5'>GPIO</b>输入之<b class='flag-5'>按键</b>实验