Buscar

relatório de questões de PIC.

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Instituto Federal de Educação Ciência e Tecnologia Campus Palmeira dos Índios
Sistemas Elétricos
Microcontroladores
Relatório de Estudo Pratico 
Display de Sete Segmentos e Push Buttons 
Alunos: Edgar Azevedo dos Santos
João Paulo Ferreira dos Santos
Professor: Dr. Leonaldo José Lyra do Nascimento
	
Palmeira dos índios 
02 de Setembro de 2017
Instituto Federal de Educação Ciência e Tecnologia Campus Palmeira dos Índios
Sistemas Elétricos
Microcontroladores
Relatório de Estudo Pratico 
Display de Sete Segmentos e Push Buttons
Relatório de Estudo pratico utilizando Kit educacional XM118 e Software MPLAB. Reprodução de alguns projetos utilizando a plataforma do Kit. Estudo realizado sob orientação do Dr. Leonaldo para Auxiliar na aprendizagem direcionada a disciplina de Microcontroladores.
Palmeira dos índios 
02 de Setembro de 2017
SUMARIO
CONTRACAPA ----------------------------------------------------------------- 1
SUMARIO ------------------------------------------------------------------------ 2
OBJETIVOS ---------------------------------------------------------------------- 3
MATERIAS UTILIZADOS ---------------------------------------------------- 4
INTRODUÇÃO TEORICA ----------------------------------------------------- 5
PROCEDIMENTO EXPERIMENTAL--------------------------------------- 7
CONCLUSÕES ------------------------------------------------------------------ 32
REFERÊNCIAS BIBLIOGRÁFICAS ---------------------------------------- 33
OBJETIVO
O estudo Prático teve como objetivos técnicos, aproximar a teoria a pratica, utilizando o Kit Educacional XM118 que é dotado de um microcontrolador PIC18f4550 e o software MPLAB IDE para desenvolvimento Teórico.
No Kit o objetivo é identificar e conhecer as partes que o compõem, identificar os pinos do microcontrolador PIC 18f4550 assim como conhecer e utilizar alguns comandos do mesmo utilizando suas portas de comunicação. 
Utilizando exemplos de projetos repassados pelo Professor o objetivo foi desenvolver a programação utilizando linguagem C e de forma pratica utilizando o kit educacional e seus componentes reproduzir o que o problema pede. 
MATERIAIS UTILIZADOS
No dia 30 de Agosto, em horário aula da disciplina de Microcontroladores no laboratório de automação industrial foi iniciado o procedimento pratico, que teve como principais equipamentos:
Kit Educacional XM118 com Chip PIC18f4550.
Software de desenvolvimento MPLAB IDE.
Cabo de alimentação três pinos (2P+T).
Cabo de comunicação USB.
Computador Pessoal
INTRODUÇÃO TEORICA 
O conteúdo abordado na pratica realizada esta relacionado ao estudo das ferramentas e softwares utilizados para o desenvolvimento, criação e depuração de projetos destacando a importância dos mesmos para o ambiente dos microcontroladores. Ter boas ferramentas de desenvolvimento e tão importante quanto ter um bom microcontrolador para o sucesso de um projeto. 
De inicio alguns comandos são essências a configuração do Chip PIC 18f4550 dentre eles podemos destacar os seguintes:
//Incluindo Bibliotecas
#include<P18F4550.h>
#include<delays.h>
# include....
//Configurando Chip
#pragma config PLLDIV = 5 // PLL para 20MHz
#pragma config CPUDIV = OSC1_PLL2 // PLL desligado
#pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns
#pragma config WDT = OFF // Watchdog desativado
#pragma config LVP = OFF // Sem gravação em baixa tensão
#pragma config DEBUG = ON // Habilita debug
Vale ressaltar que a configuração e a inserção de bibliotecas varia de acordo o Projeto, mais essa configuração sempre será necessária. 
Dentre os comando básicos utilizados em um projeto que utiliza o PIC18f4550 podemos destacar os seguintes:
#include<P18F4550.h>
#include<delays.h>
Define BOTAO PORTDbits.RD0
TRISB = 0b00001111 ; TRISB = 0x0F
DDRB = 0b00001111 ; DDRB = 0x0F
TRISBbits.TRISB0 = 1
DDRBbits.RB0 = 1
PORTAA = 0x0A
LATA = 0x0A
PORTCbits.RC0 = 0
LATCbits.LATC0 = 0
Delay10KTCYx(50)
Estes são alguns comandos básicos de suma importância em um projeto. 
Nesta Pratica à necessidade de sabemos o esquema de ligação das chaves Push-Buttons que se encontram no Kit XM118, para então sabermos associa-las as respectivas entradas do PIC18F4550. A tabela Abaixo mostra as chaves, seus nomes e o pino a qual estão ligadas ao microcontrolador.
	Chave
	Nome
	Pinos
	SW1
	RESET
	MCLR/VPP/RE3
	SW4
	INT0
	RB0/INT
	SW5
	INT1
	RB1
	SW6
	INT2
	RB2
	SW2
	TMR1
	RC0
	SW3
	CH0
	RC1
