最簡(jiǎn)單的4*4矩陣鍵盤程序 c51
調(diào)試通過.
key_scan_p2() //定時(shí)器,或者主程序掃描
{uchar x,y,z;
P2=0x0f;
x=P2&0x0f;
P2=0xf0;
y=P2&0xf0;
z=x|y;
if(z!=key_value1) key_value1=z; //如果兩次結(jié)果不同
else
{
if(key_value1 == 0xff) key_release=0;
else
{
if (key_release==0) //所有按鍵已經(jīng)松開了嗎?
{
key_release = (z ^ 0xFF);
key_val = z;
switch(key_val)
{
case 0xe7:LED1=~LED1;break;
case 0xd7:LED2=~LED2;break;
case 0xb7:LED3=~LED3;break;
case 0x77:LED4=~LED4;break;
case 0xeb:LED5=~LED5;break;
case 0xdb:LED6=~LED6;break;
case 0xbb:LED7=~LED7;break;
case 0x7b:LED8=~LED8;break;
case 0xed:LED9=~LED9;break;
case 0xdd:LED10=~LED10;break;
case 0xbd:LED11=~LED11;break;
case 0x7d:LED12=~LED12;break;
case 0xee:LED13=~LED13;break;
case 0xde:LED14=~LED14;break;
case 0xbe:LED15=~LED15;break;
case 0x7e:LED16=~LED16;break;
default: break;
}
}
}
}
/* P2 = 0XFF;
if(P2!=key_value1) key_value1=P2; //如果兩次結(jié)果不同
else
{
if(key_value1 == 0xff) key_release=0;
else
{
if (key_release==0) //所有按鍵已經(jīng)松開了嗎?
{
key_release = (P2 ^ 0xFF);
key_val = ~P2;
switch(key_val)
{
case 0x01: LED1=~LED1;
break;
case 0x02: LED2=~LED2;
break;
case 0x04: LED3=~LED3;
break;
case 0x08: LED4=~LED4;
break;
case 0x10: LED5=~LED5;
break;
case 0x20: LED6=~LED6;
break;
case 0x40: LED7=~LED7;
break;
case 0x80: LED8=~LED8;
break;
default: break;
}
}
}
} */
}