Você está na página 1de 9

Universidade Federal de Minas Gerais

Programa de Ps-Graduao em Engenharia Mecnica


Av. Antnio Carlos, 6627 - Pampulha - 31.270-901 - Belo Horizonte MG
Tel.: +55 31 3499-5145 - Fax.: +55 31 3443-3783
www.demec.ufmg.br - E-mail: cpgmec@demec.ufmg.br

SEGUNDO RELATRIO DA AULA PRATICA 2


Professor: Antnio Maia
Estudante: Tames Fernandes tamesfernandes@gmail.com

1. Montar o Circuito no Proteus.


Universidade Federal de Minas Gerais
Programa de Ps-Graduao em Engenharia Mecnica
Av. Antnio Carlos, 6627 - Pampulha - 31.270-901 - Belo Horizonte MG
Tel.: +55 31 3499-5145 - Fax.: +55 31 3443-3783
www.demec.ufmg.br - E-mail: cpgmec@demec.ufmg.br
2. Elaborar um programa em C para exibir a contagem de 0 at 9 no display de sete
segmentos mais a direita. Testar o programa no Proteus. Em seguida, gravar o programa
no MCU da placa didtica e avaliar os resultados.

/*Contagem de 0 at 9 no display */
#include <16F877A.h> // biblioteca PIC 16F877A
#include <stdlib.h> // biblioteca
#fuses HS,NOWDT,NOLVP,NOBROWNOUT,NODEBUG,NOPROTECT,PUT,NOPROTECT
#use delay(clock=4000000) // tempo do relgio
void main(void) // incio do programa
{
while (true) // incio do while para repetio da contagem 0 a 9
{
byte num[10]; // criar um vetor como 10 posies
int i; // criar a varivel i do tipo inteiro
num[0]=63; // carregar a posio 0 do vetor com 63(0 em decimal)
num[1]=6; // carregar a posio 1 do vetor com 6 (1 em decimal)
num[2]=91; // carregar a posio 2 do vetor com 91 (2 em decimal)
num[3]=79; // carregar a posio 3 do vetor com 79(3 em decimal)
num[4]=102; // carregar a posio 4 do vetor com 102 (4 em decimal)
num[5]=109; // carregar a posio 5 do vetor com 109(5 em decimal)
num[6]=125; // carregar a posio 6 do vetor com 125(6 em decimal)
num[7]=7; // carregar a posio 7 do vetor com 7 (7 em decimal)
num[8]=127; // carregar a posio 8 do vetor com 127 (8 em decimal)
num[9]=103; // carregar a posio 9 do vetor com 103 (9 em decimal)

output_high(PIN_B4);// ativar a porta B4 do pic ligar o transistor para visualizar

for (i=0;i<=9;i++) // incio da conta 0 at 9 por um for


{ // incio do for
output_D(num[i]); // carregar a parto D com os numeros do vetor num em decimal
delay_ms(1000); // aguardar 1000 milissegundo (1 segundo)
} // fim do for
output_low(PIN_B4); // desativar a porta B4 do pic desligar o transistor visualizador
} // fim do while
} // fim do programa
Universidade Federal de Minas Gerais
Programa de Ps-Graduao em Engenharia Mecnica
Av. Antnio Carlos, 6627 - Pampulha - 31.270-901 - Belo Horizonte MG
Tel.: +55 31 3499-5145 - Fax.: +55 31 3443-3783
www.demec.ufmg.br - E-mail: cpgmec@demec.ufmg.br
3. Elaborar um programa em C para exibir a contagem de 0 at 9999 no display de sete
segmentos. Os nmeros devero ser apresentados em intervalos de 400ms. Testar o
programa no Proteus. Gravar o programa no MCU da placa didtica e validar os
resultados.

/*Contagem de 0 at 9999 no display */