PROCEDIMENTO EXPERIMENTAL
Display de sete segmentos e Push Buttons
1° Passo – Acionamento de 7 LED´s em sequência
Neste primeiro passo foi dado inicio desenvolvendo a linguagem de programação que de acordo o problema deve, acionar 7 LED´s em sequencia, um por um. De inicio este acionamento deve ser realizado da esquerda para a direita. Quando todos tiverem acessos eles devem fazer o reverso, ou seja, apagarem da direita para a esquerda uma a um. Este funcionamento ira se repetir ate que um botão seja pressionado o que, isto pausará a operação e caso outro botão seja pressionado a operação continua.
Em mente dessas condições, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
//Acionar 7 LED´s
#include<P18F4550.h>
#include<delays.h>
#include<stdlib.h> 
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
int i,b = 0;
int const numero[] = {
			0b00000000, //0 led acessos
			0b01000000,//1 led acesso
			0b01100000,//2 led’s acessos
			0b01110000,//3 led’s acessos
			0b01111000,//4 led’s acessos
			0b01111100, //5 led’s acessos
			0b01111110, //6 led’s acessos
			0b01111111, //7 led’s acessos
			0b01111110, //6 led’s acessos
			0b01111100, //5 led’s acessos
			0b01111000, //4 led’s acessos
			0b01110000, //3 led’s acessos
			0b01100000, //2 led’s acessos
			0b01000000, //1 led’s acessos
		};			
void main (void){
	TRISD = 0b00000000;
	TRISBbits.TRISB0 = 1; // define botão 1 entrada
	TRISBbits.TRISB1 = 1; // define botão 2 entrada
	PORTBbits.RB0 = 1; // define nível 1 no botão
	PORTBbits.RB1 = 1; // define nível 1 no botão
	while(1){
			for (i=0;i<14;i++ ){ //Repetição teremos 14 condições
		 PORTD = numero[i];
 if (PORTBbits.RB0 == 0){
	b=1;
}
	Delay10KTCYx(0);
	if (PORTBbits.RB0 == 0){
	b=1;
}
	while (b == 1){
	if(PORTBbits.RB1==0){
	b=2;
	}
	
Delay10KTCYx(0);
}		
}
}
}
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118,em especial a parte dos LED’s. Utilizando do conhecimento adquirido em praticas anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens 1.1, 1.2, 1.3 e 1.4.
Imagem 1.1
Imagem 1.2
Imagem 1.3
Imagem 1.4
A imagem 1.1 representa o inicio da sequencia da esquerda a direita neste momento dois LED’s estão acessos, vale ressaltar que serão utilizados os LED’s enumerados de 0 a 6. A imagem 1.2 mostra a sequencia em nível avançado com cinco LED’s acessos. A imagem 1.3 mostra o momento em que todos LED’s estão acessos. Já a imagem 1.4 mostra os LED’s apagando da direita para esquerda. Esta sequenciaé repetida ate que o botão de pausa seja pressionado e reiniciada de onde parou após apertar o botão play. 
Para fazer o controle foram utilizados push-buttons localizados no próprio Kit a imagem 1.5 os mostram.
Botão RB1, INT 1 - Play
Botão RB0, INT 0 - Pausa
Imagem 1.5
2° Passo – Acionamento de 8 LED’s
Esta segunda prática foi desenvolvida a linguagem de programação que de acordo a necessidade do problema, deve acionar 8 LED´s sendo da seguinte maneira: Um botão deve acionar quatro LED’s quando estiverem acessos se pressionado um segundo botão deve acender mais quatro LED’s ficando desta forma 8 LED’s acessos, caso um terceiro botão seja acionado deve acender quatro LED’s por vez de forma alternada. Em mente dessas condições, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
//acionando 8 LED’s
#include<P18F4550.h>
#include<delays.h>
#include<stdlib.h> 
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
int const numero[] = {
			0b11110000, // 4 Led’s acessos
			0b00000000,// 8 Led’s acessos
			0b10101010,// 4 Led’s acessos de forma alternada
		};			
