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.