在初学者编写独立按键和矩阵按键的时候,或许有人敏锐的观察到了之间某段代码的区别,即初始值一个是高电频,一个是低电频。因此我们就需要通过查询开发手册来寻找答案。
这个是独立按键模块的开发板原理图,可以看到右侧GND是接地模块,即稳定低电频,因此我们左侧的引脚初始值一定为高电频,通过按下按键,改变电频高低,从而形成电流,所以说在编写程序的时候我们可以认为初始值就是一个高电频(某个按下对应a值变为0,进入循环)
这个是矩阵按键模块,与独立按键不同的是独立按键两端的引脚并未接地,因此要通过其他方法来检测按键被按下的情况:
方法一:行列式扫描法
因为没有两端没有接地的情况,我们可以通过改变两端的电频来判断按下的位置(不理解矩阵按键行列建议去网上先了解),我们要对按键进行两次判断,将十六个矩阵按键拆分成一个一个的独立按键。我们先将所有列从左到右一次标号1~4,所有行从上到下标号1~4,为了检测哪一列有按键被按下,我们依次对列赋予低电频(其他列为高电频),变为低电频的那一列的四个按键我们就可以近似看为一组独立按键,一端接地,然后对这一组进行检测,看是否有按键变为低电频被按下,编程方法最为简单。
方法二:线翻转法
标号继承,第一次检测,我们先对所有行的I0上述口赋予低电频0,此时假如第三行第二列那个按键被按下,则在扫描的过程中,第二列全为低电频,而其他列因为没有被按下,全为高电频,无法判断是哪一个按键被按下(不管第二列哪一行的按键被按下,只要有一个按下,则整列就全变为低电频,因此需要检测第二次)。
第二次检测,我们将所有列的I0口赋予低电频,然后用同样的方法判断行,第三行第二列按键被按下,则第三行会输出低电频,其他行均为高电频,通过列和行分别扫描检测,最终定位到具体按键。
矩阵按键两种检测程序后续文章再详细阐述,见:
行列式扫描法https://blog.csdn.net/id212204999/article/details/137748069
线翻转法
https://blog.csdn.net/id212204999/article/details/137752949