#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
/* Contador binário de 3 bits. 2 elevado a 3 = 8
Valor 13 12 11
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 1 1 1
*/
int main(void) {
// setup()
DDRB |= (1 << DDB5); // 13 PB5 OUTPUT
DDRB |= (1 << DDB4); // 12 PB4 OUTPUT
DDRB |= (1 << DDB3); // 11 PB3 OUTPUT
DDRD &= ~(1 << DDD2); // 2 PD2 INPUT
DDRD &= ~(1 << DDD3); // 3 PD3 INPUT
char valor; // Estado atual do botão incremento
char estado = 0; // Valor a ser exibido em binário
char anterior = 0; // Estado anterior do botão incremento
char valord; // Estado atual do botão decremento
char anteriord = 0;// Estado anterior do botão decremento
// loop()
while (1) {
valor = (PIND & (1 << PIND2)) == (1 << PIND2);
if (valor == 1 && anterior == 0) {
estado++; // estado = estado + 1;
if (estado == 8)
estado = 0;
}
valord = (PIND & (1 << PIND3)) == (1 << PIND3);
if (valord == 1 && anteriord == 0) {
estado--; // estado = estado - 1;
if (estado < 0)
estado = 7;
}
PORTB &= 0b000111; // Desligar os LEDs (13, 12 e 11)
PORTB |= (estado << PORTB3);
anterior = valor;
anteriord = valord;
_delay_ms(50);
}
}