Display de 7 segmentos con puertos DDRX Y PORTX

//realice esta programación para un display de 7 segmentos cátodo, pero quiero simplificar mas el programa con ciclo for o un array, apenas estoy empezando a usar puertos y no muy bien como realizarlo, gracias por su apoyo.

void setup()
{
DDRD |=(1<<PD6);
DDRB |= 0B111111;

}

void loop()
{

PORTB = B011111; //0
PORTD = B01000000;
delay(1000);

PORTB= B000011; //1
PORTD=B00000000;
delay(1000);

PORTB=B101101; //2
PORTD=B01000000;
delay(1000);

PORTB=B100111; //3
PORTD=B01000000;
delay(1000);

PORTB=B110011; //4
PORTD=B00000000;
delay(1000);

PORTB=B110110; //5
PORTD=B01000000;
delay(1000);

PORTB=B111110; //6
PORTD=B01000000;
delay(1000);

PORTB=B000011; //7
PORTD=B0100000;
delay(1000);

PORTB=B111111; //8
PORTD=B01000000;
delay(1000);

PORTB=B110111; //9
PORTD=B01000000;
delay(1000);

}

Moderador:
Por favor, lee las Normas del foro y edita tu código usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Por favor no respondas sin editar lo que te he solicitado.
Que tal esto como optimización?
Hay algo raro en tu código, todos los numeros usan

PORTD = B01000000;

menos el 1 y el 4. Es un error de tipeo o que?

byte numeros[] = {B011111, //0
                  B000011, //1
                  B101101, //2
                  B100111, //3
                  B110011, //4
                  B110110, //5
                  B111110, //6
                  B000011, //7
                  B111111, //8
                  B110111 //9
                };

void setup() {
    DDRD |=(1<<PD6);
    DDRB |= 0B111111;

}

void loop() {
    for (byte i= 0; i < 10; i++) {
        PORTB = numeros[i];
        PORTD = B01000000;
        delay(1000);
    }
}

gracias por el consejo y no es que el 1 y 4 no llevan activada la salida PD6 porque es el pin A del display.

Cuando se plantea un código asi, se acompaña con un esquema para que nosotros podamos entenderte.
Recuerda que no estamos ahi.

Modifico el código de @Surbyte

byte numeros[] = {B1011111, //0
                  B0000011, //1
                  B1101101, //2
                  B1100111, //3
                  B0110011, //4
                  B1110110, //5
                  B1111110, //6
                  B1000011, //7
                  B1111111, //8
                  B1110111 //9
                };

void setup() {
    DDRD |=(1<<PD6);
    DDRB |= B00111111;

}

void loop() {
    for (byte i= 0; i < 10; i++) {
        PORTB = (PORTB & B11000000) | (numeros[i] & B00111111);
        PORTD = (PORTD & B10111111) | (numeros[i] & B01000000);
        delay(1000);
    }
}

Queda rara la definición de los dígitos porque puse el segmento A delante (bit 6) para facilitar el enmascaramiento para enviarlo al puerto D, o sea, los segmentos quedan definidos en orden AGFEDCB.

Saludos

Buenas tardes me podrían apoyar en decirme como puedo realizar el contador de 0-99 estoy usando enmascaramientos, este es mi programa, solo hace el conteo de 0 a 9.

int digit[] = {
                  B01011111, //0
                  B00000011, //1
                  B01101101, //2
                  B01100111, //3
                  B00110011, //4
                  B01110110, //5
                  B01111110, //6
                  B01000011, //7
                  B01111111, //8
                  B01110111 //9
                };
void setup()
{
    DDRB |= B00111111; 
    DDRD |= 1<<PD6;
}
void loop()
{
    for (int i = 0; i < 10; i++)
    {
        PORTB |= digit[i] & DDRB; 
        PORTD |= digit[i] & DDRD; 
        PORTB &= digit[i] | ~DDRB;
        PORTD &= digit[i] | ~DDRD;
        delay(500);
    }
}Texto preformateado

Googlea que está lleno de ejemplos.

Saludos


Mi estimado @ alex1958 veo que no has entendido como funciona el foro, y es entendible al ser tus primeros posteos. No desesperes, nadie nació sabiendo pero por favor lee las normas de nuevo y si tienes dudas me preguntas x privado.
Un hilo si no se cierra sigue vigente y si abres algo similar se considera un doble posteo.
Estas advertido para no volver a hacerlo y he unido los hilos porque sigues con la misma idea original. Solo tiene el enfoque del contador que era obvio en tu primer consulta.
Sigue acá hasta agotar el tema.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.