#include <16F877A.h> // biblioteca PIC 16F877A
#include <stdlib.h> // biblioteca
#fuses HS,NOWDT,NOLVP,NOBROWNOUT,NODEBUG,NOPROTECT,PUT,NOPROTECT
#use delay(clock=4000000) // tempo do relgio
int p4,p5,p6,p7,a,b,c,d; // criar a variveis inteiras usadas no programa
void main(void) // incio do programa
{
byte num[10]; // criar um vetor como 10 posies
int i; // criar a varivel i do tipo inteiro
num[0]=63; // carregar a posio 0 do vetor com 63(0 em decimal)
num[1]=6; // carregar a posio 1 do vetor com 6 (1 em decimal)
num[2]=91; // carregar a posio 2 do vetor com 91 (2 em decimal)
num[3]=79; // carregar a posio 3 do vetor com 79(3 em decimal)
num[4]=102; // carregar a posio 4 do vetor com 102 (4 em decimal)
num[5]=109; // carregar a posio 5 do vetor com 109(5 em decimal)
num[6]=125; // carregar a posio 6 do vetor com 125(6 em decimal)
num[7]=7; // carregar a posio 7 do vetor com 7 (7 em decimal)
num[8]=127; // carregar a posio 8 do vetor com 127 (8 em decimal)
num[9]=103; // carregar a posio 9 do vetor com 103 (9 em decimal)

a=0; // carregar a com zero numero DCBA


b=0; // carregar b com zero numero DCBA
c=0; // carregar c com zero numero DCBA
d=0; // carregar d com zero numero DCBA
p4=0; // carregar pino p4 com zero
p5=0; // carregar pino p5 com zero
p6=0; // carregar pino p6 com zero
p7=0; // carregar pino p7 com zero

while(true) // incio do while contagem


{
if (a<=9){ // condicional o primeiro visualizador A
p4=num[a]; // carregar a varivel a com o nmero para visualizar P4
} // fim do condicional
else { // else do primeiro condicional if, para a>9
a=0; // carregar a com zero
p4=num[a]; // carregar a varivel a com o nmero para visualizar P4
b=b+1; // aumentar b em uma unidade
p5=num[b]; // carregar a varivel b com o nmero para visualizar P5
} // fim do primeiro else

/*___________________________________________________________________________*/
if (b==10){ // condicional para o segundo visualizador B
b=0; // carregar b com 0
p5=num[b]; // carregar a varivel b com o nmero para visualizar P5
c=c+1; // aumentar o em uma unidade
p6=num[c]; // carregar a varivel c com o nmero para visualizar P6
} // fim do if do segundo visualizador
Universidade Federal de Minas Gerais
Programa de Ps-Graduao em Engenharia Mecnica
Av. Antnio Carlos, 6627 - Pampulha - 31.270-901 - Belo Horizonte MG
Tel.: +55 31 3499-5145 - Fax.: +55 31 3443-3783
www.demec.ufmg.br - E-mail: cpgmec@demec.ufmg.br
/*___________________________________________________________________________*/
if (c==10){ // condicional para o terceiro visualizador C
c=0; // carregar c com 0
p6=num[c]; // carregar a varivel c com o nmero para visualizar P6
d=d+1; // aumentar d em uma unidade
p7=num[d]; // carregar a varivel d com o nmero para visualizar P7
} // fim do if do terceiro visualizador

/*___________________________________________________________________________*/
if (d==10){ // condicional para o quarto visualizador D
d=0; // carregar d com 0
p7=num[d];
a=0;// carregar h com o nmero para visualizar
} // fim do if do quarto visualizador

/*___________________________________________________________________________*/
output_high(PIN_B7); // ativar a porta B7 do pic ligar o quarto visualizador
output_D(p7); //carregar a porta D com o valor de p7
delay_ms(20); // aguardar em milissegundo
output_low(PIN_B7); // desativar a porta B7 do pic desligar o terceiro visualizador
/*___________________________________________________________________________*/
output_high(PIN_B6); // ativar a porta B6 do pic ligar o terceiro visualizador
output_D(p6); //carregar a porta D com o valor de p6
delay_ms(20); // aguardar em milissegundo
output_low(PIN_B6); // desativar a porta B6 do pic desligar o terceiro visualizador
/*___________________________________________________________________________*/

output_high(PIN_B5); // ativar a porta B5 do pic ligar o segundo visualizador


output_D(p5); //carregar a porta D com o valor de p5
delay_ms(20); // aguardar em milissegundo
output_low(PIN_B5); // desativar a porta B5 do pic desligar o segundo visualizador
/*___________________________________________________________________________*/

output_high(PIN_B4); // ativar a porta B4 do pic ligar o primeiro visualizador


output_D(p4); //carregar a porta D com o valor de p4
delay_ms(20); // aguardar em milissegundo
output_low(PIN_B4); // desativar a porta B4 do pic desligar o primeiro visualizador
/*___________________________________________________________________________*/

delay_ms(400);// aguardar em milissegundo para o prximo numero

a=a+1; // aumentar a em uma unidade


} // fim do while
} // fim do programa
Universidade Federal de Minas Gerais
Programa de Ps-Graduao em Engenharia Mecnica
Av. Antnio Carlos, 6627 - Pampulha - 31.270-901 - Belo Horizonte MG
Tel.: +55 31 3499-5145 - Fax.: +55 31 3443-3783
www.demec.ufmg.br - E-mail: cpgmec@demec.ufmg.br

