#define F_CPU 16000000 //Define a frequência do oscilador para conf. o delay
#include <avr/io.h> //Biblioteca com os registradores do AVR #include <util/delay.h> //Biblioteca com as função de atraso int main() { char flag = 0; int contador = 0; DDRB = 0b00000010; //Define o pino 1 do PORTB como saída PORTB = 0b00000010; //Ativa o transistor do display 1 DDRC = 0b00000000; //Define todos os pinos do PORTC como entradas PORTC = 0xFF; //Ativa o resistor de pull-up DDRD = 0b11111111; //Define os pinos do PORTD como saídas PORTD = 0x00; //Inicia todos desligados while (1) { if (!(PINC & (1 << 3))) { //Testa se o bit 3 do PORTC é "0" _delay_ms(10); //Cria um atraso para minimizar o bounce flag = 1; } //Testa se o bit 3 do PORTC é "1" e se o flag também é "1" else if ((PINC & (1 << 3)) && flag == 1) { contador++; if (contador == 10) contador = 0; flag = 0; } switch (contador) { //Aciona os segmentos do display case 0: PORTD = 0B11100111; //zero _delay_ms(500); //Aguarda 500ms break; case 1: PORTD = 0B10000100; //um _delay_ms(500); //Aguarda 500ms break; case 2: PORTD = 0B11010011;// dois _delay_ms(500); //Aguarda 500ms break; case 3: PORTD = 0B11010110;//tres _delay_ms(500); //Aguarda 500ms break; case 4: PORTD = 0B10110100; //quatro _delay_ms(500); //Aguarda 500ms break; case 5: PORTD = 0B01110110;// cinco _delay_ms(500); //Aguarda 500ms break; case 6: PORTD = 0B01110111;// seis _delay_ms(500); //Aguarda 500ms break; case 7: PORTD = 0B11000100; //sete _delay_ms(500); //Aguarda 500ms break; case 8: PORTD = 0B11110111;// oito _delay_ms(500); //Aguarda 500ms break; case 9: PORTD = 0B11110110;// nove _delay_ms(500); //Aguarda 500ms break;