/****************************/ /* LEDの点灯 */ /* coded by Y.Suganuma */ /****************************/ #include #include /***************************/ /* xミリ秒経過するのを待つ */ /***************************/ int sleep(unsigned long x) { clock_t s = clock(); clock_t c; int sw = 1; do { if ((c = clock()) == (clock_t)-1) { /* エラー */ sw = 0; break; } } while (1000UL * (c - s) / CLOCKS_PER_SEC <= x); return sw; } /*************************/ /* 入出力領域への入出力 */ /* str1 : コピー先 */ /* str2 : コピー元 */ /* n : コピー文字数 */ /* sw : 1 : 入力 */ /* 2 : 出力 */ /*************************/ void * memcpy(void *str1, void *str2, size_t n, int sw) { int i1, k; unsigned char *c1 = (unsigned char *)str1, *c2 = (unsigned char *)str2; FILE *in, *out; // 入力 if (sw == 1) { in = fopen("LED", "r"); for (i1 = 0; i1 < (int)n; i1++) { fscanf(in, "%d", &k); c2[i1] = (unsigned char)k; } for (i1 = 0; i1 < (int)n; i1++) c1[i1] = c2[i1]; fclose(in); } // 出力 else { for (i1 = 0; i1 < (int)n; i1++) c1[i1] = c2[i1]; out = fopen("LED", "w"); k = (int)c1[0]; fprintf(out, "%d", k); for (i1 = 1; i1 < (int)n; i1++) { k = (int)c1[i1]; fprintf(out, " %d", k); } fprintf(out, "\n"); fclose(out); } return str1; } /********/ /* main */ /********/ int main(void) { int k = 0; unsigned char state[2], io[2], next = 128; while (k < 20) { memcpy(state, io, 2, 1); if (state[0] > 0) { state[0] = 0; state[1] = next; memcpy(io, state, 2, 2); next >>= 1; if (next == 0) next = 128; k++; } sleep(500); } return 0; }