不管是多少行多少列的矩阵键盘,其编程思路是一样的。下面介绍最常用的两种判断键值(即判断是哪个按键按下了)的方法——扫描法和利用二维数组存储键值。
1.扫描法简介
扫描法是常用的一种按键识别方法,容易理解。其方法是依次将行线中的每一根线的电平置为低电平,再逐次判断列线的电平。如果某列线的电平为低,则判定该列线与行线交叉处的按键被按下(闭合)。也可以依次将列线中的每一根线置为低电平,再逐次判断行线的电平。
2.扫描法应用典型示例
(1)任务书:使用YL-236单片机实训台的矩阵键盘(与单片机的连接如图8-9a所示),实现当某个键按下时,8位数码管同时显示按键的值(单片机的P3口与数码管的D0~D7相连)。
(2)程序代码示例
3.利用二维数组存储键值
(1)二维数组。二维数组定义的一般形式为:
类型说明符 数组名[常量表达式][常量表达式]
例如:inta[2][4];
定义为2行、4列的数组。
给二维数组初始化(即赋初值)的方法有以下两种:
1)对数组的全部元素赋初值。例如:
inta[3][4]=﹛﹛1,3,2,4﹜,﹛5,6,7,9﹜,﹛8,10,11,12﹜﹜;
这种赋值方法很直观,将第一个{}内的元素赋给第0行,第二个{}内的元素赋给第1行。也可以写成下面的格式更为直观:
还可以将所有的数据写在一个{}内,例如:
inta[3][4]=﹛1,3,2,4,5,6,7,9,8,10,11,12﹜;(www.xing528.com)
2)对数组的部分元素赋初值。例如
inta[3][4]=﹛﹛1﹜,﹛5﹜,﹛8﹜﹜;
对二维数组的存入和取出顺序是:通过下标来按行存取(注:行下标数的最大值等于行数减1,列下标的最大值等于列数减1,这和一维数组是一样的),先存取第0行的第0列、第1列、第2列……直到第0行的最后一列,再存取第1行的第0列、第1列、第2列……直到第1行的最后一列。
例如:temp=a[0][3],就是将第0行的第3个元素值赋给变量temp。temp=a[2][3]就是将第2行的第3个元素值赋给变量temp。
(2)利用二维数组获取矩阵键盘键值的典型应用示例
1)任务书:矩阵键盘的键值分布如图8-10a所示,单片机与矩阵键盘行列的连接如图8-9a所示。利用二维数组获取矩阵键盘的键值,并送到图8-11所示的8位LED进行显示(例如:若键3被按下,3的二进制数为00000011,则LED1和LED0被点亮,其余的都不点亮)。
图8-11 YL-236单片机实训台的LED模块
2)程序代码(参考)如下:
3)程序代码解释
当i=0时,执行到12行时P1=11101111,执行第13行以后,有以下4种情况:
当j=0时→执行14行:_cror_(0x08,j)仍为0x08即00001000,该值与P1“按位与”后的值若为0,则肯定是第0列有键按下。所以键值为ka[i][j]=ka[0][0],即0,函数的返回值为0。
当j=1时→执行14行:_cror_(0x08,j)变为00000100,该值与P1按位与后的值若为0,则肯定是第1列有键按下。所以键值为ka[i][j]=ka[0][1],即1。函数的返回值为1。
当j=2时→执行14行:_cror_(0x08,j)变为00000010,该值与P1按位与后的值若为0,则肯定是第2列有键按下。所以键值为ka[i][j]=ka[0][2],即2;函数的返回值为2。
当j=3时→执行14行:_cror_(0x08,j)变为00000001,该值与P1按位与后的值若为0,则肯定是第3列有键按下。所以键值为ka[i][j]=ka[0][3],即3;函数的返回值为3。
当i=1时,j=0、1、2、3对应的函数的键值分别为4、5、6、7,函数返回值为4、5、6、7。
当i=2,i=3时,键值和函数的返回值可用相同的方法去分析。
这种方法的优点是程序简洁,占用的空间小,不足之处是执行的效率没有扫描法高。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。