POV

配線のし易さを優先し、端子の並びに合わせてバイトデータのほうを並べ替える。

#include <avr/io.h>
#include <util/delay.h>

// 1バイトデータの各ビットを任意の順番に並べ替えるための函数
uint8_t byte2pos(uint8_t oneByte, uint8_t *pos){
    uint8_t mask   = 128; // 0b 1000 0000;
    uint8_t sorted = 0;
    for(int i=0; i<8; i++){
        if(oneByte & mask){
            sorted |= (1 << pos[i]);
        }
        mask >>= 1;
    }
    return sorted;
}

uint8_t Data[] = {0b00001110,
                  0b00011000,
                  0b10111101,
                  0b01110110,
                  0b00111100,
                  0b00111100,
                  0b00111100,
                  0b01110110,
                  0b10111101,
                  0b00011000,
                  0b00001110};

uint8_t pos[] = {PB5,PB4,PB3,PB2,PB1,PB6,PB7,PB0};

int main(){
    for(int i=0; i<sizeof(Data); i++){
        Data[i] = byte2pos(Data[i], pos);
    }
    
    DDRB = 0xff;
    while(1){
        for(int i=0; i<sizeof(Data); i++){
            PORTB = Data[i];
            _delay_ms(5);
        }

        PORTB = 0;
        _delay_ms(20);
    }
    return 0;
}

f:id:ti-nspire:20190205054327p:plain:h200 f:id:ti-nspire:20190205054339j:plain:h200

f:id:ti-nspire:20190205054428j:plain:h150f:id:ti-nspire:20190205054456j:plain:h150f:id:ti-nspire:20190205054525j:plain:h150f:id:ti-nspire:20190205054556j:plain:h150f:id:ti-nspire:20190205060006j:plain:h150