Arduino LCD Menu
Code: https://gist.github.com/3783602
About the hardware debouncing:
I'm using 10uF electrolytic caps and 10k resistors (for a 0.1s decay time) as well as an Inverting Schmitt trigger to "smooth out" the decay curve. (Actually converts it from a smooth curve into a square wave which is a much better input signal for the arduino digital pins. It also inverts the signal so you'll have to account for that in your code or your hw setup.)
Here is a schematic for using this kind of HW debounce with an arduino interrupt pin: http://share.thezanino.com/ek7u (The cap in this is 10uF and the 40106N is the Inverting Schmitt trigger)
I got the Schmitt triggers here (this IC has 6 triggers): http://www.newark.com/stmicroelectron...