Uso de display con pic 16f628

Hola, estoy realizando un contador de 0 a 99 con un display de dos dígitos en pic c compiler aquí, les dejo el código, mi pregunta es cómo puedo cambiar el tiempo de conteo ya que el que hice cuenta demasiado rápido


C:
#include <16f628.h>
#use DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT, NOWDT,PUT,NOLVP,NOBROWNOUT
#DEFINE LED1 PORTB,2
#DEFINE LED2 PORTB,1
#DEFINE LED3 PORTB,0
#BYTE PORTB=6
#BYTE PORTA=5
#define pulsante portb,5
#define pulsante2 portb,4
int a;
                                                //Frecuencia del oscilador
#use standard_io(b)                                                     //Manejo del puerto B
/****************************Variables Globales***********************************/
int conteo[10]= {0b01111111, 0b01000110, 0b11011011, 0b11001111,0b11100110
                  0b11101101, 0b11111101, 0b01000111, 0b11111111, 0b11101111};
int16 i;
int16 Unid;
int16 Dece;
/********************************Programa***************************************/
void main(){
      set_tris_b(0b00000000);          //todos los pines como salida
      output_b(0b00000000);            //apaga todos lod segmentos del display
   
do{
         for(i= 0; i<= 99; i++){             //Ciclo for establece el incremento del indice
                                                               //del arreglo
             Dece = i * 0.1;
             Unid = i - Dece * 10;
             
             output_a(0b00000001);
             output_b(conteo[Unid]);
             delay_ms(10);
           
             output_a(0b00000010);
             output_b(conteo[Dece]);
             delay_ms(10);
         
         }
    }while(TRUE);
}
 
Modificando el "delay_ms". Recuerda que está expresado en milisegundos, asi que si quieres 1 (un) segundo, tienes que poner 1000, si quieres 1/2 (medio) segundo, tienes que poner 500.

Todos te van a decir que no uses delays, pero si es eso simplemente, está bien.

Yo en tu caso O usaria el for, O usaria el while con un if para reiniciar el contador. Pero no los dos juntos
 
pero si cambio el delay se va notar un parpadeo entre los dos display. recuerda que estan multiplexados.
de todos modos gracias por tu colaboracion.
 
Podrías usar uno de los timer con interrupción por desborde y cuando esta ocurra, entonces aumentas el conteo.
Como el Timer es independiente del programa, no afectara el tiempo de la multiplexación del display.
 
Podrías usar uno de los timer con interrupción por desborde y cuando esta ocurra, entonces aumentas el conteo.
Como el Timer es independiente del programa, no afectara el tiempo de la multiplexación del display.
Depende de cómo estén hechos los delays lo normal es que si que afecte, cada vez que entre la interrupción, ese refresco no será normal. Que no se note es una cosa y que no sea igual otra.
 
La verdad mire por arriba el codigo. Mala mia.

Deberias poner en el while el multiplexado (lo que está dentro del for), y como dicen los compañeros, pon un Timer para el conteo.
 

Temas similares


Arriba