注:本文是作者以前发表在其个人博客,现在发布到“聚丰开发”专栏
说到键盘扫描,相信大多数人第一反应就是行列矩阵扫描,这样我们可以用相对有限的io口得到尽可能多的按键。键盘扫描是单片机技术的一种基本处理方法,学校单片机课程都会有相应章节进行阐述,只要按照课本上讲述的方法,一般都能设计出比较可靠的键盘扫描电路与程序。
课本上的键盘扫描方法(见下图接法二)不能说是尽善尽美,从易懂性、成本、程序难易程度等方面综合看应该是不错的方法,给人感觉是已经没有太多的改善空间,至少我是这么认为的。
然而前段时间一位***朋友画给我的键盘扫描矩阵电路(见下图接法二),让我又一次看到到自己的思维还有许多地方被自己的所谓“经验”束缚着。
单纯的从硬件接法看,两种接法并没有明显区别,接法一甚至要复杂一些,但如果结合到键盘扫描的程序来看,就会发现接法一确实更好。
两种接法我都没有把上拉电阻包含进来,来让我们看一下两种接法到底有什么不同:
接法二:
我们熟悉的传统扫键处理电路,假定键盘行列io口标号分别为h1/h2/h3和v1/v2/v3,扫键流程通常如下。
2.1. h1设置为输出,h2/h3和v1/v2/v3设置为输入
2.2. h1分别输出1和0,读v1/v2/v3状态,如果vy状态与h1一致,则认为h1与vy交叉位置的键按下
2.3. h2设置为输出,h1/h3和v1/v2/v3设置为输入
2.4. h2分别输出1和0,读v1/v2/v3状态,如果vy状态与h2一致,则认为h2与vy交叉位置的键按下
2.5. h3设置为输出,h1/h2和v1/v2/v3设置为输入
2.6. h3分别输出1和0,读v1/v2/v3状态,如果vy状态与h3一致,则认为h3与vy交叉位置的键按下
接法一:
新扫键处理电路,假定键盘行列io口标号分别为h1/h2/h3和v1/v2/v3,扫键流程通常如下。
1.1. h1/h2/h3和v1/v2/v3都设置为输入
1.2. 读h1/h2/h3和v1/v2/v3状态,如果hx和vy读到的状态均为0,则认为hx与vy交叉位置的键按下
从上面流程可以看出接法一的程序代码要简单不少,既能减少扫键的代码量,又能加快扫键处理的时间,站在软件的角度看确实要比接法二要好。后来我反思了一下为什么我们教材上的传统处理方法没有采用接法一,虽然接法一软件上要简单一些,但硬件布局要复杂,传统的按键只有两条接线,接法一需要三条接线,所以用传统的按键是无法实现的,但现在许多电子产品的按键都用导电橡胶或锅仔片来实现,所以接法一变得可行。
注:这两种电路对于同时按键达到3个的情况都有可能形成错误的按键逻辑。
Jeff Ullman:机器学习不是数据科学的全部!统计学也不是
获得的新闻稿描绘了即将面世的Galaxy A11
开放原子开源基金会TOC(技术监督委员会)第八十次全体会议
Linux I/O重定向详解
魅蓝s6怎么样 今年最值得入手的千元机之一
打破思维定式——两种键盘扫描方法比较分析
四图维新上半年芯片业务收入2.80亿元 同比增长73.7%
苹果iOS 14.2增加了“年度支出历史记录”选项
调音台中英文对照
基于FPGA的MIPICSI-2接口高清摄像头图像采集系统设计和优势
电容器如何检测好坏
华为P10系列天猫预售五天不到万台,这成绩余承东你满意不?
荣耀9最新消息:华为荣耀9要玩大招,全面屏?这下必买!
基于虚拟仪器技术实现信号采集系统的设计
中软国际与浪潮达成战略合作,共拓企业ERP市场
全球服务机器人需求剧增,前景可观
自动驾驶领域中的CMS系统应用探讨
Linux ALSA声卡驱动之一:ASoC架构中的Codec
机器人板块为何关注点提升了
如何降低数据中心能耗?