#include "key.h" /** * Handles a generic key event and decides which function press to call */ void handle_keyevent(void (*handle_keypress)(char)) { char key; int i; key = check_key_press(); if (key == NO_KEY_PRESSED) { PORTB = ENABLE_KEYPAD_INTERRUPT; RBIF = OFF; //clear the interrupt return; } //debounce keypress for(i=0;i<WAIT_DEBOUNCE;i++) { continue; } //check to see if the key is still pressed if (key == check_key_press()) { (*handle_keypress) (key); } PORTB = ENABLE_KEYPAD_INTERRUPT; RBIF = OFF; //clear the interrupt return; } /** * Checks to see if a key is pressed and returns the key pressed or -1 if nothing is pressed */ char check_key_press() { KEYPAD = KEY01; //check key 1 if ((KEY01 ^ KEYPAD) == 0) { return KEY01; } KEYPAD = KEY02; //check key 2 if ((KEY02 ^ KEYPAD) == 0) { return KEY02; } KEYPAD = KEY03; //check key 3 if ((KEY03 ^ KEYPAD) == 0) { return KEY03; } KEYPAD = KEY04; //check key 4 if ((KEY04 ^ KEYPAD) == 0) { return KEY04; } KEYPAD = KEY05; //check key 5 if ((KEY05 ^ KEYPAD) == 0) { return KEY05; } KEYPAD = KEY06; //check key 6 if ((KEY06 ^ KEYPAD) == 0) { return KEY06; } KEYPAD = KEY07; //check key 7 if ((KEY07 ^ KEYPAD) == 0) { return KEY07; } KEYPAD = KEY08; //check key 8 if ((KEY08 ^ KEYPAD) == 0) { return KEY08; } KEYPAD = KEY09; //check key 9 if ((KEY09 ^ KEYPAD) == 0) { return KEY09; } KEYPAD = KEY10; //check key 10 if ((KEY10 ^ KEYPAD) == 0) { return KEY10; } KEYPAD = KEY11; //check key 11 if ((KEY11 ^ KEYPAD) == 0) { return KEY11; } /* KEYPAD = w = KEY12; //check key 12 if ((w ^ KEYPAD) == 0) { return KEY12; }*/ KEYPAD = KEY13; //check key 13 if ((KEY13 ^ KEYPAD) == 0) { return KEY13; } KEYPAD = KEY14; //check key 14 if ((KEY14 ^ KEYPAD) == 0) { return KEY14; } KEYPAD = KEY15; //check key 15 if ((KEY15 ^ KEYPAD) == 0) { return KEY15; } /* KEYPAD = w = KEY16; //check key 16 if ((w ^ KEYPAD) == 0) { return KEY16; }*/ return NO_KEY_PRESSED; }