p4 ken
/
LED_Matrix_Japanese_Scroll
LT-5016M1を74HC595で制御します。文字スクロールなどの参考にどうぞ。
制作の過程はNotebookに書いています。
Diff: main.cpp
- Revision:
- 9:4efad95ffa53
- Parent:
- 8:496a1ba31a68
- Child:
- 10:68078d989f4e
--- a/main.cpp Sat Sep 24 16:44:19 2016 +0000 +++ b/main.cpp Sat Sep 24 18:08:00 2016 +0000 @@ -7,10 +7,23 @@ DigitalIn BUTTON(USER_BUTTON); Serial pc(USBTX, USBRX); Timer timer; // 経過時間デバッグ用 -unsigned char pattern[3][4] = // 奥緑右~左、奥赤右=左・・・ -{{0b11111100, 0b11111111, 0b00011111, 0b11100000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000}}; +unsigned char pattern[16][8] = // 手前赤、手前緑・・・ +{{0,128,0,0,0,0,0,0}, + {0,129,0,0,0,0,0,6}, + {0,130,0,0,0,0,0,4}, + {0,68,0,32,0,4,0,4}, + {0,192,0,127,0,36,0,124}, + {0,72,0,34,0,196,0,7}, + {0,40,0,18,0,2,0,4}, + {0,36,0,18,0,2,0,4}, + {0,4,0,2,0,2,0,4}, + {0,4,0,5,0,2,0,4}, + {0,3,0,5,0,2,0,4}, + {0,130,0,8,0,202,0,15}, + {0,130,0,8,0,42,0,52}, + {0,66,0,16,0,68,0,68}, + {0,48,0,32,0,132,0,7}, + {0,12,0,64,0,0,0,0}}; char scan = 16; // 点灯中の行 int round = 0; // スキャンを何周したか int scroll = 0; // 左スクロールした量 @@ -29,18 +42,23 @@ while(1) { timer.reset(); - scan++; - if(scan == 17) { + + // 行選択 + scan++; // 一行進む + if(scan == 17) { // 16行目の次 SER = 0; // 点灯 - scan = 1; - round++; - } else if(scan == 2) { + scan = 1; // 1行目に戻る + round++; // スキャンが1周した + } else if(scan == 2) { // 2行目 SER = 1; // 消灯 } - for(int i=0; i<2*11; i++){ - spi.write(0b00000001 << scroll%8); - spi.write(0b00000010 << scroll%8); + + // 表示パターン送り込み + for(int i=0; i<8; i++){ + spi.write(pattern[scan-1][8-1-i]); } + + // スクロール if(round > 200) { // スクロール速度 scroll++; // 1ドットスクロールする round = 0; // スキャン周回カウントリセット @@ -56,7 +74,7 @@ CLK = 1; // ここまでの処理時間が長いほど明るくなる - while(timer.read_us()<100) { // 数字のぶんだけ暗くする + while(timer.read_us()<0) { // 数字のぶんだけ暗くする wait_us(10); } G = BUTTON; // ボタン押すと点灯