Ir ao conteúdo

Posts recomendados

Postado

Alguém poderia me ajudar.Gostaria que o display fizesse uma contagem de 0 a 99 sem ficar piscando.

Eu fiz do seguinte modo:

 

#include<16F877a.h>
#use delay(clock=4000000)
#FUSES NOWDT,PUT,BROWNOUT,NOLVP

 
byte const digito[] = { 0b10111111, 
                        0b10000110, 
                        0b11011011, 
                        0b11001111, 
                        0b11100110, 
                        0b11101101, 
                        0b11111101, 
                        0b10000111, 
                        0b11111111, 
                        0b11100111};
void main() 
{
   int contador;  
     while (true)   
   {
    for (contador = 0; contador<100; contador++)  
      {
      output_b (digito[contador/10]);
     output_high(pin_c2);
     delay_ms(30);
     output_low(pin_c2);
    
      output_b (digito[contador%10]); 
      output_high(pin_c1);
     delay_ms(30);
     output_low(pin_c1);
 
 }
     
      }
}

 

MAS ELE SEMPRE PISCA,SE DIMINUIR O DELAY ELE PARA DE DISCAR MAS CONTA MUITO RÁPIDO,

GOSTARIA QUE O DISPLAY NÃO PISCA-SE E A CONTAGEM FOSSE LENTA. ALGUÉM PODE ME AJUDAR.

 

 

Sem título.png

  • Membro VIP
Postado

Eis um bom momento pra você entender o conceito de interrupção por timer. Ela é como se fosse um coprocessador parando o mc de vez em quando pra tratar de outros assuntos.

 

Tipo assim... você incrementa sua variável no loop principal e a interrupt se vira pra expor no display. Não uso (e não gosto) do ccs mas é algo +- assim

 

Na interrupt...
 

static bit b;
void interrupt timer0() //p.ex.
{
if (b)
{

 output_b (digito[contador/10]);
     output_high(pin_c2);
     output_low(pin_c2);
}
 else  
 {
    output_b (digito[contador%10]); 
      output_high(pin_c1);
     output_low(pin_c1);
}
b^⁼1; //na próxima, acione o outro display
}

e no loop...
 

for (contador = 0; contador<100; contador++)  
      {
     delay_ms(60);

//pode fazer otras cositas mas como p.ex. ler teclado, acionar relés e etc
      }

 

Por favor, não dê ctrl-c ctrl-v pois NÃO VAI DAR CERTO, certo? É só pra você entender o conceito

 

Como são só 2 displays, penso que uma interrupção de 50Hz deve dar um bom resultado. você deve ver no help do seu compilador como programar o hw do mc pra isso. Se puder/quiser, dê uma olhadela no datasheet do mc. Custa pouco e pode aumentar seus horizontes

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...