按键扫描处理总结



一、      矩阵按键扫描方法

1、现在的矩阵扫描主要有两种方法:

1)行列扫描法

2)反转法。

2、行列扫描法

1)行列扫描法的基本思想:

行列扫描法是将其中的一行输出为低电平,其他行输出为高电平,列设为输入,然后判断哪一列为低电平,从而确认出是哪一行哪一列有键按下。

2)行列扫描法举例

如图1所示的2*2矩阵键盘,首先:将PB1PB2作为行,并设置为输出;PA1PA2作为列,并设置为输入。

其次:PB1设置为低电平输出,PB2设置为高电平输出,查看此时PA1PA2的输入状态,假设此时S1按下,则此时PB1输出低电平通过S1传到了PA1上,使得PA1输入为低电平,而PA2仍然为高电平。说明第一行有键按下,并且是第一列有键按下

然后:再将PB1设置为高电平输出,PB2设置为低电平输出,此时PA1PA2输入都为高电平。说明第二行上没有按键按下。

最后:至此可以判断此时的PA1PB1上的按键被按下,即第一行第一列的S1被按下。整个按键扫描过程结束。

3、反转法

1)反转法的基本思想:

将行设为输出为低电平,列设为输入,判断此时列的输入状态;然后在将列设为输出位低电平,行设为输入,判断此时行的输入状态。如果有键按下,则其中的列输入状态必然有其中一列为低,行的输入状态也必然有其中一行为低,记录此时的行列号即可判断出是哪一行哪一列有键按下。

2)反转法举例:

如图1所示的2*2矩阵键盘,首先:将PB1PB2作为行,并设置为输出;PA1PA2作为列,并设置为输入。

其次:将PB1PB2输出为低,查看PA1PA2输入状态,假设还是S1被按下,则此时PA1输入为低电平,PA2输入为高电平。说明第一列有键按下。

然后:将PB1PB2作为行,并设置为输入;PA1PA2作为列,并设置为输出。

最后:将PA1PA2输出为低,查看PB1PB2输入状态,则此时PB1输入为低电平,PB2输入为高电平。说明第一行有键按下。至此可以判断是第一行第一列有键按下,即S1键被按下,整个反转法扫描过程结束。



1 矩阵键盘

二、两种扫描法存在的问题:

1、行列式扫描法存在的问题

行列扫描法虽然能够扫描出多个按键按下的情况,但是行列扫描法在扫描时,如果同一列有两个或者两个以上的按键按下,比如S1S3被同时按下,这时开始行列扫描,当PB1输出为低电平,PB2输出为高电平时。由于S1S3被同时按下,相当于PB1PB2被短接,导致PB1输出的低电平和PB2输出的高电平被短接到了一起,如此一来将会存在高低电平的冲突,这个冲突虽然低电平占优势,但是对整个电路来说是一种隐患。

2、反转法存在的问题

现在反转法只适合单个按键按下的情况,如果一旦遇到多个按键按下,反转法便存在缺陷了。比如S1S4被同时按下,当进行反转法扫描时,将PB1PB2输出为低,此时PA1PA2输入状态都为低;当进行反转法扫描时,将PA1PA2输出为低,此时PB1PB2输入状态都为低。此时只能判断出第一行,第二行都有键按下,同时第一列和第二列也有键按下。但是无法具体判断出是哪几个键按下。

3、共同存在的问题

    如果如图1所示的矩阵键盘,如果同时有三个按键按下,比如S1S2S3被同时按下,则反转法肯定扫描不出来,但是此时的行列扫描法也无法将扫描出来具体是哪几个按键按下。比如当PB1输出为低电平,PB2输出为高电平时,PA1PA2都输入为低;当PB2输出为低电平,PB1输出为高电平时,PA1PA2也都输入为低。此时只能判断出第一行,第二行都有键按下,同时第一列和第二列也有键按下。而无法判断具体是哪几个按键按下。而且此时行列扫描存在的电平冲突问题依然存在。

三、改进的行列扫描法

1、改进扫描法的基本思想

由于传统的行列扫描法存在上述的高低电平冲突,所以对普通的行列扫描法做了修改,当其中一行输出为低电平的时候,将其他行设置为输入,这样就不会因为同一列上有多个按键按下的时候造成高低电平的冲突了。

2、改进扫描法的举例

如图1所示的2*2矩阵键盘,首先:将PB1设置为输出;PA1PA2PB2并设置为输入。

其次:PB1设置为低电平输出,查看此时PA1PA2的输入状态,假设此时S1S3同时被按下,则此时PB1输出低电平通过S1传到了PA1上,使得PA1输入为低电平,而PA2仍然为高电平。说明第一行有键按下,并且是第一列有键按下,即S1被按下。虽然S1S3同时按下,导致PB1PB2被短接,但是由于由于此时的PB1设置为输入,就不存在传统行列扫描法所存在的高低电平冲突。

然后:PB2设置为低电平输出,PA1PA2PB2并设置为输入。此时PA1输入为低电平。说明说明第二行有键按下,并且是第一列有键按下,即S3被按下。同理也不会出现上述的高低电平冲突。

最后:至此可以判断S1S3被同时按下。整个按键扫描过程结束。

3、改进式行列扫描法的意义

改进式行列扫描法避免了传统扫描法在扫描过程中,如果同一列有多个按键按下时出现的高低电平冲突,并且程序量不会增加。但是对于上述提到的S1S2S3被同时按下的情况,改进式行列扫描法也无法解决,有待进一步探究。

你可能感兴趣的:(按键扫描处理总结)