Contador con 74HC595 + Display 7 Segmentos [Solucionado]

Hola,

Tengo el código siguiente que no logro cargar por arrojarme errores al verificarse.

Espero que alguien pueda revisarlo y darme la indicación para repararlo.

Muchas gracias.

int dataPIN = 8;
int latchPIN = 11;
int clockPIN = 12;


void setup() {
  // initialize digital pin as an output.
  pinMode(dataPIN, OUTPUT);
  pinMode(latchPIN, OUTPUT);
  pinMode(clockPIN, OUTPUT);
}
  void CERO(){
    shiftOut(dataPIN, clockPIN, MSBFIRST; B00011000);
  }
  void UNO(){
    shiftOut(dataPIN, clockPIN, MSBFIRST; B01111011);
  }
  void DOS(){
    shiftOut(dataPIN, clockPIN, MSBFIRST; B00101100);
  }
  void TRES(){
    shiftOut(dataPIN, clockPIN, MSBFIRST; B00101001);
  }
  void CUATRO(){
    shiftOut(dataPIN, clockPIN, MSBFIRST; B01001011); 
  }
  void CINCO(){
    shiftOut(dataPIN, clockPIN, MSBFIRST; B10001001); 
  }
  void SEIS(){
    shiftOut(dataPIN, clockPIN, MSBFIRST; B10001000); 
  }
  void SIETE(){
    shiftOut(dataPIN, clockPIN, MSBFIRST; B00111011); 
  }
  void OCHO(){
    shiftOut(dataPIN, clockPIN, MSBFIRST; B00001000); 
  }
  void NUEVE(){
    shiftOut(dataPIN, clockPIN, MSBFIRST; B00001001); 
  }  
  void MOSTRAR_NUMERO(int x){
    switch(x){
      case 0:
      CERO();
      break;
      case 1:
      UNO();
      break;
      case 2:
      DOS();
      break;
      case 3:
      TRES();
      break;
      case 4:
      CUATRO();
      break;
      case 5:
      CINCO();
      break;
      case 6:
      SEIS();
      break;
      case 7:
      SIETE();
      break;
      case 8:
      OCHO();
      break;
      case 9:
      NUEVE();
      break;
    }}

// the loop function runs over and over again forever
void loop() {
  for (int x=0; x<1000; x++){
    digitalWrite (latchPIN, LOW);
    MOSTRAR_NUMERO(X%10);
    MOSTRAR_NUMERO((X/10)%10);
    MOSTRAR_NUMERO(X/100);
      digitalWrite (latchPIN, HIGH);
  }

Tienes errores por desprolijidad. Usas X en lugar de x en el

 for (int x=0; x<1000; x++){
    digitalWrite (latchPIN, LOW)
     MOSTRAR_NUMERO(X%10);

pones entre setup y loop una serie de rutinas que deben ir o antes del setup o despues del loop.

Prueba esta versión mas simple.

int dataPIN = 8;
int latchPIN = 11;
int clockPIN = 12;

byte numero[] = {B00011000, B01111011, B00101100, B00101001, B01001011,
                 B10001001, B10001000, B00111011, B00001000, B00001001};

void mostrar_numero(byte x) {
    shiftOut(dataPIN, clockPIN, MSBFIRST, numero[x]);
}  

void setup() {
  // initialize digital pin as an output.
  pinMode(dataPIN, OUTPUT);
  pinMode(latchPIN, OUTPUT);
  pinMode(clockPIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  for (int x=0; x<1000; x++){
      digitalWrite (latchPIN, LOW);
      mostrar_numero(x%10);
      mostrar_numero((x/10)%10);
      mostrar_numero(x/100);
      digitalWrite (latchPIN, HIGH);
  }
}

Hola surbye, agradezco tu respuesta.

Probé con la versión que me envías y de los dos displays de un dígito, solo el primero (el de decenas) corre, pero corre a una velocidad que no se ven los números. El dígito de unidades se mantiene encendido sin correr.

Son dos displays de un dígito, cada uno conectado a un 74HC595.

Adjunto video.

Espero tu ayuda. Gracias

aquí va el video

video.mpg (1.87 MB)

¿Tal vez esté ocurriendo que se están mostrando los nímeros uno tras otro sin hacer ninguna pausa, tan rápidamente que parece que las unidades muestra los siete segmentos siempre encendido y el de las decenas algunos parecen "parpadear"?

Yo, sólo para probar, pondría un delay(500); justo después del digitalWrite (latchPIN, HIGH);

PERFECTO!!! Gracias. Con un delay(100); corre exactamente el tiempo en segundos.

Gracias totales!!!

:slight_smile: