Sei sulla pagina 1di 11

Universidade Nove de Julho

Departamento de Exatas
Disciplina
Professor:

Experincia N
Curso:

Identificao dos alunos


1

Campus:

Turma:

Data: ____/_____/_____

Prof Laboratrio:

Visto Prof:

Nota 1: O aluno dever fazer as adaptaes necessrias em funo do microcomtrolador ou


dos recursos didticos disponveis

Captulo 6 - Experincia 4 Converso BCD para displays de 7 segmentos

Objetivo
O objetivo desta experincia ensinar ao aluno como criar um decodificar BCD para
displays de 7 segmentos.

Descrio
Os displays utilizados no McMaster so conhecidos como displays de leds de 7 segmentos,
pois os nmeros so compostos por 7 traos. Estes componentes possuem ainda o ponto
decimal e so considerados displays numricos, por no possurem traos suficientes para a
exibio de todas as letras do nosso alfabeto.
Para facilitar a vida do projetista o mercado padronizou uma nomenclatura para todos os
traos do display, possibilitando que tratemos cada um deles individualmente:

G
F

B
G

Comum
E

B
Comum

C
Dp

Dp

Desta forma, temos um pino para controlar cada um dos segmentos (A...G) e mais o ponto
decimal (Dp). Os dois pinos adicionais so os comuns, que podem ser ligados a todos os
catodos ou anodos dos leds internos. Por causa disso, estes displays so fornecidos em 2
tipos: catodo comum ou anodo comum. No nosso caso, os displays utilizados so do tipo
catodo comum, isto , o pino comum deve ser ligado ao terra e os segmentos devem ser
ligados ao Vcc para acenderem.
Outra observao importante que a pinagem descrita no desenho vlida para o tipo de
display utilizado no McMaster. Existem displays de outros tamanhos que possuem uma
disposio de pinos diferente.
Como cada segmento um led individual, precisa-se de um pino do PIC para controlar
cada segmento. Desta forma, so necessrios 8 pinos para acionar os 7 segmentos e mais o
ponto decimal.
A fim de converter o valor binrio de um algarismo em um valor de 8 bits que represente o
este algarismo num display de 7 segmentos fez-se uso de uma tabela de converso. Por
exemplo, para representar o algarismo 2 no display, deve-se acender os segmentos A, B, D,
E e G.
Como no kit McMaster o PORTD est conectado aos segmentos conforme a tabela
PIC
44

Segmento

RD0
RD1
RD2
RD3
RD4
RD5
RD6
RD7

A
B
C
D
E
F
G
DP

para acender o algarismo 2 no display precisa-se colocar o valor 01011011b no PORTD, ou


seja, colocar em 1 os bits ligados aos segmentos que se deseja acender.
Assim, no software deve ser criada uma tabela para converter cada valor binrio numa
representao que posta nos segmentos (PORTD) reproduza o valor binrio original.
A tabela criada utilizando-se a instruo RETLW. O valor binrio que se deseja converter
adicionado ao PCL (program counter) de forma a desviar o fluxo do programa para a linha
que contm a combinao de 0 e 1 que formaro o caractere no display.
O software utiliza as teclas da linha 4 colunas 1 e 2 para incrementar e decrementar o valor
da varivel CONTADOR. Esta varivel est limitada pelas constantes "MIN" e "MAX". A
tabela de converso foi utilizada a fim de visualizar o valor da varivel CONTADOR no
display de 7 segmentos.

Manual do Usurio Sistema de Treinamento em Microcontroladores PIC McMaster rev5 2010

45

Esquema Eltrico

46

Fluxograma

INCIO

VETOR DE RESET
PULA P/ INCIO DO
PROGRAMA

CONFIGURAES INICIAIS
PORTAS, TIMERS,
INTERRUPES, OPTION, ADs.

HABILITA DISPLAY DA
UNIDADE E LINHA 4 DO
TECLADO MATRICIAL

CARREGA CONTADOR
COM VALOR MNIMO
3
RECARREGA FILTRO DE
DEBOUNCE
4
BOTO 1
PRESS.?

Sim

No
BOTO 2
PRESS.?

Sim

No

Manual do Usurio Sistema de Treinamento em Microcontroladores PIC McMaster rev5 2010

47

FIM FILTRO
DEBOUNCE?

No

FIM FILTRO
DEBOUNCE?

Sim

CONTADOR=MN?

Sim

Sim

CONTADOR=MX?

No

No

DECREMENTA
CONTADOR

INCREMENTA
CONTADOR

CONSULTA TABELA PARA


ATUALIZAR DISPLAY DE
7 SEGMENTOS

48

No

Sim

