我写了一个4*4矩阵按键识别的程序,可是按那个键都不亮...
unsigned table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char X;
unsigned char scan_key(void)
{
unsigned i,temp,m,n;
bit find=0;
P1=0Xff;
for(i=0;i<4;i++)
{
P1=0xef<<i;
temp=~P1;
temp=temp&0x0f;
while(temp!=0x00)
{
m=i;
find=1;
switch(temp)
{
case 0x01:n=0;break;
case 0x02:n=1;break;
case 0x04:n=2;break;
case 0x08:n=3;break;
default:break;
}
}
}
if(find==0) return -1;
else return(n*4+m);
}
void main()
{
while(1)
{
X=scan_key();
P0=table[X];
}
}
P1口高四位是行,低四位是列,我是初学,也不知道对不对,请帮我看看
P3=0xfe;
temp=P3; //temp为中间变量
temp=temp&0xf0; //temp和P3按位与
if(temp!=0xf0) //如果有键被按下的话,执行if语句
{
delay(10); //延时,去抖动
if(temp!=0xf0) //在此判断,此事是否还按下
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
P1=0xfe;
}
}
这只是令第一行为低电平的,其他的照着写写就行了