По таймеру некая переменная P увеличивается если на входе 1 и уменьшается если 0. Зона изменения P от 0 до некотрого N чтобы заведомо перекрыть дребезг. Первоначально ставим P на середину зоны. И флаг F который изображает состояние кнопки. Если P=0 а F=1 то это спад, если P=1 а F=0 то фронт. Сам флаг - состояние нажато/отпущено.