4. Elaborar um programa em C para exibir a contagem de 0 ate 20 no display de sete


segmentos. Fazer com que o LED instalado em RB0 pisque o nmero de vezes
apresentado pelo display, com intervalos de 160ms. Somente despois que o LED parar
de piscar que um novo numero poder ser exibido no display. Testar o programa no
Proteus. Gravar o programa no MCU da placa didtica e validar os resultados.

#include <16F877A.h> // agregar bibliotecas


#include <stdlib.h> // agregar bibliotecas
#fuses HS,NOWDT,NOLVP,NOBROWNOUT,NODEBUG,NOPROTECT,PUT,NOPROTECT
#use delay(clock=4000000) // tempo do relgio
int p4,p5,a,b, cont; // criar a variveis inteiras usadas no programa
void main(void) // incio do programa
{
byte num[10]; // criar um vetor como 10 posies
int i; // criar a varivel i do tipo inteiro
num[0]=63; // carregar a posio 0 do vetor com 63(0 em decimal)
num[1]=6; // carregar a posio 1 do vetor com 6 (1 em decimal)
num[2]=91; // carregar a posio 2 do vetor com 91 (2 em decimal)
num[3]=79; // carregar a posio 3 do vetor com 79(3 em decimal)
num[4]=102; // carregar a posio 4 do vetor com 102 (4 em decimal)
num[5]=109; // carregar a posio 5 do vetor com 109(5 em decimal)
num[6]=125; // carregar a posio 6 do vetor com 125(6 em decimal)
num[7]=7; // carregar a posio 7 do vetor com 7 (7 em decimal)
num[8]=127; // carregar a posio 8 do vetor com 127 (8 em decimal)
num[9]=103; // carregar a posio 9 do vetor com 103 (9 em decimal)

a=0; // carregar a com zero numero BA


b=0; // carregar b com zero numero BA
p4=0; // carregar pino p4 com zero
p5=0; // carregar pino p5 com zero
cont=0; // carregar contador com zero

while(true) // incio do while


{
if (a<=9){ // condicional pra aumentar imprimir o nmero no primeiro visualizador
p4=num[a]; // carregar a varivel y com o nmero para visualizar
p5=num[b]; // carregar p5 com o nmero para visualizar
} // fim do condicional
else { // else do primeiro condicional se a>9
a=0; // carregar a com zero
p4=num[a]; // carregar p4 como o nmero para visualizar
b=b+1; // aumentar b em uma unidade
} // fim do primeiro else
p5=num[b]; // carregar p5 com o nmero para visualizar
/*___________________________________________________________________________*/
if (b==10){ // condicional para o segundo visualizador
b=0; // carregar b com 0
} // fim do if do segundo visualizador
/*___________________________________________________________________________*/

if (cont==21){ // condicional para finalizar todo o programa


Universidade Federal de Minas Gerais
Programa de Ps-Graduao em Engenharia Mecnica
Av. Antnio Carlos, 6627 - Pampulha - 31.270-901 - Belo Horizonte MG
Tel.: +55 31 3499-5145 - Fax.: +55 31 3443-3783
www.demec.ufmg.br - E-mail: cpgmec@demec.ufmg.br
break; // parar o programa
} // fim do condicional
/*___________________________________________________________________________*/
for(i=0;i<cont;i++) // for para piscar o LED
{
output_high(PIN_B0); // ativar a porta B0 do pic ligar o LED
delay_ms(80); // aguardar 80 milissegundo
output_low(PIN_B0); // desativar a porta B0 do pic desligar o LED
delay_ms(80); // aguardar 80 milissegundo
} // fim do for para piscar o LED
/*___________________________________________________________________________*/

cont=cont+1; // aumentar cont em uma unidade

/*___________________________________________________________________________*/

output_high(PIN_B5); // ativar a porta B5 do pic ligar o segundo visualizador


output_D(p5); //carregar a porta D com o valor de p5
delay_ms(60); // aguardar em milissegundo
output_low(PIN_B5); // desativar a porta B5 do pic desligar o segundo visualizador
/*___________________________________________________________________________*/

output_high(PIN_B4); // ativar a porta B4 do pic ligar o primeiro visualizador


output_D(p4); //carregar a porta D com o valor de p4
delay_ms(600); // aguardar em milissegundo
output_low(PIN_B4); // desativar a porta B4 do pic desligar o primeiro visualizador

/*___________________________________________________________________________*/
a=a+1; // aumentar a em uma unidade
} // fim do while
} // fim do programa
Universidade Federal de Minas Gerais
Programa de Ps-Graduao em Engenharia Mecnica
Av. Antnio Carlos, 6627 - Pampulha - 31.270-901 - Belo Horizonte MG
Tel.: +55 31 3499-5145 - Fax.: +55 31 3443-3783
www.demec.ufmg.br - E-mail: cpgmec@demec.ufmg.br
5. Elaborar um programa em C para gerar um nmero aleatrio (int16 com cinco dgitos).
Desprezar o quinto dgito e exibir o nmero no display de sete segmentos. Acender o LED
instalado em RB0 se o nmero for mpar. Acender o LED instalado em RB0 e em RB1 se o
nmero for par. Utilizar as funes PAR e IMPAR para acender dois ou um leds,
respectivamente. Testar o programa no PROTEUS. Em seguida, gravar o programa na MCU da
placa didtica e avaliar os resultados.

