if(keycode=key_code[j]) --应该是双等号。
试试下面的:
uchar keyscan()
{
uchar scan1, scan2;
P1 = 0xf0;
scan1 = P1;
if((scan1 & 0xf0) != 0xf0) {
scan1 = P1;
delay(30);
if((scan1 & 0xf0) != 0xf0) {
P1 = 0x0f;
scan2 = P1;
scan1 = scan1 | scan2;
for(scan2 = 0; scan2 < 16; scan2++)
if(scan1 == key_code[scan2]) return(scan2);
}
}
return(16);
}
void main()
{
uchar key;
P0 = 0xbf;
P27 = 0;
while(1) {
key = keyscan();
if(key < 16) P0 = table[key];
}
}