/* ハードソフトの作り方、二次元配列の渡し方 */ #include #include #include /* ■ ■ ■■■ ■■■ ■■■ ■■■ ■   ■ ■ ■ ■   ■ ■ ■ ■ ■ ■ ■ ■ ■  ■  ■■■ ■■■ ■■■ ■ ■ ■ ■ ■ ■  ■   ■■  ■■  ■ ■ ■■ ■■ ■ ■■■ ■ ■ ■ ■ ■■■ ■   ■ ■■■  ■  ■■■ ■■■ ■■■ ■ ■ ■ ■ ■ ■ ■   ■ ■ ■■■ ■■■ ■■■ ■■■ ■■■ ■   ■ ■ ■   ■   ■■ ■   ■ ■ ■   ■■■ ■ ■ */ #define SHORT_MEMORY 4 #define YELLOW_ROW 5 /* 行 */ #define YELLOW_COL 4 /* 列 */ const unsigned char yellow[][SHORT_MEMORY] = { { 0xae , 0xee , 0xe8 , 0x80}, /* ■■■ 00001110 */ { 0xa8 , 0xaa , 0xaa , 0x80}, /* ■ 00001000 */ { 0x4e , 0xee , 0xaa , 0x80}, /* ■■■ 00001110 */ { 0x48 , 0xcc , 0xad , 0x80}, /* ■ 00001000 */ { 0x4e , 0xaa , 0xe8 , 0x80} /* ■■■ 00001110 */ }; #define PAPER_ROW 5 /* 行 */ #define PAPER_COL 3 /* 列 */ const unsigned char paper[][SHORT_MEMORY] = { { 0x0e , 0x4e , 0xee }, /* ■■■ 00001110 */ { 0x0a , 0xaa , 0x8a }, /* ■ 00001000 */ { 0x0e , 0xee , 0xee }, /* ■■■ 00001110 */ { 0x08 , 0xa8 , 0x8c }, /* ■ 00001000 */ { 0x08 , 0xa8 , 0xea } /* ■■■ 00001110 */ }; int prt_tbl(const unsigned char led[][SHORT_MEMORY], int row , int col); /************ * * * メイン * * * *************/ main(){ printf("YELLOW PAPER と表示します。\n"); getch(); prt_tbl( yellow , YELLOW_ROW , YELLOW_COL); printf("\n"); prt_tbl( paper , PAPER_ROW , PAPER_COL); getch(); } /********************************************** * 16進の2進変換、真部分の点灯表示をする関数 * * led 16進値の二次元配列データテーブル * * row 二次元配列データテーブルの1次目寸法個数 * * col 二次元配列データテーブルの2次目寸法個数 * * 戻り:正=0 エラー=-1 * * data 07/09/01 * ***********************************************/ int prt_tbl(const unsigned char led[][SHORT_MEMORY], int row , int col){ /* 宣言 */ int one; /* 二次元配列の何行目 */ int two; /* 配列二次目の何番目 */ int decide; /* 半分にしていく数 */ int turn; /* 割った数のカウント、表示する回数 */ int stock[8]; /* 2で割った余りの格納先 */ int loop; /* 表示回数のカウント */ /* 初期化 */ one = 0; two = 0; decide = 0; turn = 0; memset(&stock,0x00,sizeof(int)*8); loop = 0; /* 行列の行(2次元配列の1次目)が終わるまで */ for(one = 0; one < row; one++){ /* 行列の列(2次元配列の2次目)が終わるまで */ for(two = 0; two < col; two++){ /* 半分にする値を保持(2進数変換の処理)*/ decide = led[one][two]; /* 割る数が0になるまで */ for(turn = 0; decide != 0; turn++){ /* 半分にしたときの余りをストックに順挿入 */ stock[turn] = decide % 2; decide /= 2; } /* 7回までいかなかった場合は、上部数に0挿入 */ while(turn <= 7){ stock[turn] = 0; turn++; } turn--; /* ストックの逆方向から表示 */ for(loop = 0; loop <= turn; loop++){ if(stock[turn-loop] == 1){ printf("■"); } else if(stock[turn-loop] == 0){ printf(" "); } else{ printf("bitnumber not 0 or 1 error!! %d\n",stock[turn-loop]); return -1; } } } printf("\n"); } return 0; }