p4 ken
/
LED_Matrix_Japanese_Scroll
LT-5016M1を74HC595で制御します。文字スクロールなどの参考にどうぞ。
制作の過程はNotebookに書いています。
Diff: main.cpp
- Revision:
- 19:7ba73bd55ca5
- Parent:
- 16:cd36324730ad
- Child:
- 20:29dc4a331254
--- a/main.cpp Wed Sep 28 15:40:10 2016 +0000 +++ b/main.cpp Sun Oct 02 14:35:10 2016 +0000 @@ -9,7 +9,7 @@ Timer timer; // 経過時間デバッグ用 // 点灯パターン 手前赤、手前緑... -unsigned char pattern1[16][8] = // 緑「次は」 +unsigned char pattern1[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}, @@ -62,7 +62,7 @@ {21,0,6,0,68,0,36,0}, {5,0,8,0,66,0,68,0}, {4,0,16,0,65,0,68,0}}; - + char scan = 16; // 点灯中の行 int round = 0; // スキャンを何周したか int scroll = 0; // 左スクロールした量 @@ -75,7 +75,7 @@ int main() { SPI spi(PB_15, PB_14, PB_13); // SPIピンの指定 spi.format(8, 0); // 74595へ8ビットずつ送る - spi.frequency(96/16*1000*1000); // デフォルト1*1000*1000 + spi.frequency(96/16*1000*1000); // 74595へのクロック周波数 pc.attach(receive, Serial::RxIrq); timer.start(); // 経過時間デバッグ用 @@ -93,15 +93,18 @@ } // 表示パターン送り込み - for(int i=0; i<4*11; i++){ - spi.write(0b00000001 << round/800); - } - for(int i=0; i<8; i++){ - spi.write(0b00000000); + for(int i=0; i<4*12; i++){ + if(round < 5000) { + spi.write(pattern1[scan-1][8-1-i%16]); + } else if(round < 10000) { + spi.write(pattern2[scan-1][8-1-i%16]); + } else { + spi.write(pattern3[scan-1][8-1-i%16]); + } } // スクロール - if(round > 6400) { // スクロール速度 + if(round > 15000) { // スクロール速度 scroll++; // 1ドットスクロールする round = 0; // スキャン周回カウントリセット } @@ -119,7 +122,7 @@ while(timer.read_us()<0) { // 数字のぶんだけ暗くする wait_us(10); } - G = !BUTTON; // ボタン押すと消灯 + G = BUTTON; // ボタン押すと点灯 // ダイナミック点灯のパルス幅を決める while(timer.read_us()<100) { // 100*2500でゆっくり