单片机4X4矩阵键盘扫描检测程序 原理是
主程序 每次 调用 键盘扫描检测程序,程序进行 每一行的检测,如
第一行 P3口被赋值0xfe后,再读取 P3口的 值,等于0xfe 表示没有键按下,不等则有键按下,
第二行、第三行、第三行 一样,有键按下 把键值保存,接下来就是判断 是 那个按键按下的,
每个按键的键值 是 不一样的 如
第一行 没有按键按下 键值 是 0xfe ,有按键是 0xee 或者 0xde 、0xbe、0x7e
第二行 没有按键按下 键值 是 0xfd ,有按键是 0xed 或者 0xdd 、0xbd、0x7d
第三行 没有按键按下 键值 是 0xfb ,有按键是 0xeb 或者 0xdb 、0xbb、0x7b
第三行 没有按键按下 键值 是 0xf7 ,有按键是 0xe7 或者 0xd7 、0xb7、0x77
取那一时刻p3口的值,执行P3=0xfe 是为了等待最低位0将某高位拉低,置0.
其实4X4 有很多的检测方法,按照你所给你的代码来看,应该属于行列扫描形式,因为你知道第几行第几列,就知道键值了,懂起不?
P3=0xfe; //P3=0b1111 1110,令P3.0=0,同时令高四位为高电平,作好读端口准备(51IO特点)
temp=P3; //读回P3口的状态
temp=temp&0xf0; //temp&1111 0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。
while(temp!=0xf0) //上步处理后,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不方便上图)
{
delay(5);
temp=P3;
temp=temp&0xf0;//这三句跟上面重复,功能是软件消抖
while(temp!=0xf0) //延时一段时间后判断还有按键按下,说明是真有按键按下,进入按键扫描与键值的判断,否则可能是意外抖动引起的,就不进行按键扫描。
{
temp=P3;
switch(temp).....
我想注释完应该能读懂,关键是要理解矩阵键盘的扫描原理。