I'm pretty sure most (if not all) debouncing libraries use edge detection.
If you only need to use one kind of edge (either rising or falling), you can use this:
Pieter