不消抖,直接检测显示正常,一旦增加延时去抖,第一排显示正常,2,3,4排都只有最后一位可用了。 高手能帮我解释解释吗? 键盘扫描程序(增加延时去抖后的)如下:
uchar scanf_key() {
P3=0xfe; temp=P3; if(temp!=0xfe) { // delay(5); // temp2=P3; // if(temp==temp2) // { // switch(temp) { case 0xee: i=1; break; case 0xde: i=2; break; case 0xbe: i=3; break; case 0x7e: i=4; break; } while(temp!=0xfe) { temp=P3; } delay(5); while(temp!=0xfe) { temp=P3; } } } P3=0xfd; temp=P3; if(temp!=0xfd) { delay(5); temp2=P3; if(temp==temp2) { switch(temp) { case 0xed: i=5; break; case 0xdd: i=6; break; case 0xbd: i=7; break; case 0x7d: i=8; break; } while(temp!=0xfd) { temp=P3; } delay(5); while(temp!=0xfd) { temp=P3; } } }
P3=0xfb; temp=P3; if(temp!=0xfb) { delay(5); temp2=P3; if(temp==temp2) { switch(temp) { case 0xeb: i=9; break; case 0xdb: i=10; break; case 0xbb: i=11; break; case 0x7b: i=12; break; } while(temp!=0xfb) { temp=P3; } delay(5); while(temp!=0xfb) { temp=P3; } } } P3=0xf7; temp=P3; if(temp!=0xf7) { delay(5); temp2=P3; if(temp==temp2) { switch(temp) { case 0xe7: i=13; break; case 0xd7: i=14; break; case 0xb7: i=15; break; case 0x77: i=16; break; } while(temp!=0xf7) { temp=P3; } delay(5); while(temp!=0xf7) { temp=P3; } } }
return(i);
}
|