Код
DDRB = 0x00; // B-порт output
DDRD = 0x00; // D-порт input
С таким кодом далеко пойдёте.....
Вас там в где учитесь думать учат?
Не замечаете противоречия в коде?
Для любой atmega DDRx - регистр направления, бит установленный в 1 обозначает выход, бит установленный в 0 - обозначает вход.
PORTx для выходов позволяет установить состояние выхода, для входов - управляет подтяжкой (0 - нет подтяжки к VCC, 1 - есть подтяжка входа к VCC).
Про такие понятия как антидребезг или таймер-счётчик думаю пока что рано вам рассказывать....
Для начала определитесь что у вас вход а что выход (где кнопочки а где светодиоды).