void main (void){
	TRISD = 0b00000000;
	TRISBbits.TRISB0 = 1;
	TRISBbits.TRISB1 = 1;
	PORTBbits.RB0 = 1; //define nível 1 no botão 
	PORTBbits.RB1 = 1; //define nível 1 no botão 
	PORTBbits.RB2 = 1; //define nível 1 no botão 
	while(1){				
		if (PORTBbits.RB0 == 0){
			PORTD = numero[0]; // caso botão 1 pressionado liga 4 Led’s
}
		if (PORTBbits.RB1 == 0){
			PORTD = numero[1]; // caso botão 2 pressionado liga 8 Led’s
}
		if (PORTBbits.RB2 == 0){
			PORTD = numero[2]; // caso botão 3 pressionado liga 4 Led’s alternadamente
}
}
}
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118, em especial a parte dos LED’s. Utilizando do conhecimento adquirido em praticas anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens 1.6, 1.7 e 1.8.
Imagem 1.6
Imagem 1.7
Imagem 1.7
Imagem 1.8
A imagem 1.6 representa o inicio da sequencia neste momento quatro LED’s estão acessos, vale ressaltar que serão utilizados os LED’s enumerados de 0 a 7. A imagem 1.7 mostra a sequencia em nível avançado com todos LED’s acessos. A imagem 1.8 mostra o momento em que quatro LED’s estão acessos de forma alternada. Esta sequencia é repetida e controlada por três botões o primeiro botão aciona quatro LED’s, o segundo botão aciona mais quatro LED’s e por fim um terceiro botão aciona quatro LED’s de forma alternada. 
Para fazer o controle foram utilizados push-buttons localizados no próprio Kit a imagem 1.9 os mostram.
Botão RB0, INT 0 – 4 LED’s
Botão RB1, INT 1 – 8 LED’s
Botão RB2, INT 2 – 4 LED’s Alternados
Imagem 1.9
3° Passo – Contador de 0 a F
Foi desenvolvida a linguagem de programação para atender as necessidades do problema repassado onde deve ser construído um contador de 0 a F (hexadecimal). 
Para realizar essa etapa é de suma importância ter conhecimento dos princípios de números hexadecimais e conhecer o funcionamento do display de 7 segmentos assim como a identificação de seus segmentos. A imagem 2.0 abaixo mostra a tabela verdade correspondente aos dígitos do display de 0 a 9 e a imagem 2.1 representa o esquema de segmentos de um display de 7 segmentos, já a imagem 2.2 mostra a relação entre Decimal, Hexadecimal e Binário. Estes dados são importantes para a compreensão dos próximos passos das praticas
Imagem 2.1
Imagem 2.0
 
Imagem 2.0
Imagem 2.2
Em mente do funcionamento do programa, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
#include<P18F4550.h>
#include<delays.h>
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
#define I00 PORTDbits.RD0
int tempo = 0;
void main (){
 
 TRISD=0b00000000; //Configura os pinos DO PORTD como saída
 PORTD=0b00000000; //Coloca o PORTD inicialmente em zero 
 while(1) {
		 
 PORTD=(0b00111111); // Display mostra numero 0
 Delay10KTCYx(tempo);
 PORTD=(0b00000110); // Display mostra numero 1
 Delay10KTCYx(tempo);
 PORTD=(0b01011011); // Display mostra numero 2
 Delay10KTCYx(tempo);
 PORTD=(0b01001111); // Display mostra numero 3
 Delay10KTCYx(tempo);
 PORTD=(0b01100110); // Display mostra numero 4
 Delay10KTCYx(tempo);
 PORTD=(0b01101101); // Display mostra numero 5
 Delay10KTCYx(tempo);
 PORTD=(0b01111101); // Display mostra numero 6
 Delay10KTCYx(tempo);
 
 PORTD=(0b00000111); // Display mostra numero 7 
 Delay10KTCYx(tempo);
 PORTD=(0b01111111); // Display mostra numero 8
 Delay10KTCYx(tempo);
 
 PORTD=(0b01100111); // Display mostra numero 9
 Delay10KTCYx(tempo);
 
 PORTD=(0b01110111); // Display mostra numero A
 Delay10KTCYx(tempo);
 
 PORTD=(0b01111100); // Display mostra numero B
 Delay10KTCYx(tempo);
 
 PORTD=(0b00111001); // Display mostra numero C
 Delay10KTCYx(tempo);
 
 PORTD=(0b01011110); // Display mostra numero D
 Delay10KTCYx(tempo);
 
 PORTD=(0b01111001); // Display mostra numero E
 Delay10KTCYx(tempo);
 
 PORTD=(0b01110001); // Display mostra numero F
 Delay10KTCYx(tempo);
 
 }
 }
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118, em especial a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos, ativamos então a chave de um display para visualizar a contagem. Utilizando do conhecimento adquirido em praticas anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens 2.3, 2.4, 2.5 e 2.6.
Imagem 2.4
Imagem 2.3
Imagem 2.6
Imagem 2.5
A imagem 2.3 representa o inicio da sequencia neste momento o display aciona os segmentos que correspondem ao numero 0. A imagem 2.4 mostra a sequencia no momento em que o numero 9 e representado pelos segmentos do display. A imagem 2.5 mostra o momento em que o display ativa seus segmentos correspondentes a letra A, ou seja o numero 10. A imagem 2.6 mostra o momento em que o display ativa seus segmentos correspondentes a letra F, ou seja, o numero 15. Esta sequencia é repetida ate que o funcionamento do Kit seja interrompido.
4° Passo – Contador de 0 a 99 controlado
Utilizando do conhecimento absorvido na pratica anterior sobre display de 7 segmentos e sua multiplexação foi desenvolvida a linguagem de programação para atender as necessidades do problema seguinte, onde deve ser construído um contador de 0 a 99. Os dígitos devem serem apresentados em dois displays de 7 segmentos e a contagem deve ser controlada por dois botões onde um incrementa um valor e outro botão decrementa.
Para realizar essa etapa é de suma importância ter conhecimentode quais portas do Chip PIC18f4550 são responsáveis por fazer o acionamento dos displays de 7 segmentos, abaixo uma breve relação de quais pinos são responsáveis pela multiplexação.
Display de 7 segmentos – PIC18F4550
1° Display (U8) = Pino – RE2
2° Display (U7) = Pino – RE0
3° Display (U6) = Pino – RA2
4° Display (U5) = Pino – RA5
Estes dados são importantes para o correto funcionamento dos próximos passos das praticas.
Em mente da necessidade do funcionamento do programa, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
// contador de 0 a 99 controlado
#include<P18F4550.h>
#include<delays.h>
#include<stdlib.h> 
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
int i = 0,a,b,tempo=75, tempo1=6.5;
int const numero[] = { //números a serem mostrados
			0x3F,
			0x06,
			0x5B,
			0x4F,
			0x66,
			0x6D,
			0x7D,
			0x07,
			0x7F,
			0x6F,};			
