164一次只能输出一位0,然后读P00,P01口的状态,Q0为0,则检测0,8键,Q1为0则检测1,9键,读8次就可以扫描所有按键... 简单看了一下你的程序好象不对.... unsigned char get_char(void) { unsigned char key_code,column=0,mask=0x00; TI=0; SBUF=mask; while (TI==0);... 你每使Q0~Q7全部为0,不可能检测是哪个按键... 示意代码如下: unsigned char code _164_OUT[] = {~1,~2,~4,~8,~16,~32,~64,~128};
unsigned char scan_key(void) { unsigned char i; unsigned char key_num;
for(i=0; i<8; i++){ TI = 0; SBUF = _164_OUT; while(!TI); TI = 0; if(P10 && P11){ continue; } if(!P10 && !P11){ return TWO_KEY_PUSH; } if(!P10){ return (key_num = 0+i);
}else if(!P11){ return (key_num = 0+8); } } return NO_KEY_PUSH; }
|