本发明涉及键盘按键的定位方法,具体涉及一种简单高效的矩阵键盘按键定位方法。
背景技术:
随着嵌入式系统、便携式设备的大量涌现,矩阵键盘作为其常见的输入设备使用场合也随之不多增加。为此许多人提出了对于矩阵键盘电路设计的改进方案,但目前使用最广的依然是传统的矩阵键盘设计。
根据传统的矩阵键盘设计中rc值的规律,目前最常见的矩阵键盘按键定位方法共两种:逐一键值判断法和逐行(列)扫描法。其中,逐一键值判断法将输入的rc值与表1中16个不同的值进行逐一对比,判断按下的按键。这种方法常用在c语言编程的嵌入式系统,因为只需要一个switch-case组合语句就能实现。而逐行(列)扫描法则常用在汇编语言编程的嵌入式系统,因为其执行速度较逐一键值判断法要高,而且汇编程序的代码量与逐一键值判断法相差不大。其算法思想是:先逐一判断按键在哪一行,再逐一判断按键在那一列,最后根据行和列的判断结果输出对应的键值。对于逐一键值判断法和逐行(列)扫描法均有各自的缺点。逐一键值判断法的优点是算法简单,而缺点是效率低,程序存储空间消耗大。逐行(列)扫描法的优点是效率高,而缺点是算法流程复杂,程序存储空间消耗大。
技术实现要素:
为了克服上述的两种方法的缺点,本发明提出一种简单高效的矩阵键盘按键定位方法,本发明拥有简单、高效、rom消耗小的优点。
本发明采用以下技术方案:
一种简单高效的矩阵键盘按键定位方法,应用于4*4矩阵键盘时,依次包括以下步骤:
步骤一,首先获取4*4矩阵键盘的16个行列值,即rc值,并且匹配16个相应的key值;
步骤二,自定义变量rc_2等于输入值rc,自定义键值变量key等于0;
步骤三,读取并判断rc_2的最低位是否为0;如果为0,进入步骤四;如果不为0,将key加1,同时rc_2右移一位,继续读取并判断右移之后的rc_2的最低位是否为0,直至判断为0,进入步骤四;
步骤四,再次令变量rc_2等于输入值rc;
步骤五,将rc_2的高四位和低四位进行互换,然后读取并判断rc_2的最低位是否为0;如果为0,进入步骤六;如果不为0,将key加4,同时rc_2右移一位,继续读取并判断右移之后的rc_2的最低位是否为0,直至判断为0,进入步骤六;
步骤六,输出当前键值key,按键定位结束。
所述矩阵键盘按键定位方法在应用更高阶的5*5、6*6矩阵键盘时,本方法仅需调整变量位数宽度和累加值,无需新增代码。
所述4*4矩阵键盘rc值的获取方法包括以下步骤:
1)col[0~3]置为高阻(输入),row[0~3]输出0000b(二进制);
2)将col[0~3]的输入保存到变量a;
3)col[0~3]输出0000b,row[0~3]置为高阻(输入);
4)将row[0~3]的输入作为高四位,与变量a的低四位合并,保存至变量rc(rc为8bit);
5)输出rc的值;
得到的rc值如下:
从上述16个rc值可以看出,每一个rc值的高四位与低四位中分别只有一位为0,其他三位均为1。假设在rc值的高四位中,第x位(从0开始计数,故整个字节第5位为高四位的第0位)为0,在低四位中,第y位(从第0位开始计数)为0,可得该rc值对应的键值等式:键值=x*4+y*1(0≤x,y≤3)。
基于键值等式的规律,本发明提出来如上述的切实可行的高效的矩阵键盘案件定位方法。
本发明的有益效果:
1.本方法流程简单,在汇编环境下代码量比逐一键值判断法和逐行(列)扫描法的代码量减少了约四分之三,由此节约了程序存储空间,降低了程序维护成本。
2.本方法最后的累加结果key就是所需键值,这让我们省去预先定义键值的麻烦,并节省了存储空间。
3.从判断语句运行的次数看,本方法的判断次数与逐行(列)扫描法相同(判断2到8次),比逐一键值判断法(判断1到16次)少。可见本方法的效率与逐行(列)扫描法相近,优于逐一键值判断法。
4.当应用于更高阶的5*5、6*6矩阵键盘时,本方法仅需调整变量位数宽度和累加值,无需新增代码。
附图说明
图1为本发明的一种简单高效的矩阵键盘按键定位方法的矩阵键盘程序流程示意图。
图2为本发明的一种简单高效的矩阵键盘按键定位方法的获取矩阵键盘行列(rc)值流程图。
图3为本发明的一种简单高效的矩阵键盘按键定位方法的位移累加计算流程图。
具体实施方式
下面对本发明进一步说明。
实施例:
如图所示,提供一种简单高效的矩阵键盘按键定位方法,步骤如下:
步骤一,首先获取4*4矩阵键盘的16个行列值,即rc值,并且匹配16个相应的key值;
步骤二,自定义变量rc_2等于输入值rc,自定义键值变量key等于0;
步骤三,读取并判断rc_2的最低位是否为0;如果为0,进入步骤四;如果不为0,将key加1,同时rc_2右移一位,继续读取并判断右移之后的rc_2的最低位是否为0,直至判断为0,进入步骤四;
步骤四,再次令变量rc_2等于输入值rc;
步骤五,将rc_2的高四位和低四位进行互换,然后读取并判断rc_2的最低位是否为0;如果为0,进入步骤六;如果不为0,将key加4,同时rc_2右移一位,继续读取并判断右移之后的rc_2的最低位是否为0,直至判断为0,进入步骤六;
步骤六,输出当前键值key,按键定位结束。
在将本实施例的矩阵键盘按键定位方法应用到更高阶的5*5、6*6矩阵键盘时,本方法仅需调整变量位数宽度和累加值,无需新增代码。
需要指出的是,上述实施例仅为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。