#include <16F877A.h> // Adiciona biblioteca


#include <stdlib.h> // Adiciona biblioteca
#fuses HS,NOWDT,NOLVP,NOBROWNOUT,NODEBUG,NOPROTECT,PUT,NOPROTECT
#use delay(clock=4000000) // Definio do clock do controlador
#use fast_io(D) // Ignorar o registrador de direo

void PAR(void); // Prottipo da funo PAR


void IMPAR(void); // Prottipo da funo IMPAR

void main(void)
{
set_tris_d(0b00000000); // Define pinos da Porta D como de sada

/* Declarao de variveis */
int16 aleatorio, divisor, aux;
int i,cont, alg_1, alg_2, alg_3, alg_4, alg_5, dig[6];
byte num[10];

num[0]=63; // Define o algarismo zero


num[1]=6; // Define o algarismo um
num[2]=91; // Define o algarismo dois
num[3]=79; // Define o algarismo trs
num[4]=102; // Define o algarismo quatro
num[5]=109; // Define o algarismo cinco
num[6]=125; // Define o algarismo seis
num[7]=7; // Define o algarismo sete
num[8]=127; // Define o algarismo oito
num[9]=103; // Define o algarismo nove

cont=0;//contador criado para que a funo gere o nmero de vezes do contador

while (cont<20){//a funo ir gerar CONT=20 numeros aleatrios

aleatorio=rand(); // Assinala um valor qualquer "aleatrio"


aux=aleatorio; // Guarda o nmero na memria
divisor=10; // Define o divisor da diviso inteira
/*___________________________________________________________________________*/
for(i=0;i<5;i++) // Loop para leitura dos 5 dgitos do nmero int16 gerado na funao rand
{
dig[i]=aux%10; //resto da diviso a ultima casa decimal
aux = aux/divisor;
Universidade Federal de Minas Gerais
Programa de Ps-Graduao em Engenharia Mecnica
Av. Antnio Carlos, 6627 - Pampulha - 31.270-901 - Belo Horizonte MG
Tel.: +55 31 3499-5145 - Fax.: +55 31 3443-3783
www.demec.ufmg.br - E-mail: cpgmec@demec.ufmg.br
}
/*___________________________________________________________________________*/

alg_1=dig[4]; // Armazena o primeiro dgito do nmero


alg_2=dig[3]; // Armazena o segundo dgito do nmero
alg_3=dig[2]; // Armazena o terceiro dgito do nmero
alg_4=dig[1]; // Armazena o quarto dgito do nmero
alg_5=dig[0]; // Armazena o quinto dgito do nmero
/*___________________________________________________________________________*/

/* O quinto dgito (alg_5) ser desprezado conforme enunciado */

/* Loop para imprimir o nmero no display */

output_high(PIN_B7); // ativar a porta B7 do pic ligar o visualizador


output_D(num[alg_1]); //carregar a porta D com o valor o algarismo
delay_ms(50); // aguardar em milissegundo
output_low(PIN_B7); // desativar a porta B7 do pic desligar

output_high(PIN_B6); // ativar a porta B6 do pic ligar o visualizador


output_D(num[alg_2]); //carregar a porta D com o valor o algarismo
delay_ms(50); // aguardar em milissegundo
output_low(PIN_B6); // desativar a porta B6 do pic desligar

output_high(PIN_B5); // ativar a porta B5 do pic ligar o visualizador


output_D(num[alg_3]); //carregar a porta D com o valor o algarismo
delay_ms(50); // aguardar em milissegundo
output_low(PIN_B5); // desativar a porta B5 do pic desligar

output_high(PIN_B4); // ativar a porta B4 do pic ligar o visualizador


output_D(num[alg_4]); //carregar a porta D com o valor o algarismo
delay_ms(90); // aguardar em milissegundo
output_low(PIN_B4); // desativar a porta B4 do pic desligar

delay_ms(600); // aguardar em milissegundo

/*___________________________________________________________________________*/
/* O quinto dgito (alg_5) desprezado conforme enunciado */
/* Aps exibir o numero no display os leds piscaram indicando se PAR ou IMPAR o numero */

if(alg_4%2==0) // Determina se o nmero PAR divisvel por 2 com resto zero


{
PAR();//chama a funcao criada para PAR (2 leds piscam juntos)
}

else // Determina se o nmero no par, ento ele IMPAR


{
IMPAR();//chama a funcao criada para IMPAR (s 1 Led pisca)
}
Universidade Federal de Minas Gerais
Programa de Ps-Graduao em Engenharia Mecnica
Av. Antnio Carlos, 6627 - Pampulha - 31.270-901 - Belo Horizonte MG
Tel.: +55 31 3499-5145 - Fax.: +55 31 3443-3783
www.demec.ufmg.br - E-mail: cpgmec@demec.ufmg.br

/*___________________________________________________________________________*/
cont=cont+1;//contador para o while
}//fim while
}//fim da funcao void principal
/*___________________________________________________________________________*/
/* FUNO PAR */
void PAR(void)
{
output_high(PIN_B0);//acende led B0
output_high(PIN_B1);//acende led B1 junto com B0
delay_ms(1000); // aguardar 1 segundo antes de apagar o Led para o proximo numero
output_low(PIN_B0); //apaga led B0
output_low(PIN_B1); //apaga led B1
}

/*___________________________________________________________________________*/

/* FUNO MPAR */
void IMPAR(void)
{
output_high(PIN_B0);//acende led B0
delay_ms(1000); // aguardar 1 segundo antes de apagar o Led para o proximo numero
output_low(PIN_B0);//apaga led B0
}