Cdigo
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Exemplo de Cdigo para utilizao com a McMaster
*
*
Exemplo 4
*
*
*
*
LABTOOLS - MOSAICO DIDACTIC DIVISION
*
*
*
* TEL: (0XX11) 4992-8775
SITE: www.labtools.com.br
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
VERSO : 1.0
*
*
DATA : 18/01/2010
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Descrio geral
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//SOFTWARE QUE UTILIZA DOIS BOTES PARA INCREMENTAR E DECREMENTAR UM
//CONTADOR. O VALOR MOSTRADO NO DISPLAY DE 7 SEGMENTOS.
/*
CONFIGURAO DOS JUMPERS DA PLACA:
CAP USB(RC3)
DATA I2C
CLOCK I2C
COLUNA 2(RB1)
COLUNA 1(RB0)
LINHA 1 / DISPLAY MILHAR(RB4)
LEDS ESPECIAS (RC0,RC1,RC2)

->
->
->
->
->
->
->

ON
OFF
OFF
ON
ON
ON
ON

*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
DEFINIO PIC
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <p18F4550.h>

// Register definitions

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
INCLUDES DAS FUNES DE PERIFRICOS DO PIC
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include
#include
#include
#include
#include
#include
#include

<pwm.h>
<adc.h>
<timers.h>
<delays.h>
<i2c.h>
<stdlib.h>
<usart.h>

//PWM library functions


//ADC library functions
//Timer library functions
//Delay library functions
//I2C library functions
//Library functions
//USART library functions

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Configuraes para gravao
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma

config
config
config
config
config
config
config
config
config
config
config
config
config
config

FOSC = HS
CPUDIV = OSC1_PLL2
WDT = OFF
WDTPS = 128
LVP = OFF
PWRT = ON
BOR = OFF
BORV = 0
PBADEN = OFF
DEBUG = OFF
PLLDIV = 1
USBDIV = 1
FCMEN = OFF
IESO = OFF

Manual do Usurio Sistema de Treinamento em Microcontroladores PIC McMaster rev5 2010

49

#pragma
#pragma
#pragma
#pragma
#pragma
#pragma

config
config
config
config
config
config

VREGEN = OFF
MCLRE = ON
LPT1OSC = OFF
CCP2MX = ON
STVREN = OFF
ICPRT = OFF

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Definio e inicializao das variveis Globais
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//Neste bloco esto definidas as variveis globais do programa.
unsigned char
CONTADOR;
//ARMAZENA O VALOR DA CONTAGEM
unsigned char
FILTRO11;
//FILTRAGEM 1 PARA O BOTO 1
unsigned char
FILTRO12;
//FILTRAGEM 2 PARA O BOTO 1
unsigned char
FILTRO21;
//FILTRAGEM 1 PARA O BOTO 2
unsigned char
FILTRO22;
//FILTRAGEM 2 PARA O BOTO 2
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Constantes internas
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de constantes facilita a programao e a manuteno.
#define
MIN
0
#define
MAX
15
#define
T_FILTRO
5
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Declarao dos flags de software
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de flags ajuda na programao e economiza memria RAM.
struct
{
unsigned BIT0:1;
unsigned BIT1:1;
unsigned BIT2:1;
unsigned BIT3:1;
unsigned BIT4:1;
unsigned BIT5:1;
unsigned BIT6:1;
unsigned BIT7:1;
}FLAGSbits;
//ARMAZENA OS FLAGS DE CONTROLE
#define
#define

ST_BT1
ST_BT2

FLAGSbits.BIT0
FLAGSbits.BIT1

//STATUS DO BOTO 1
//STATUS DO BOTO 2

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Definio e inicializao dos port's
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
PROTOTIPAGEM DE FUNES
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
ENTRADAS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//As entradas devem ser associadas a nomes para facilitar a programao e
//futuras alteraes do hardware.
#define

BT1

PORTBbits.RB0

//PORTA DO BOTO
//1 -> PRESSIONADO
//0 -> LIBERADO

#define

BT2

PORTBbits.RB1

//PORTA DO BOTO
//1 -> PRESSIONADO
//0 -> LIBERADO

/* * * * * * * * * * * * * * * * *
*
* * * * * * * * * * * * * * * * *
//As sadas devem ser associadas a
//futuras alteraes do hardware.

50

* * * * * * * * * * * * * * * * * * *
SADAS
*
* * * * * * * * * * * * * * * * * * */
nomes para facilitar a programao e

#define

//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//

LINHA_4

PORTBbits.RB7

//PINO PARA ATIVAR LINHA 4 DO TECLADO


//MATRICIAL
//1 -> LINHA ATIVADA
//0 -> LINHA DESATIVADA

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
ROTINA DE CONVERSO BINRIO -> DISPLAY
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ESTA ROTINA IR RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER
MOSTRADO NO DISPLAY PARA CADA VALOR DE INTENSIDADE. O RETORNO J EST
FORMATADO PARA AS CONDIES DE LIGAO DO DISPLAY AO PORTD.
a
**********
*
*
f *
* b
*
g
*
**********
*
*
e *
* c
*
d
*
********** *.

const rom unsigned char CONVERTE[16] =


