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; }