8x8、0度、90度、180度、270度、回転(電光表示板用)(ビット操作


いろいろ注意
----

- arduinoでの予定は、未定


プログラム
----

オンラインコンパイラpaiza


```c++


#include <iostream>
using namespace std;

#define b_put(aa) for(int ii=8;ii!=0;ii--){if(aa & 0x80){printf("#");}else{printf(" ");}aa=aa<<1;}
#define bit8_put(bb) for(int jj=0;jj<8;jj++){b_put(bb[jj]);printf("\n");}

//8ビットの並び順を逆転させるデータセット(テーブル)
unsigned char rev[] = {
0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0,
0x08,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8,0x18,0x98,0x58,0xd8,0x38,0xb8,0x78,0xf8,
0x04,0x84,0x44,0xc4,0x24,0xa4,0x64,0xe4,0x14,0x94,0x54,0xd4,0x34,0xb4,0x74,0xf4,
0x0c,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec,0x1c,0x9c,0x5c,0xdc,0x3c,0xbc,0x7c,0xfc,
0x02,0x82,0x42,0xc2,0x22,0xa2,0x62,0xe2,0x12,0x92,0x52,0xd2,0x32,0xb2,0x72,0xf2,
0x0a,0x8a,0x4a,0xca,0x2a,0xaa,0x6a,0xea,0x1a,0x9a,0x5a,0xda,0x3a,0xba,0x7a,0xfa,
0x06,0x86,0x46,0xc6,0x26,0xa6,0x66,0xe6,0x16,0x96,0x56,0xd6,0x36,0xb6,0x76,0xf6,
0x0e,0x8e,0x4e,0xce,0x2e,0xae,0x6e,0xee,0x1e,0x9e,0x5e,0xde,0x3e,0xbe,0x7e,0xfe,
0x01,0x81,0x41,0xc1,0x21,0xa1,0x61,0xe1,0x11,0x91,0x51,0xd1,0x31,0xb1,0x71,0xf1,
0x09,0x89,0x49,0xc9,0x29,0xa9,0x69,0xe9,0x19,0x99,0x59,0xd9,0x39,0xb9,0x79,0xf9,
0x05,0x85,0x45,0xc5,0x25,0xa5,0x65,0xe5,0x15,0x95,0x55,0xd5,0x35,0xb5,0x75,0xf5,
0x0d,0x8d,0x4d,0xcd,0x2d,0xad,0x6d,0xed,0x1d,0x9d,0x5d,0xdd,0x3d,0xbd,0x7d,0xfd,
0x03,0x83,0x43,0xc3,0x23,0xa3,0x63,0xe3,0x13,0x93,0x53,0xd3,0x33,0xb3,0x73,0xf3,
0x0b,0x8b,0x4b,0xcb,0x2b,0xab,0x6b,0xeb,0x1b,0x9b,0x5b,0xdb,0x3b,0xbb,0x7b,0xfb,
0x07,0x87,0x47,0xc7,0x27,0xa7,0x67,0xe7,0x17,0x97,0x57,0xd7,0x37,0xb7,0x77,0xf7,
0x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef,0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f,0xff
};

void font180(unsigned char *font){

    int c;
    c = font[0];
    font[0] = rev[font[7]];
    font[7] = rev[c];

    c = font[1];
    font[1] = rev[font[6]];
    font[6] = rev[c];

    c = font[2];
    font[2] = rev[font[5]];
    font[5] = rev[c];

    c = font[3];
    font[3] = rev[font[4]];
    font[4] = rev[c];

}


void font90(unsigned char *font){

    int a = font[0];

    int a0 = (a & 1); a = a >> 1;  
    int a1 = (a & 1); a = a >> 1;
    int a2 = (a & 1); a = a >> 1;
    int a3 = (a & 1); a = a >> 1;

    int a4 = (a & 1); a = a >> 1;
    int a5 = (a & 1); a = a >> 1;
    int a6 = (a & 1); a = a >> 1;
    int a7 = (a & 1);

    
    for(int i=1;i<8;i++){

        //処理

        a7 = a7 << 1;
        a6 = a6 << 1;
        a5 = a5 << 1;
        a4 = a4 << 1;

        a3 = a3 << 1;
        a2 = a2 << 1;
        a1 = a1 << 1;
        a0 = a0 << 1;

        a = font[i];

        a0 = a0|(a & 1); a = a >> 1;  
        a1 = a1|(a & 1); a = a >> 1;
        a2 = a2|(a & 1); a = a >> 1;
        a3 = a3|(a & 1); a = a >> 1;

        a4 = a4|(a & 1); a = a >> 1;
        a5 = a5|(a & 1); a = a >> 1;
        a6 = a6|(a & 1); a = a >> 1;
        a7 = a7|(a & 1);

    }//for i

    font[0] = a0;
    font[1] = a1;
    font[2] = a2;
    font[3] = a3;

    font[4] = a4;
    font[5] = a5;
    font[6] = a6;
    font[7] = a7;

}//font90


void font360(unsigned char *font,int l){

   l = l & 0b00000011;

   if(l == 1 | l == 3) {

      font90(font);

   }//if

   if(l == 2 | l == 3) {

      font180(font);

   }//if

}

int main(void){
    // Your code here!

    unsigned char font[] = {
        0b00100000, //  #     
        0b01111100, // #####  
        0b00100000, //  #     
        0b01111100, // #####  
        0b10101010, //# # # # 
        0b10110010, //# ##  # 
        0b01100100, // ##  #  
        0b00000000  //
    };     
    
    unsigned char fontO[8];
    
    printf("\n[0]\n");
    
    fontO[0]=font[0];fontO[1]=font[1];
    fontO[2]=font[2];fontO[3]=font[3];
    fontO[4]=font[4];fontO[5]=font[5];
    fontO[6]=font[6];fontO[7]=font[7];
    
    font360(fontO,0);
    
    bit8_put(fontO);
    

    printf("\n[1]\n");
    
    fontO[0]=font[0];fontO[1]=font[1];
    fontO[2]=font[2];fontO[3]=font[3];
    fontO[4]=font[4];fontO[5]=font[5];
    fontO[6]=font[6];fontO[7]=font[7];
    
    font360(fontO,1);
    
    bit8_put(fontO);

    printf("\n[2]\n");
    
    fontO[0]=font[0];fontO[1]=font[1];
    fontO[2]=font[2];fontO[3]=font[3];
    fontO[4]=font[4];fontO[5]=font[5];
    fontO[6]=font[6];fontO[7]=font[7];
    
    font360(fontO,2);
    
    bit8_put(fontO);


    printf("\n[3]\n");
    
    fontO[0]=font[0];fontO[1]=font[1];
    fontO[2]=font[2];fontO[3]=font[3];
    fontO[4]=font[4];fontO[5]=font[5];
    fontO[6]=font[6];fontO[7]=font[7];
    
    font360(fontO,3);
    
    bit8_put(fontO);

}


```

```


[0]
  #     
 #####  
  #     
 #####  
# # # # 
# ##  # 
 ##  #  
        

[1]
        
    ##  
 # #  # 
 # ##   
 # # #  
####### 
 # #  # 
    ##  

[2]
        
  #  ## 
 #  ## #
 # # # #
  ##### 
     #  
  ##### 
     #  

[3]
  ##    
 #  # # 
 #######
  # # # 
   ## # 
 #  # # 
  ##    
       


```