{//
.GFEDCBA
POSIO CORRETA DOS SEGMENTOS
0b00111111,
// 00 - RETORNA SMBOLO CORRETO
0b00000110,
// 01 - RETORNA SMBOLO CORRETO
0b01011011,
// 02 - RETORNA SMBOLO CORRETO
0b01001111,
// 03 - RETORNA SMBOLO CORRETO
0b01100110,
// 04 - RETORNA SMBOLO CORRETO
0b01101101,
// 05 - RETORNA SMBOLO CORRETO
0b01111101,
// 06 - RETORNA SMBOLO CORRETO
0b00000111,
// 07 - RETORNA SMBOLO CORRETO
0b01111111,
// 08 - RETORNA SMBOLO CORRETO
0b01101111,
// 09 - RETORNA SMBOLO CORRETO
0b01110111,
// 10 - RETORNA SMBOLO CORRETO
0b01111100,
// 11 - RETORNA SMBOLO CORRETO
0b00111001,
// 12 - RETORNA SMBOLO CORRETO
0b01011110,
// 13 - RETORNA SMBOLO CORRETO
0b01111001,
// 14 - RETORNA SMBOLO CORRETO
0b01110001};
// 15 - RETORNA SMBOLO CORRETO

0
1
2
3
4
5
6
7
8
9
A
b
C
d
E
F

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Funo Principal
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void main
{
PORTA
PORTB
PORTC
PORTD
PORTE
LATA
LATB
LATC
LATD
LATE

()
=
=
=
=
=

=
=
=
=
=

TRISA
TRISB
TRISC
TRISD
TRISE

0x00;
0x00;
0x00;
0x00;
0x00;

0x00;
0x00;
0x00;
0x00;
0x00;

=
=
=
=
=

0b00101111;
0b00001111;
0b10011001;
0b00000000;
0b00000000;

//Limpa
//Limpa
//Limpa
//Limpa
//Limpa

PORTA
PORTB
PORTC
PORTD
PORTE

//Limpa
//Limpa
//Limpa
//Limpa
//Limpa

PORTA
PORTB
PORTC
PORTD
PORTE

//CONFIG
//CONFIG
//CONFIG
//CONFIG
//CONFIG

ADCON1 = 0b00001111;

DIREO
DIREO
DIREO
DIREO
DIREO

DOS
DOS
DOS
DOS
DOS

PINOS
PINOS
PINOS
PINOS
PINOS

PORTA
PORTB
PORTC
PORTD
PORTE

//DESLIGA CONVERSORES A/D

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Inicializao do Sistema
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
LINHA_4 = 1;

//ATIVA A LINHA 4 DO TECLADO E DISPLAY DA UNIDADE

Manual do Usurio Sistema de Treinamento em Microcontroladores PIC McMaster rev5 2010

51

ST_BT1 = 0;
ST_BT2 = 0;
CONTADOR = MIN;
PORTD = CONVERTE[CONTADOR];
/* * * * * * * * *
*
* * * * * * * * *
while(1)
{
ClrWdt();
FILTRO11 =
FILTRO21 =
FILTRO12 =
FILTRO22 =

//INICIA CONTADOR = MIN


//ATUALIZA O DISPLAY INICIALMENTE

* * * * * * * * * * * * * * * * * * * * * * * * * * *
Rotina Principal
*
* * * * * * * * * * * * * * * * * * * * * * * * * * */

0;
0;
T_FILTRO;
T_FILTRO;

while (BT1)
{
ClrWdt();
if (--FILTRO11 == 0)
{
FILTRO12--;
if(FILTRO12 == 0)
{
if (CONTADOR != MIN)
{
if (!ST_BT1)
{
CONTADOR--;
PORTD = CONVERTE[CONTADOR];
ST_BT1 = 1;
}
}
}
}
}
ST_BT1 = 0; // BOTO LIBERADO, LIMPA O FLAG
while (BT2)
{
ClrWdt();
if (--FILTRO21 == 0)
{
FILTRO22--;
if(FILTRO22 == 0)
{
if (CONTADOR != MAX)
{
if (!ST_BT2)
{
CONTADOR++;
PORTD = CONVERTE[CONTADOR];
ST_BT2 = 1;
}
}
}
}
}
ST_BT2 = 0; // BOTO LIBERADO, LIMPA O FLAG
}

52

}
// FIM DO PROGRAMA

Dicas e Comentrios
A tabela implementada neste exemplo apresenta 16 linhas, assim, possvel representar
qualquer valor hexadecimal entre 0h e Fh. No entanto, utilizando o mesmo conceito
poderamos criar representaes para praticamente todas as letras do alfabeto. E para
escrever mensagens no display bastaria associar a cada letra um nmero binrio.
O conceito da tabela no se limita apenas utilizao com displays de 7 segmentos,
infinitas situaes podem ser resolvidas com o uso de uma tabela. Por exemplo, pode-se criar
uma tabela para converter nmeros binrios em caracteres ASCII e vice-versa.

Exerccios Propostos
1. Mantendo as 16 linhas atuais, alterar a tabela para mostrar as letras: A, b, C,
d, E, F, G, H, I, J, L, n, O, P, r e S.
2. Alterar o software a fim de utilizar uma tabela que contenha todos os nmeros e
todas as possveis letras.

Manual do Usurio Sistema de Treinamento em Microcontroladores PIC McMaster rev5 2010

53

Potrebbero piacerti anche