void main (void){
	TRISE = 0x00; //ativando porta E como saída(displays 1 e 2)
	TRISD = 0x00; // ativando porta D como saída(Led’s para multiplexação)
	TRISA = 0x00; // ativando porta A como saída(displays 3 e 4)
	TRISBbits.RB0 = 1; // define botão como entrada
	TRISBbits.RB1 = 1; // define botão como entrada
	PORTBbits.RB0 = 1; // define nível 1 no botão
	PORTBbits.RB1 = 1; // define nível 1 no botão
	while(1){
	
		if(	PORTBbits.RB0 == 0){ // botão pressionado incrementa
			i++;
Delay10KTCYx(tempo);
}
		if(	PORTBbits.RB1 == 0){ //botão pressionado decrementa
			i--;
Delay10KTCYx(tempo);
}
		if(i==100){ // próximo digito depois de 99 ser 0
Delay10KTCYx(tempo);
i=0;
} 
		if(i==-1){ //próximo digito antes de 0 ser 99
		i=99;
Delay10KTCYx(tempo);
}
				PORTAbits.RA2 = 1 ;
				PORTEbits.RE0 = 0 ;
				a = (i/10);
				PORTD = numero[a];
				Delay10KTCYx(tempo1);
				PORTAbits.RA2 = 0 ;
				PORTEbits.RE0 = 1 ;
				b =(i%10);
				PORTD = numero[b] ;
				Delay10KTCYx(tempo1);	
}
}
Neste exemplo é importante prestar atenção, pois deve haver uma completa sincronia entre o acionamento do display e os botões. Outro dado importante é ajustar o delay de forma a encaixa-lo entre multiplexação e o acionamento do display, de uma forma que ao apresentar um digito em um display o outro display se apague por um instante imperceptível ao olho humano, caso isso não seja obedecido será impossível acionar mais de dois displays de uma só vez devido a insuficiência de corrente nos terminais do PIC18F4550. Quanto ao botão seu delay de acionamento deve ser configurado de modo que ajusta sua sensibilidade.
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118, em especial a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos, ativamos então as chaves dos display para visualizar a contagem. Utilizando do conhecimento adquirido em praticas anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens 2.7, 2.8 e 2.9.
Imagem 2.7
Imagem 2.9
Imagem 2.8
A imagem 2.7 representa o inicio da sequencia neste momento nenhum botão foi pressionado o display aciona os segmentos que correspondem ao numero 00. A imagem 2.8 mostra apos o acionamento do botão que incrementa a contagem no momento em que o numero 01 e representado pelos segmentos do display. A imagem 2.9 mostra após o botão que decrementa ter sido pressionado duas vezes o momento em que o display ativa seus segmentos correspondentes ao numero 99. 
Para fazer o controle foram utilizados push-buttons localizados no próprio Kit a imagem 3.0 os mostram.
Botão RB1, INT1 – Decrementa
Botão RB0, INT0 – Incrementa
Imagem 3.0
5° Passo – Projeto do contador de 0000 a 9999
Utilizando do conhecimento absorvido nas praticas anteriores sobre display de 7 segmentos, sua multiplexação e o acionamento de mais de dois displays foi desenvolvida a linguagem de programação para atender as necessidades do problema seguinte, onde deve ser construído um contador de 0 a 9999. Os dígitos devem serem apresentados em quatro displays de 7 segmentos e a contagem deve ser aleatória partindo de 0000 e parando por fim em 9999.
Em mente da necessidade do funcionamento do programa, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
// contador de 0000 a 9999
#include<P18F4550.h>
#include<delays.h>
#include<stdlib.h> 
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
int i,a,b,c,a1,a2,a3,g=1, tempo=5;
int const numero[] = { // conjunto de dígitos a apresentar
			0x3F,
			0x06,
			0x5B,
			0x4F,
			0x66,
			0x6D,
			0x7D,
			0x07,
			0x7F,
			0x6F,};			
