目标:矩阵按键在数码管上显示数字
矩阵按键模块:
P0~3是一组,P4~7是一组
矩阵按键识别方法:
(1)逐行扫描
是种常见的方法,先把高四位全部置低电平,低四位置高电平,如果有按键按下那么低四位就会出现不全为1的情况,因为按键变不导通状态,之前是导通,这样就知道有按键按下了。
知道按键按下后就要判断具体是哪个按键按下的,于是把高四位和低四位变高电平,然后逐行逐列检测发现有行有个低电平,又发现个列有低电平,两个一交叉就知道是哪个按键按下的了
(2)行列扫描
通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位变不全为高电平,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下。
然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。
矩阵按键可以变成独立按键吗?
独立按键以前说过,就是一端接地的区别,所以把列接地,就变成的独立按键,可以拿排针把高位接出来
代码:
LSA, LSB, LSC是数码管位选,定义了两个全局变量
第一个if是让低四位置高电平,判断列,通过P1口数值的不同知道是那个列按下,给keyvlaue赋相应值,然后再判断行,行与行之间相差4,所以这里第四行与第一行差12,其它自行对比
那个while((a<50)&&(Butt!=0x0f))是判断按键是否松开,还能防止一直按着使cpu一直工作