//keypad.c //on PORTB on the NM110 LCD/LED/Keypad Board #include #include "keypad.h" #define nop asm("nop") char keypad(void) { TRISB = 0xf0; // upper nybble inputs lower outputs for keypad nop; RB0 = 0; // 0 rotated through lower nibble RB1 = 1; // upper nibble set to inputs with RB2 = 1; // weak pullups - check which is lo RB3 = 1; nop; if(!RB4) return('0'); if(!RB5) return('1'); if(!RB6) return('2'); if(!RB7) return('3'); RB0 = 1; RB1 = 0; nop; if(!RB4) return('4'); if(!RB5) return('5'); if(!RB6) return('6'); if(!RB7) return('7'); RB1 = 1; RB2 = 0; nop; if(!RB4) return('8'); if(!RB5) return('9'); if(!RB6) return('A'); if(!RB7) return('B'); RB2 = 1; RB3 = 0; nop; if(!RB4) return('C'); if(!RB5) return('D'); if(!RB6) return('E'); if(!RB7) return('F'); return(0); // no valid key pressed }