@Crusty @Steve: As it is an Atmel chip are you using Pin Change interrupts?
Thinking about it, there are de-bounce functions in the Arduino library. Steve, do you have the Arduino Cookbook or the Arduino Workshop? (Both are recommended, but if you only get one, make it the Workshop). They cover this sort of thing.
It sounds like you are going through quite a steep learning curve.
But the project and what you are producing look worth the effort.
Rotary encoders can be a pig to debounce, I usually do this in software, its almost a trade against filtering the input and missing clicks on the swich position, which can be annoying, especially with counting up and down.
I have not tried it yet but, I think a timer reset after each interrupt from each bounce and read the state of input pins when the timer is able to time out. This should take out the problem of switches getting worse on bounce as they get older.
As it is an Atmel chip are you using Pin Change interrupts?
Max can give you my contact info in England, if you want to discuss Atmel chips and software offline.
At the outset this eeems like a simple thing to do, but take care. Changes in approach often may mean rewriting your driver from scratch. After working with a customer who chagend their mind frequently I created an approach to allow a systematic method to create hierarchical menus and how to display dynamic data within that.
I wrote it up in a Circuit Cellar article "hierarchical menus in embedded systems" published in issue #160, November 2003. Circuit Cellar's business model requires you to pay a small amount, and for articles of that age you have to download the whole magazine. Let just say that the code was written for the Rabbit micro, but is all in C and should be easily portable.