Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial Display Multiplexado Com Pic16f628a 133
Tutorial Display Multiplexado Com Pic16f628a 133
Introduo
-2-
1. MOTIVAO
2. CIRCUITO
-3-
3. PROGRAMA
A essncia deste projeto seu programa, este deve ser provido com a lgica de
funcionamento a seguir: para exibio dos trs dgitos cada display deve ser acionado
individualmente e em seqncia, exemplificando: para exibir o numero 456 deve ser
acionado o primeiro display contendo o numero quatro, aps 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 possvel, isso
faz com que haja sensao de que todos os displays esto acesos ao mesmo tempo.
O acionamento individual de cada dgito 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 nmero e coloca em
conduo seu respectivo transistor, isto deve ser feito tambm com os outros dois
displays.
Aps testes foi percebido que deveria ser desligado o nmero em exibio antes
de passar a exibir o prximo algarismo no display seguinte, pois no se obtinha um
grande contraste de cada dgito dificultando a visualizao de todo o nmero.
Qualquer e apenas numero inteiros de no mximo trs algarismos podem ser
exibidos com o programa a seguir, que ser desenvolvido em partes para ento serem
agrupadas.
Queremos encontrar o valor absoluto de todos os algarismos para ento em
conjunto formar o nmero por completo.
Ao dividir um numero dentro do conjunto dos nmeros inteiros por dez o resto da
diviso ser o valor absoluto do seu algarismo menos significativo, utilizando esta
tcnica elaboramos seguinte funo:
-4-
-5-
ou seja, deve se ligar o primeiro display, encontrar com lgica matemtica o algarismo
da unidade, depois atravs da execuo do comando switch comparar o valor da
varivel uni e exibir este nmero no display logo aps zerar, ou seja no exibir numero
algum e desligar o display.
-6-
Programa Final
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 prprias para circuitos.
- 10 -
- 11 -
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 lgica do tutorial pode ser aplicada para construir outro projeto com mais
displays.
- 12 -
Grato,
Luigi Eduardo Sica Nery
- 13 -
18/07/2011
- 14 -