Программно - таймер антидребезговый ставлю.
Самый лучший вариант - запускаешь таймер после каждого изменения пина, когда таймер досчитает - проверяешь пин, изменился ли он на самом деле или просто был шум ( то есть было ли переключение, скажем, с 0 на 1 или просто пошумел и опять в 0 упал) - и уже после этого запоминаешь новое состояние кнопки. Период антидребезга подбираешь экспериментально, я обычно ставлю в диапазоне 50-100 мс