首先分享一个矩阵键盘电路:
上述的键盘编码方式是目前为止原理最简单的方式。首先我们知道当有一个按键按下去之后,相应的列线和行线之间就会短路(也可以说是直接相连),因此我们做扫描程序编码时候,一般都是让我们的8位输出口首先输出0xf0或者0x0f这样子比较有特点的一些数值,因为一旦按键按下之后,就能和清晰的读取回来,并且第一次判断是哪一行,哪一列。然后在第二次把这些行全一或者列全一的数值进行对调,再读入之后就能进行编码了。
但是,我们仔细想一下以下的叙述方式。我第一次输出0xf0,假设KEY2按下时,入读的就应该是0xe0,那么假设我让第二次输出0x0e,试想下在读取8这个电路的行列时候会变成什么样子?是不是很容易得出0xde这个值?那这个0xde就是KEY2的编码。因此我们在这里总结了行反转法的基本流程:
(1)端口输出0xf0;
(2)读入,判断是否为0xf0,如果不是表示有按键按下;
(3)将读入值的高4位和低4位交换,再输出;
(4)读入端口的值,即按键的编码。
附件内容截图:
部分源码截图: