如图所示矩阵式键盘与单片机矩阵输出相连,试编写程序段实现以下功能

51单片机矩阵输出矩阵按键扫描


经典扫描方法:(存在一个弊端:当使用一个按键按一次变量加1,真实情况是按一次结果变量加了好多次。)

{ // 这时可以确定按下的是(row+1)行 return 16; // 因为定义数码管段选表中16对应的是全灭,故无按键按下时返回16

我个人写了一个矩阵按键扫描可以解决上面那个弊端,代码如下:

* 描述 :延时函数 (具体情况以自己的板子为准) * 描述 :矩阵键盘的键值返回(在没有按任何键时 * 函数返回值为16,只有在按下按键的瞬间返 * 回嘚键值才是你真正按下按键的键值正是这样才能实现长按连续加或减) // 确定矩阵按键被按下位置的键值:列(或0或1或2或3) + 行(或0或4或8或12) // 使用丅面这种形式,则可以达到目的
从上面五幅图片我们得到:第一行(0x0E)、第二行(0x0D)、第三行(0x0B)、第四行(0x07)。因为每一行有四列所以定义这四行的起点分别是:0、4、8、12(04、14、24、34)。
从上面的五幅图片中我们得到:第一列(0x70)、第二列(0xB0)、第三列(0xD0)、第四列(0xE0)。因为每一行有四列所以定义这四列分别固定为:0、1、2、3。
【最后确定键值:列号(0/1/2/3)+行起点(0/4/8/12)】

矩阵键盘程序中的扫描原理:首先进行列扫描确定按下的是第几列(即每一列固定的列号),接着进行行扫描确定是第几行(即确定行起点)。

飞哥语录:别高估关系别低估囚心。

if(i!=0)//键盘子程序返回值非0即有按键按下

由键盘输入一个3×4矩阵a,选出各列最小的元素组成一个一维数组b并输出
由键盘输入一个3×4矩阵a选出各列最小的元素组成一个一维数组b并输出

好了,今天的分享就到这里分享一句话作为今天文章的结尾吧:梦里求她千百度,蓦然囙首那人却在灯火阑珊处。

我要回帖

更多关于 单片机矩阵输出 的文章

 

随机推荐