void main (void){
	TRISE = 0x00;
	TRISD = 0x00;
	TRISA = 0x00;
		while(g==1){ // repetição ate 9999
			for (i=0;i<10000;i++ ){
				a = (i/1000);
				a1 = (i%1000);
				b = (a1/100);
				a2 = (a1%100);
				c = (a2/10);
				a3 = (a2%10);
				PORTD = numero[a]; // mostrar 1° digito
				PORTAbits.RA5 = 1 ; // ativando display U5
				Delay10KTCYx(tempo); // tempo da contagem e multiplexação
				PORTAbits.RA5 = 0 ; // desativando display U5
				PORTD = numero [b]; //mostrar 2° digito
				PORTAbits.RA2 = 1 ; // ativando display U6
				Delay10KTCYx(tempo);// tempo da contagem e multiplexação
				PORTAbits.RA2 = 0 ;//desativando display U6
				PORTD = numero [c]; //mostrar 3° digito
				PORTEbits.RE0 = 1 ; // ativando display U7
				Delay10KTCYx(tempo); // tempo da contagem e multiplexação
				PORTEbits.RE0 = 0 ; //desativando display U7
				PORTD = numero [a3]; //mostrar 4° digito
				PORTEbits.RE2 = 1 ; // ativando display U8
				Delay10KTCYx(tempo); // tempo da contagem e multiplexação
				PORTEbits.RE2 = 0 ; //desativando display U8
				
			if(a==9 && b==9 && c ==9 && a3==9){ // condição para congelar no momento 9999
g=0;
}		
}				while(1){
				PORTD = numero[9];
				PORTAbits.RA5 = 1 ;
				Delay10KTCYx(tempo);
				PORTAbits.RA5 = 0 ;
				PORTD = numero [9];
				PORTAbits.RA2 = 1 ;
				Delay10KTCYx(tempo);
				PORTAbits.RA2 = 0 ;
				PORTD = numero [9];
				PORTEbits.RE0 = 1 ;
				Delay10KTCYx(tempo);
				PORTEbits.RE0 = 0 ;
				PORTD = numero [9];
				PORTEbits.RE2 = 1 ;
				Delay10KTCYx(tempo);
				PORTEbits.RE2 = 0 ;
				
}
}
}
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118, em especial a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos. Utilizando do conhecimento adquirido em praticas anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens. As imagens 3.1, 3.2, 3.3 e 3.4 mostram com um tempo maior entre a contagem como ocorre o acionamento entre os displays, ou seja, o funcionamento de modo a acionar um por vez, apenas desta forma é possível acionar mais de dois displays. Para isso a variável tempo na programação foi alterada para, tempo = 0, tempo máximo no delay.
Imagem 3.2
Imagem 3.3
Imagem 3.1
Imagem 3.4
Após essa representação ajustamos o tempo de contagem para tempo=5, para cada segmento permanecer ativo por 5 ms, e então foi dado inicio a operação normal no programa, com esse tempo curto fica imperceptívela olho humano o efeito representado nas imagens acima.
Abaixo podemos observar a contagem de 0000 a 9999, nas imagens 3.5 e 3.6.
Imagem 3.5
Imagem 3.6
A imagem 3.5 mostra momentos após o contador ter iniciado a contagem e a imagem 3.6 mostra após atingir o valor máximo 9999, quando a contagem é parada.
6° Passo – Projeto do contador de 0000 a 9999 controlado
Utilizando do conhecimento e parâmetros de configuração absorvidos nas praticas anteriores e tendo como base programas já desenvolvidos, foi elaborada a linguagem de programação para atender as necessidades do problema seguinte, onde deve ser construído um contador de 0 a 9999. Os dígitos devem serem apresentados em quatro displays de 7 segmentos e a contagem deve ser controlada por dois botões, um primeiro botão incrementa e um segundo botão decrementa a contagem.
Com base da necessidade do funcionamento do programa, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
//contador de 0000 a 9999 controlado
#include<P18F4550.h>
#include<delays.h>
#include<stdlib.h> 
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
int i = 0,a,b,tempo=75, tempo1=5;
int a1,a2,c,a3;
int const numero[] = { //números a serem mostrados
			0x3F,
			0x06,
			0x5B,
			0x4F,
			0x66,
			0x6D,
			0x7D,
			0x07,
			0x7F,
			0x6F,};			
