Você está na página 1de 2

//Maria Eduarda Fiori - 3044432

//Atividade 3

#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;

default:
PORTD = 0b11110111;
}
}
}

Você também pode gostar