improuve keypad irq function