矩阵键盘数码管显示键值

/*键扫描子程序*/
void keyscan(void)
{
P1=0x0F; //低四位输入
delay(1);
temp=P1; //读P1口
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==1)
key=0;
else if(temp==2)
key=1;
else if(temp==4)
key=2;
else if(temp==8)
key=3;
else
key=16;

P1=0xF0; //高四位输入
delay(1);
temp=P1; //读P1口
temp=temp&0xF0;
temp=~((temp>>4)|0xF0);
if(temp==1)
key=key+0;
else if(temp==2)
key=key+4;
else if(temp==4)
key=key+8;
else if(temp==8)
key=key+12;
else
key=16;

dis_buf=table[key]; //查表得键值}
我想问 P1=0x0F; //低四位输入
中P1的值和 temp=P1; //读P1口 的值相同吗??
他们是怎么赋值的??
不相同,要是相同if判断语句还有意义么?
P1=0x0F;矩阵键盘扫描,高4位为低电平,当低4位有键按下搜唤行,即对应低4位中的1位变低亏神如P1=0000 1101B,并且temp记录此时P!的值再经过逻辑操作temp=temp&0x0F;
temp=~(temp|0xF0);,temp = 0000 0010 /temp = 2;
另外,去抖延时delay(1)通常为10ms,如果else if 如果较多可选用switch case 优化一世空凯下