直接在这修改矩阵按键引脚即可:
sbit Hang1 = P3^3;
sbit Hang2 = P4^2;
sbit Hang3 = P3^6;
sbit Hang4 = P0^7;
sbit Lie1 = P3^2;
sbit Lie2 = P5^5;
sbit Lie3 = P3^5;
sbit Lie4 = P0^6;
void KeyScan()
{
static unsigned char key_state=0;
unsigned char key_value=0,key_x=0,key_y=0;
Hang1 = 1;Hang2 = 1;Hang3 = 1;Hang4 = 1;
Lie1 = 0;Lie2 = 0;Lie3 = 0;Lie4 = 0;
if(!Hang1)
key_x=3;
else if(!Hang2)
key_x=2;
else if(!Hang3)
key_x=1;
else if(!Hang4)
key_x=0;
Hang1 = 0;Hang2 = 0;Hang3 = 0;Hang4 = 0;
Lie1 = 1;Lie2 = 1;Lie3 = 1;Lie4 = 1;
if(!Lie1)
key_y=4;
else if(!Lie2)
key_y=3;
else if(!Lie3)
key_y=2;
else if(!Lie4)
key_y=1;
//根据x,y的值计算具体位置
key_value=key_x+key_y*4;
//进行按键状态判断
switch(key_state)
{
case 0:
if(key_value!=0)
key_state=1;//第一次扫描
break;
case 1://第二次扫描
if(key_value==0)
key_state=0;
else
{
key_state=2;//第二次扫描还有值 直接进行判断
switch(key_value)
{
case 4:num=4;break;
case 5:num=5;break;
case 6:num=6;break;
case 7:num=7;break;
case 8:num=8;break;
case 9:num=9;break;
case 10:num=10;break;
case 11:num=11;break;
case 12:num=12;break;
case 13:num=13;break;
case 14:num=14;break;
case 15:num=15;break;
case 16:num=16;break;
case 17:num=17;break;
case 18:num=18;break;
case 19:num=19;break;
}
}
break;
case 2:
if(key_value==0)
key_state=0;
break;
}
}