Escolar Documentos
Profissional Documentos
Cultura Documentos
-2-
1. MOTIVAÇÃO
2. CIRCUITO
-3-
Observa se a simplicidade do circuito em questão, lembrando que este está sem o
circuito oscilador, e a fonte de alimentação, sendo o praticante da montagem o
responsável por sua elaboração. Foram utilizados displays de cátodo comum e
transistores NPN de uso geral.
3. PROGRAMA
A essência deste projeto é seu programa, este deve ser provido com a lógica de
funcionamento a seguir: para exibição dos três dígitos cada display deve ser acionado
individualmente e em seqüência, exemplificando: para exibir o numero 456 deve ser
acionado o primeiro display contendo o numero quatro, após deve ser acionado o
numero cinco no segundo display e por fim deve ser exibido no terceiro display o
numero seis, todo este procedimento deve ser feito na maior velocidade possível, isso
faz com que haja sensação de que todos os displays estão acesos ao mesmo tempo.
O acionamento individual de cada dígito deve ser feito configurando o programa
de modo que se deve escolher o numero a ser exibido e escolher o display
correspondente a ele. Para acender o primeiro display, escolhe-se o número e coloca em
condução seu respectivo transistor, isto deve ser feito também com os outros dois
displays.
Após testes foi percebido que deveria ser desligado o número em exibição antes
de passar a exibir o próximo algarismo no display seguinte, pois não se obtinha um
grande contraste de cada dígito dificultando a visualização de todo o número.
Qualquer e apenas numero inteiros de no máximo três algarismos podem ser
exibidos com o programa a seguir, que será desenvolvido em partes para então serem
agrupadas.
Queremos encontrar o valor absoluto de todos os algarismos para então em
conjunto formar o número por completo.
Ao dividir um numero dentro do conjunto dos números inteiros por dez o resto da
divisão será o valor absoluto do seu algarismo menos significativo, utilizando esta
técnica elaboramos seguinte função:
-4-
////////// DISPLAY DAS UNIDADES
display_unidade(){
porta.b1 = 1;
uni = num%10;
switch(uni){
case 0:
portb = 63;
break;
case 1:
portb = 6;
break;
case 2:
portb = 91;
break;
case 3:
portb = 79;
break;
case 4:
portb = 102;
break;
case 5:
portb = 109;
break;
case 6:
portb = 125;
break;
case 7:
portb = 7;
break;
case 8:
portb = 127;
break;
case 9:
portb = 111;
break;
}
delay_ms(1);
porta.b1 = 0;
portb = 0;
}
-5-
ou seja, deve se ligar o primeiro display, encontrar com lógica matemática o algarismo
da unidade, depois através da execução do comando switch comparar o valor da
variável uni e exibir este número no display logo após zerar, ou seja não exibir numero
algum e desligar o display.
-6-
Programa Final
///////////////////////////////////////////////////////////
///////// 3 DISPLAY (7-SEGMENTOS) MULTIPLEXADOS ///////////
///////// -------------------------------------- //////////
///////// LUIGI EDUARDO /////// 15/07/2011 ////////////////
///////////////////////////////////////////////////////////
display_centena(){
porta.b2 = 1;
cen = (num/100)-((num%100)/100);
switch(cen){
case 0:
portb = 63;
break;
case 1:
portb = 6;
break;
case 2:
portb = 91;
break;
case 3:
portb = 79;
break;
case 4:
portb = 102;
break;
case 5:
portb = 109;
break;
case 6:
portb = 125;
break;
case 7:
portb = 7;
-7-
break;
case 8:
portb = 127;
break;
case 9:
portb = 111;
break;
}
delay_ms(1);
porta.b2 = 0;
portb = 0;
}
display_dezena(){
porta.b0 = 1;
dez = (num%100);
dez = (dez/10) - ((dez%10)/10);
switch(dez){
case 0:
portb = 63;
break;
case 1:
portb = 6;
break;
case 2:
portb = 91;
break;
case 3:
portb = 79;
break;
case 4:
portb = 102;
break;
case 5:
portb = 109;
break;
case 6:
portb = 125;
break;
-8-
case 7:
portb = 7;
break;
case 8:
portb = 127;
break;
case 9:
portb = 111;
break;
}
delay_ms(1);
porta.b0 = 0;
portb = 0;
}
display_unidade(){
porta.b1 = 1;
uni = num%10;
switch(uni){
case 0:
portb = 63;
break;
case 1:
portb = 6;
break;
case 2:
portb = 91;
break;
case 3:
portb = 79;
break;
case 4:
portb = 102;
break;
case 5:
portb = 109;
break;
case 6:
portb = 125;
-9-
break;
case 7:
portb = 7;
break;
case 8:
portb = 127;
break;
case 9:
portb = 111;
break;
}
delay_ms(1);
porta.b1 = 0;
portb = 0;
}
void main(){
trisa = 0b0;
trisb = 0b10000000;
porta = 0b0;
portb = 0b0;
num = 0;
while(1){
display_centena();
display_dezena();
display_unidade();
}
}
/////////// FIM DO PROGRAMA
4. MONTAGEM
A montagem, assim como seu circuito, é simples pode ser desenvolvida como
mostrado a seguir ou de modo permanente em placas próprias para circuitos.
- 10 -
- 11 -
Na montagem eu adicionei um anexo ao circuito sendo este um botão que ao
pressionado soma uma unidade à variável num. Foi feita apenas uma modificação
na função void main(), e a adição de uma variável chamada mem.
void main() {
trisa = 0b0;
trisb = 0b10000000;
porta = 0b0;
portb = 0b0;
num = 0;
mem = 0;
while(1){
if(portb.b7 == 0b1 & mem == 0){
num = num + 1;
mem = 1;
if(num == 1000){
num = 0;
}
}
if(portb.b7 == 0b0 & mem == 1){
mem = 0;
}
display_centena();
display_dezena();
display_unidade();
}
}
Toda a lógica do tutorial pode ser aplicada para construir outro projeto com mais
displays.
- 12 -
Não tenho responsabilidade pelo mau funcionamento do projeto, danos, até
mesmo de sanar dúvidas se este for alterado.
Caso este for usado como base em algum trabalho acadêmico, favor citar a
fonte como incentivo e contribuição para repercussão deste tutorial.
Caso não tenha descoberto este documento em um fórum, as dúvidas devem
ser enviadas por e-mail, no campo relacionado ao assunto deve ser colocado o nome
do tutorial.
Grato,
Luigi Eduardo Sica Nery
- 13 -
Tutorial desenvolvido e apresentado por:
Luigi Eduardo Sica Nery
luigiesn@gmail.com
18/07/2011
- 14 -