int keys,previous,edges;
char KeyCount;
#define KeyDelay 30;
#define KeyRepeat 10;
char ReadKeyPad(){
char i;
rom char KeyPad[16]= "*7410852#963dcba";
previous=keys;
wpub|=0x0f;
keys=0;
portb=0;
for(i=4;i<8;i++){
keys<<=4;
trisb|=0xf0;
trisb&=255-(1<<i);
keys|=portb&0x0f;
}
keys^=0xffff;
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++;
}
i=KeyPad[i];
return i;
}