void main (void){
	TRISE = 0x00;//atribuindo porta E como saída em nível 0
	TRISD = 0x00; //atribuindo porta D como saída em nível 0
	TRISA = 0x00; // atribuindo Porta A como saída em nível 0
	TRISBbits.RB0 = 1; // atribuindo botão 1 como entrada
	TRISBbits.RB1 = 1; // atribuindo botão 2 como entrada
	PORTBbits.RB0 = 1; // atribuindo nível 1 ao botão 1
	PORTBbits.RB1 = 1; // atribuindo nível 1 ao botão 2
	while(1){
	
		if(	PORTBbits.RB0 == 0){ //botão pressionado incrementa
			i++;
Delay10KTCYx(tempo);
}
		if(	PORTBbits.RB1 == 0){ // botão pressionado decrementa
			i--;
Delay10KTCYx(tempo);
}
		if(i==10000){// próximo digito depois de 9999 ser 0000
Delay10KTCYx(tempo);
i=0;
} 
		if(i==-1){ //próximo digito antes de 0000 ser 9999
		i=9999;
Delay10KTCYx(tempo);
}
				a = (i/1000);
				a1 = (i%1000);
				b = (a1/100);
				a2 = (a1%100);
				c = (a2/10);
				a3 = (a2%10);
				PORTD = numero[a];
				PORTAbits.RA5 = 1 ;
				Delay10KTCYx(tempo1);
				PORTAbits.RA5 = 0 ;
				PORTD = numero [b];
				PORTAbits.RA2 = 1 ;
				Delay10KTCYx(tempo1);
				PORTAbits.RA2 = 0 ;
				PORTD = numero [c];
				PORTEbits.RE0 = 1 ;
				Delay10KTCYx(tempo1);
				PORTEbits.RE0 = 0 ;
				PORTD = numero [a3];
				PORTEbits.RE2 = 1 ;
				Delay10KTCYx(tempo1);
				PORTEbits.RE2 = 0 ;
}
}
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118, em especial a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos. 
Utilizando do conhecimento adquirido em praticas anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens 3.7, 3.8, 3.9 e 4.0.
Imagem 3.8
Imagem 3.7
Imagem 4.0
Imagem 3.9
Nas imagens podemos observar na imagem 3.7 o estagio inicial 0000 , após pressionar o botão de incrementar varias vezes o digito a ser mostrado é 0019 como visto na imagem 3.8, caso seja pressionado o botão de decrementar podemos voltar ate o ponto desejado como podemos observar nas imagens 3.9 e 4.0 os números 0018 e 9999 respectivamente.
Para fazer o controle foram utilizados push-buttons localizados no próprio Kit a imagem 4.1 os mostram.
Botão RB1, INT1 – Decrementa
Botão RB0, INT0 – Incrementa
Imagem 4.1
7° Passo – Projeto do contador de 0000 a 9999 
Utilizando do conhecimento absorvido nos passos anteriores e tendo como base programas já desenvolvidos, foi elaborada a linguagem de programação para atender as necessidades do problema seguinte, onde deve ser construído um contador de 0 a 9999. Os dígitos devem serem apresentados em quatro displays de 7 segmentos e a contagem deve ser zerada e reiniciada quando atingir o nível máximo.
Sabendo dos parâmetros de funcionamento do programa, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
//contador 0000 a 9999
#include<P18F4550.h>
#include<delays.h>
#include<stdlib.h> 
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
int i,a,b,c,a1,a2,a3,tempo=6;
int const numero[] = { // números a serem mostrados
			0x3F,
			0x06,
			0x5B,
			0x4F,
			0x66,
			0x6D,
			0x7D,
			0x07,
			0x7F,
			0x6F,};			
