线转法实现键盘扫描的c语言程序,线反转法行列键盘扫描-Read.PDF

线反转法行列键盘扫描-Read

-DYDIY-

线反转法行列键盘扫描

杜洋 2005-11-21

行列键盘的学习是单片机学习的必经之路,可是对了初学者来说学习起来并

不容易。书上的资料不多,或是说明不细,抑或太复杂不易理解。我在学行列键

盘时也有过此类的问题,近日我发现了一个非常好的行列扫描的方式——线反转

法行列键盘扫描,它简单易懂,非常适合初学者学习,也可作为程序开发之用。

我同时也写了汇编和C 语言两个事例程序,不论你说什么语言 可以看懂。汇编

和C 的双语言例程也是我今后技术类文章的特点之一。

了解行列键盘扫描得从硬件开始学习,我们得知道行列扫描是什么意思。在

单片机系统中为了扩大同一个I/O 口的键盘个数,则采用了行列式键盘接法,就

是交叉相接。如图:

图1

键盘接的前4 个I/O 口为 接线,后4 个为列接线。这样的接法就构成了一

个坐标,每一个键 对应这一个行的位置和一个列的位置。例如我们说左上角的

那个所对应第1 行和第4 列,即单片机P 10 和P 17 两个I/O 口。键盘的组成是用

的微动开关,微动开关的特性是当有键按下时开关的两个引脚闭合导通。无按键

时两个引脚是断开的状态。这样当我们按下图1 中左上角的键时P 10 和P 17 在

物理上是导通了,而其它的I/O 口(P 11~P 16)都处于独立的状态。我们只要让

单片机发现哪两个I/O 口是导通的我们就可以知道是哪一个键被按下了。

这里我们用的一种方法是先将4 个行线的I/O 口置为 “0 ”(低电平),将列

线的I/O 口置为 “1”( 电平)。这样当有键按下时某一行的I/O 口就和某一列

/ - 1 -

-DYDIY-

中的I/O 口导通了,因为行线的口 是 “0 ”(低电平)所以和行线导通的列线也

将会变成“0 ”,而其余的列线因为开始时是 “1”又没和其它的行线导通,所以

依然是“1”。这样我们就可以找出了我们的按键所在的列了 (因为列线中只有导

通的列线变为了“0 ”,任何电平与低电平相导通 属于短路,短路的线将会是低

电平)。

其实,所谓的“ ”、“列”是我们人为规定的,如果试着把列看成行,将

看成列是一样的。这里我们规定P 10~P 13 为行,P 14~P 17 为列。

现在我们知道了我们按下的键所在的列了,只要再知道它所在的行的话,我

们就可以确定它的位置了。这时我们将4 个 线的I/O 口置为 “1”( 电平),

将列线的I/O 口置为 “0 ”(低电平),这是和最初的置式相反。被按着的那个按

键还是导通的,还是属于短路,所以在被置“1”的行线中将会有一个变成了“0 ”,

这样我们就确定了按键在 中的位置,到此我们还要确定什么呢?不需要了,我

们已经找到了按下的键了。

举一个例子吧。例如我们按下了左上角的那个按键,首先当4 个行线的I/O

口置为 “0 ”,列线的I/O 口置为 “1”时 (即P1 口的字节数据,第

1 行和第4 列导通,使第4 列 (P 17)变为了 “0 ”(此时的P1 口的字节数据为 。之后当4 个 线的I/O 口置为 “1”,列线的I/O 口置为 “0 ”时 (即

P1 口的字节数据,第4 列和第1 导通,使第1 (P 10)变为了

“0 ”(此时的P1 口的字节数据)。通过了两次用单片机读出2 个字

节的数据,分别是 和 (从左向右,由 位到低位,P 17

—>P 10)。前一个字节的低4 位和后一个字节的 4 位 是 “0 ”,于是我们将它

们去掉再将余下的数据拼成一个新的字节,即。如果我们按下的是

第一行的第2 个键的话,我们得到的字节将会是(第1 行,第3 列)。

每按一个键我们都得到不同的字节,比对我们的字节是什么就可以知道键值

是什么了。

/ - 2 -

-DYDIY-

单片机行列键盘扫描程序流程:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值