51单片机14(矩阵按键实验)

一、序言:由前面我们可知,独立按键,它的每一个按键都要占用一个IO口,如果说我们的按键数量比较多,那我们的IO资源是比较有限的,接不了那么多按键,这时候就会引用另一种按键模型,也就是矩阵按键。

二、矩阵按键介绍

1、独立按键与单片机连接的时候,每一个按键它都需要单片机的一个IO口,这个在我们前面介绍独立按键的时候也给大家说过。

(1)

(2)上面这四个按键就用到了四个IO口,如果是很多按键,它的IO使用的数量是非常多的,那么如果说我们的单片机需要非常多的按键,如果还是采用这种独立按键的一个接法,它就会占用非常多的一个IO资源,单片机系统当中的IO资源往往比较宝贵,当用到多个按键的时候,为了减少IO占用的引脚,那么引入了这个矩阵按键。

(3)那么我们开发板上使用的是4*4的一个矩阵按键,我们来讲解一下它的一个原理和检测的方法。那么,开发板上面呢,将16个按键排列成四行四列。

a、第一行就将每一个按键的一个端口管脚并联在一起,这一行就将这四个按键的一个管脚并联在一起引出来,同理,第二行也是一样,将一个按键的管脚并联在一起引出来。第三行和第四行都是一样。这样的话,就将这四行的按键的一个端引出来就有四行了。

b、同理,一列的话,它也把另一个管脚,全部并联引出来,构成了一列。这样一来,我的IO口占用的数量是不是只有八个。行四个,列四个。而我们的矩阵案件数量是16个,这样就大大缩小了我们的这个IO口的占用的一个总数。

c、那么,用这种方法,我们也可以实现三行三列,也就3*3这么九个按键和5*5或者是6*6等等,这个可以拓展更多的这些按键,它的IO占用的数量,也是相对来说比较少的。

d、那么无论是独立按键还是矩阵按键,那么单片机检测是否按下的依据都是一样的,也就是检测这个按键对应的这个IO的一个引脚,你是低电平还是高电平。那么独立按键有一端固定是为低电平的,所以这种方法的编程比较简单。你按键按下,我只要判断它是不是低电平就可以了。

2、而它两端我们可以看一下这个矩阵按键,它一段连到这个IO,另一端连到另一个IO,它两个拐角都有IO相连,因此在检测的时候,需要编程通过单片机IO口送出低电平,然后检测方法有两种,通常一种是行列式扫描,一种是线翻转法。

(1)行列式:行列式扫描方法检测原理其实跟我们的独立按键是非常类似的,行列式按键其实就是将我们的这个独立矩阵按键拆分为一个一个的独立按键。

a、怎么来拆分呢,我们来看一下,我们先送这一列为低电平。我假设这里是第一列,第二列,第三列,第四列,以此类推,第一行,第二行,第三行,第四行。

b、那如果我将第一列这里的IO口,让它输出一个低电平,输出一个低电平的时候,那么我其他的几列234列,我输出高电平,此时我们就检测第一列。第一列哪个按键按下对应的这个行是不是就为低电平,这是不是相当于我们独立按键四个按键全部供地,只不过我们这里的供地,它是由单片机IO口给它输出低电平。而我们的独立按键,它是直接连接GND,它是起到一个类似的功能,我们只要判断这四个按键哪一个为低,那就代表哪一个按键按下,这是第一列的一个检测。同理,第二列的检测就是将第二列的IO输出为低电平,其他的为高电平。同理,我们检测这四个按键的时候也是判断对应的行,哪一个为低电平,就是哪一个按键按下,然后把对应的键值返回出去,以此类推,第三和第四也是一样。这个就跟我们的独立式按键的一个扫描方法是一样的,所以它的编程方法也是最简单的。

c、

(2)线翻转法:它相对于行列式扫描法就稍微复杂了一点。它是行线全部为低,首先它将四条行线全部为低设置,让它的IO口输出为低电平,然后再判断这个列,判断这四列,如果有哪一个为IO口读到的这个电平为低电平就证明哪一列的上的按键有按下。因为现在是四行都为低电平,假设这一列,第二列为例,假设我这个按键按下,那对应的这里是低电平,那返回到这一列是不是也为低电平,其他没有读到按下的都是高电平,那只有这一列的按键,某一个按键按一下,你第一个按键按一下,这一条为低电平,因为这里全部行线全部为低,所以这一列上的任何一个按键按下都会导致这个IO读到的电平为低电平,这样你就不能判断具体是哪一个按键按下。这是第一次将行设置为低电平,我们能判断哪一列有按下。那第二次我们将列设置为低电平,然后判断行。然后假设我们还会到,假设是这个按键按下,我们刚开始行设置为低电平,第二列是不是可以得到一个低电平,我们读取到它的IO的时候,这一列是可以得到低电平,其他都是高电平,那然后如果是这一个按键按一下,现在将这个列全部送输出低电平来判断这个行,同理这个按键按下,那这个是不是低电平,其他的就为高电平,所以我们通过读到这个IO为低电平,那就能保证这一行有按键按下,那现在是刚开始是这一列有按键,然后这一次是这一行有按键按下,那是不是就能确认这个按键。

三、硬件设计

1、 

(1)第一张图是我们A2到A4的产品矩阵按键,同样是4*4的一个矩阵按键,也就是四行四列,那么,它是直接连接到我们的单片机的P1端口。

(2)而我们右边的这一张是我们的A5到A7的产品所对应的矩阵式按键的一个电路,同样也是使用4*4的一个矩阵按键,因为我们A5到A7的产品都是各个模块独立的,因此是矩阵式按键它的控制管脚也是单独引出来的,通过排针引出来,然后你需要连接到哪一个端口,由我们的用户自定义,当然为了兼容我们的这个程序,建议使用跟我们的这个端口是一致的。

四、软件设计

1、本章所要实现的功能是:通过数码管显示矩阵按键S1-S16按下后键值0-F。

2、行列式扫描

 

3、线翻转扫描

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值