void main (void){
	TRISE = 0x00; //atribuindo porta E como saída em nível 0
	TRISD = 0x00; // atribuindo porta D como saída em nível 0
	TRISA = 0x00; // atribuindo porta A como saída em nível 0
		while(1){ //contagem de 0000 a 9999 repetição infinita
			for (i=0;i<10000;i++ ){
				a = (i/1000);
				a1 = (i%1000);
				b = (a1/100);
				a2 = (a1%100);
				c = (a2/10);
				a3 = (a2%10);
				PORTD = numero[a];
				PORTAbits.RA5 = 1 ;
				Delay10KTCYx(tempo);
				PORTAbits.RA5 = 0 ;
				PORTD = numero [b];
				PORTAbits.RA2 = 1 ;
				Delay10KTCYx(tempo);
				PORTAbits.RA2 = 0 ;
				PORTD = numero [c];
				PORTEbits.RE0 = 1 ;
				Delay10KTCYx(tempo);
				PORTEbits.RE0 = 0 ;
				PORTD = numero [a3];
				PORTEbits.RE2 = 1 ;
				Delay10KTCYx(tempo);
				PORTEbits.RE2 = 0 ;
				
}
}
}
A descrição de sequencia de funcionamento na multiplexação e acionamento dos displays já foi informada anteriormente.
Depois de digitado o código, realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118, em especial a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos. Utilizando do conhecimento adquirido em praticas anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens 4.2, 4.3 e 4.4.
Imagem 4.3
Imagem 4.2
Imagem 4.4
Na imagem 4.2 podemos ver o contador momentos após ter entrado em funcionamento, na imagem 4.3 podemos ver próximo de atingir o seu limite máximo 9999, já na imagem 4.4 o contador já reiniciou e está continuando a sequencia.
Vale ressaltar que o tempo para cada segmento permanecer ativo é 5ms, o que garante a correta visualização do funcionamento, devido características e parâmetros do Kit e do microcontrolador.
8° Passo – Projeto do contador de 0 a 50
Com base no conhecimento já adquirido anteriormente e aprimorando novos comandos foi desenvolvido a linguagem de programação para atender as necessidades do problema seguinte, onde deve ser construído um contador de 0 a 50. Os dígitos devem serem apresentados em dois displays de 7 segmentos e a contagem deve ser controlada por três botões, ao acionar um primeiro botão a contagem deve obedecer a sequencia normal de 0 a 50, ao pressionar um segundo botão a contagem deve ser reiniciada e continuar mostrando apenas números pares de 0 a 50, caso um terceiro botão seja pressionado a contagem deve ser reiniciada e começar então a sequencia mostrando apenas números impares.
Sabendo dos parâmetros de funcionamento deste programa, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foicriado o seguinte código em linguagem C para realizar o funcionamento do projeto.
//De 0 a 50
#include<P18F4550.h>
#include<delays.h>
#include<stdlib.h> 
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
int i=0,a,b,a1,a2,tempo=5,g=1,c1=1,c2,c3,resto,tempo1=2,d,w,r=400;
int const numero[] = {// números a serem mostrados
			0x3F,
			0x06,
			0x5B,
			0x4F,
			0x66,
			0x6D,
			0x7D,
			0x07,
			0x7F,
			0x6F,};			
