51单片机 C语言编程的疑问

void keyscan(void)
{ P1=0xF0; //高四位输入 列为高电平 行为低电平
delay(1);
temp=P1; //延时 //读P1口
temp=temp&0xF0; //屏蔽低四位
temp=~((temp>>4)|0xF0);
if(temp==1) // p1.4 被拉低
key=1; //第1个按键键值
else if(temp==2) // p1.5 被拉低
key=2; //第2个按键键值
else if(temp==4) // p1.6 被拉低
key=3; //第3个按键键值
else if(temp==8) // p1.7 被拉低
key=4; //第4个按键键值
else
key = 16;

P1=0x0F; //低四位输入 行为高电平 列为低电平
delay(1); //延时
temp=P1; //读P1口
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==2) //第一行 p1.1 被拉低(直接P1==2 是因为我们P1.0空的,是3*4的矩阵键盘)
key=key+0;
else if(temp==4) //第二行 p1.2 被拉低
key=key+4;
else if(temp==8) //第三行 p1.3 被拉低
key=key+8;
else
key = 16;

请问如果这个程序中的temp替换成P1后的区别和影响?

第1个回答  2013-06-30
void  keyscan(void)
 {  P1=0xF0;                 //高四位输入   列为高电平  行为低电平
    delay(1);
temp=P1;  //延时               //读P1口 
    temp=temp&0xF0;  //屏蔽低四位
    temp=~((temp>>4)|0xF0);   
   if(temp==1)   // p1.4 被拉低
        key=1;  //第1个按键键值
    else if(temp==2)   // p1.5 被拉低
        key=2;   //第2个按键键值
    else if(temp==4)   // p1.6 被拉低
        key=3;  //第3个按键键值
    else if(temp==8)   // p1.7 被拉低
         key=4;   //第4个按键键值
else
  key = 16;
        
    P1=0x0F;             //低四位输入  行为高电平 列为低电平
    delay(1);  //延时
  temp=P1;             //读P1口       
    temp=temp&0x0F;
    temp=~(temp|0xF0);
    if(temp==2)    //第一行  p1.1  被拉低(直接P1==2 是因为我们P1.0空的,是3*4的矩阵键盘)
        key=key+0; 
    else if(temp==4)   //第二行  p1.2  被拉低
        key=key+4;
    else if(temp==8)   //第三行 p1.3  被拉低
        key=key+8;
else
 key = 16;

您好!检测下来问题不大,但还是建议不要替换!

第2个回答  2013-06-30
temp只是一个变量,对其读写不会影响IO口的状态,如果直接换成P1口就不一样了,赋值给P1,P1当然会随之而变。本回答被提问者采纳
第3个回答  2013-06-30
替换后不能小抖动,P1会随时变化 的。
相似回答