PaulRB:
I need to monitor these while the Arduino is busy performing calculations, so I'm trying to use interrupts to detect when a button is pressed.
Ah, well then the answer is dead easy.
Don't use interrupts.
Write your code properly.
PaulRB:
For the moment I'm assuming only one button will be pressed at a time.
You need a diode in series with every key. Then you can - and should - read multiple buttons at once and most importantly, de-bounce them.
You need to poll the buttons each millisecond. Whatever calculations you need to perform can be broken up into pieces which will not take (appreciably) more than one millisecond each.
You should never use "delayMicroseconds(20000)" or any form of "delay()" in a real application (unless there is some need in setup()). You control timing by polling millis() for specific timeouts as you run through your main process loop() at least every millisecond.