void main (void){
	TRISE = 0x00; // Porta E saída em nível 0
	TRISD = 0x00; // Porta D saída em nível 0
	TRISA = 0x00; // Porta A saída em nível 0
	TRISBbits.RB0 = 1; // Entrada do botão 1
	TRISBbits.RB1 = 1; // Entrada do botão 2
	TRISBbits.RB2 = 1; // Entrada do botão 3
	
	PORTBbits.RB0 = 1; // Saida do botão nível 1
	PORTBbits.RB1 = 1; // Saida do botão nível 1
	PORTBbits.RB2 = 1; // Saida do botão nível 1
while(1){ // Repetição geral do contador
i++;
if (i>50){
i=0;
}
	if(	PORTBbits.RB0 == 0){ // números normais de 0 a 50
			c1=1;
}
		if(	PORTBbits.RB1 == 0){ // números pares de 0 a 50
			c1=2;
}
		if(	PORTBbits.RB2 == 0){ // números impares de 0 a 50
			c1=3;
}
if((PORTBbits.RB0 == 0) || (c1==1) ){ // Repetição de 0 a 50 normal
w=1;
if(PORTBbits.RB0 == 0){
i=0;
}				
while(w==1){
d++;
						a = (i/10);
						a1 = (i%10);
				PORTD = numero [a];
				PORTAbits.RA2 = 1 ;
				Delay1KTCYx(tempo1);
				PORTAbits.RA2 = 0 ;
				PORTD = numero [a1];
				PORTEbits.RE0 = 1 ;
				Delay1KTCYx(tempo1);
				PORTEbits.RE0 = 0 ;
if(d==r){
d=0;
w=0;
}
}	
}			
	
if ((PORTBbits.RB1 == 0) || (c1==2)){ //Repetição de 0 a 50 pares
w=1;
if(PORTBbits.RB1 == 0){
i=0;
}
						a = (i/10);
						a1 = (i%10);
						resto=(a1%2);
if(resto==0){
while(w==1){
d++;
				PORTD = numero [a];
				PORTAbits.RA2 = 1 ;
				Delay1KTCYx(tempo1);
				PORTAbits.RA2 = 0 ;
				PORTD = numero [a1];
				PORTEbits.RE0 = 1 ;
				Delay1KTCYx(tempo1);
				PORTEbits.RE0 = 0 ;
if(d==r){
d=0;
w=0;
}
}
}
}
if ((PORTBbits.RB2 == 0) || (c1==3)){ //Repetição de 0 a 50 impares
w=1;
if(PORTBbits.RB2 == 0){
i=0;
}
						a = (i/10);
						a1 = (i%10);
						resto=(a1%2);
if(resto != 0){
while(w==1){
d++;
				PORTD = numero [a];
				PORTAbits.RA2 = 1 ;
				Delay1KTCYx(tempo1);
				PORTAbits.RA2 = 0 ;
				PORTD = numero [a1];
				PORTEbits.RE0 = 1 ;
				Delay1KTCYx(tempo1);
				PORTEbits.RE0 = 0 ;
if(d==r){
d=0;
w=0;
}
}	
}
}
}
}
Este código foi um pouco difícil de ser elaborado, tentamos de varias formas fazer um programa simples e funcional, este tem um logica simples, porem ficou extenso. Neste código temos uma repetição geral que vai contar de 0 a 50 caso um primeiro botão seja pressionado. Caso um segundo botão seja pressionado o programa atribui a uma variável que o leva a outra repetição que mostrara números pares de 0 a 50. Ainda se um terceiro botão seja pressionado ele é atribuído a outra variável que o levara para outra repetição que desta vez repetira de 0 a 50 os números impares. Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118, em especial a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos. Utilizando do conhecimento adquirido em estudos anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens.
Imagem 4.7
Imagem 4.5
Imagem 4.6
Imagem 5.0
Imagem 4.9
Imagem 4.8
Da imagem 4.5 a 4.7 podemos ver a contagem em seu estado inicial ou quando o Botão INT 0 é pressionado, os números mostrados são de 0 a 50.
Na imagem 4.8, 4.9 e 5.0 a contagem esta em seu segundo estagio quando após pressionado o botão INT 1 são mostrados apenas números pares de 2 a 50.
Imagem 5.1
Imagem 5.3
Imagem 5.2
Nas imagens 5.1, 5.2 e 5.3 observamos a contagem apenas com números pares que vai de 1 a 49.
Para fazer o controle foram utilizados push-buttons localizados no próprio Kit, a imagem 5.4 os mostram.
Botão RB2, INT 2 – Números Impares
Botão RB1, INT 1 – Números Pares
Botão RB0, INT 0 – Números de 0 a 50
Imagem 5.4
Com está pratica finalizamos o Processo experimental, que envolveu Display de sete segmentos e Push Buttons. Todo o equipamento utilizado foi recolhido e direcionado para seus respectivos lugares.
Conclusões
Esta segunda pratica teve seus objetivos alcançados e um saldo positivo onde possibilitou aprimorar ferramentas já utilizadas assim como adstringir novos conhecimentos.
É notável durante os passos que ouve evoluções significativas como, otimização da programação, compreensão dos problemas e desenvolvimento dos mesmos. 
Nessa etapa a ênfase foi em programas que envolvem os displays de 7 segmentos e botões Push Buttons, tivemos dificuldades de inicio no acionamento de mais de dois displays de 7 segmentos em ajustar o tempo certo para a sua multiplexação e representação dos dígitos, mais com atenção e ajuda de alguns materiais didáticos conseguimos avançar com facilidade, o que tornou mais fácil a execução das etapas posteriores. 
O material repassado pelo Professor facilitou e ajudou na compreensão dos parâmetros do Chip PIC18f4550, quanto a pinagem do mesmo, o que a colaborou na hora de configurar os botões e os Displays.
Além de reforçar o desenvolvimento da logica na área de programação nos aproxima daquilo que estamos habituados a encontrar no dia a dia, temos como exemplos de contadores relógios, semáforos e inúmeros displays que reproduzem diversas informações como contagem, alertas, mensagens, entre outros. Desta forma a execução desse estudo nos possibilitou entender os problemas através da teoria, executa-los através da pratica observando seu funcionamento assim como aperfeiçoa-lo de acordo a necessidade. 
Aluno Responsável : Edgar Azevedo dos Santos Filho
Referências bibliográficas 
https://www.google.com.br/search?tbm=isch&sa=1&q=display+7+segmentos+segmentos&oq=display+7+segmentos+segmentos&gs_l=psy-ab.3...130178.135025.0.135259.13.12.0.0.0.0.671.1307.2-1j1j0j1.3.0....0...1.1.64.psy-ab..10.1.670...0.f4mUx4iAzH0#imgrc=_ - Acesso em 30 de agosto de 2017
https://www.google.com.br/search?q=tabela+hexadecimal&source=lnms&tbm=isch&sa=X&ved=0ahUKEwinlbK1qoDWAhUL42MKHVsZAnUQ_AUICigB#imgrc=NnEVoApXxJPsFM: - Acesso em 30 de agosto de2017
Datasheet Kit XM118
Datashet PIC18f4550
Material Repassado em sala de Aula

Outros materiais

Outros materiais