LT-5016M1を74HC595で制御します。文字スクロールなどの参考にどうぞ。

Dependencies:   mbed

制作の過程はNotebookに書いています。

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; // ボタン押すと点灯