If you choose to go the route of continually polling state and refreshing the display, I've explained several times in the past (with the occasional code example) how to do similar things, using a second thread that wakes the application through its event queue. Here's something to look at:
http://common-lisp.net/pipermail/mcclim-devel/2008-December/006985.html
For your application, you might modify the handle-event method, or the lambda stored in the interrupt-event.