历史上的今天
今天是:2025年05月08日(星期四)
2018年05月08日 | 4×4 矩阵式键盘电路的改进
2018-05-08 来源:eefocus
本文向大家推荐一个精简IO接口的4×4键盘电路,该键盘电路仅仅使用4条IO接口引线,即可完成一般需要8位接口才能完成的功能。
在51单片机系统中,经常使用4×4键盘,一般情况下,都是使用一个8位的接口,外接16个按键。
下图就是一个常规的4×4键盘电路图。

这种常规的矩阵键盘电路,相信大家都司空见惯了,好多人都会编写它的驱动程序。
图中使用了P0口的8个引脚(P0.0~P0.7),分别驱动键盘的行和列。按键的编号,在图中分别标注了0~F。
检测按键的一般的思路是在四个列线,分别输出一个低电平,然后输入行线,逐行检测是否存在低电平。
如果在某行有低电平出现,就说明该行、列的交叉点上的按键,被按下了。
其实,这些行、列引线,是“分时”工作的,当在某一列输出低电平的时候,其它的列,输出的就是高电平。
如果利用这些输出高电平的列,进行输入,那么就可以极大的节省IO接口的引线数量。
基于这个道理,在上图中,下面的四个列驱动引线(P0.4~P0.7),就完全可以省去,只是使用行驱动的引脚(P0.0~P0.3)来分时输出低电平即可。
电路见下图。

为了对引脚之间进行隔离,图中加上了四个二极管,确保只有在引脚输出低电平的时候,方可把键盘中相应的列置为0。
针对这个电路,对按键的检测方法,和常规的4×4键盘检测思路是相同的,例如:
当在P0.0输出低电平,即最左边的列为0,这时检测P0.1、P0.2及P0.3是否为0,可以判断最左边的三个按键是否按下;
当在P0.1输出低电平,即左边第二列为0,这时检测P0.0、P0.2及P0.3是否为0,可以判断左边第二列的三个按键是否按下;
…………;
这个检测按键是否按下的思路非常简单,会编写常规4×4键盘驱动程序的网友,肯定都会编写出来这种电路的驱动程序。
因为行和列使用了相同的IO引线,实际上,连接在同一个引线的行、列交叉点处的按键,就已经失效了,那么就把把原来的按键,移动出来,把二极管画在交叉点,电路如下所示。

再把移出来四个按键连接在IO引线,另一端直接接地;把其它按键的编号,再整理一下,就成了下图电路。

这个电路比常规的4×4键盘电路仅仅多用了四个二极管,但是却节省了四条IO接口引线,这个意义是十分巨大的。
按照这个电路的设计思路,使用 n 条IO接口引线,就可以驱动 n×n 个按键。
那么用5个IO引脚,就可以驱动5×5的键盘,这就足以满足各种应用了。
网上也有一些其它类型的节省接口的键盘电路,但是都有不足,不是电路过于复杂,就是驱动的按键个数较少,远远不及本电路简单实用。
做而论道已经按照这个电路制作了PCB板,外形和常规4×4键盘电路板相差无几。二极管体积很小,布线并没有障碍。
实践证明,这是个完美的精简接口的4×4键盘电路,不仅可以用在51单片机系统,在使用其它MCU组建的电路中同样适用。
针对这个电路,做而论道已经用汇编语言和C语言编写出了驱动程序,因为汇编语言可以使用“位操作”指令,所以程序的比较简单;C语言的程序,就显得累赘一些。
程序暂时就不公布了,有兴趣的网友可以来讨论。
史海拾趣
|
今天,科学家们介绍了一种新型的电子电路。这种电路可以模仿人脑的运动,如果用在计算机上,计算机就能象人一样进行思维。人的大脑皮层是人的思维中心,是由神经元组成的复杂的网状结构,有灵敏的反应力。来自麻省理工学院(MIT)、新泽西朗讯公司 ...… 查看全部问答> |
|
大家好,学生以前接触的硬件类比较多,这次需要在2440板子下跑wince,用串口读数据,我找了很多资料,发现都是直接给代码的,学生求助,是在什么环境下编译?PB吗?如果是PB的话,就是改PB里哪里的程序呢???学生很疑惑,学生其实是想用VS2005中 ...… 查看全部问答> |
|
68013A端点EP6OUT的BULK写失败求助,急!! 易用专业的PCI、USB、LED方案正在对68013A采用slavefifo方式进行bulk读写操作 我用EP2做in端点,1024字节,2从缓冲 用EP6做OUT端点,512字节,4从缓冲 我写好了68013A的固件,用CYPRESS的开发工具 ...… 查看全部问答> |
|
我的新书《ARM Cortex-M0从这里开始》已经出版,即将上市,希望大家多多支持。在这里先谢谢大家了。。。。。。。。。。。。。 前言和目录: 已经上市 北航:http://www.buaapress.com.cn/bookdetai ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:10 编辑 器件型号:RDK_BLDC DRV8312-C2-KIT (电机控制评估套件) &nbs ...… 查看全部问答> |
|
ls -bash: ls: command not found . 原因:在设置环境变量时,编辑profile文件没有写正确,导致在命令行下ls等命令不能够识别。 解决方案: exportPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin… 查看全部问答> |
|
在做CC2530串口通信的实验时,CC debugger 安装完好,可是win7\"设备管理器“里面没有了”端口“选项,无法再串口调试助手里面选择com口,以前用win8系统还是正常的,自从换成win7后就没有显示了,笔记本型号戴尔Inspiron_5537… 查看全部问答> |
|
STM8/STM32哪位大侠推荐一款好用的烧录器啊?因为是工厂烧录的,所以需要的是烧录器,不是仿真器。还有要能烧录STM32L158VT这颗IC的,我找过很多烧录器,都不能烧录这颗IC。… 查看全部问答> |




