char ReadKeyPad(){
char i;
rom char KeyPad[16]="580247*169#3";
previous=keys;
wpub|=0x3c;
keys=0;
trisb|=0x3c;
for(i=0;i<3;i++){
keys<<=4;
trisa|=7;
trisa&=255-(1<<i);
porta&=255-(1<<i);
keys|=(portb>>2)&0x0f;
trisa|=7;
}
keys^=0x0fff;
trisb&=0xc3;
if(keys==0)
return(0);
if(((keys^previous)&keys)==0){
//repeating key
if(--KeyCount!=0)
return(0);
KeyCount=KeyRepeat;
}else{
//must be new key
KeyCount=KeyDelay;
edges=((keys^previous)&keys);
}
i=0;
while((edges&(1<<i))==0){
i++;
}
return (KeyPad[i]);
}