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

Dependencies:   mbed

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

Committer:
p4ken
Date:
Sat Sep 24 18:08:00 2016 +0000
Revision:
9:4efad95ffa53
Parent:
8:496a1ba31a68
Child:
10:68078d989f4e
??????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
p4ken 0:679fb5e8a0b4 1 #include "mbed.h"
p4ken 0:679fb5e8a0b4 2
p4ken 1:9f6c6dcdd8d7 3 DigitalOut RCK(PB_12);// 74HC595
p4ken 1:9f6c6dcdd8d7 4 DigitalOut G(PB_1); // 74HC595
p4ken 1:9f6c6dcdd8d7 5 DigitalOut SER(PC_6); // 74HC164
p4ken 1:9f6c6dcdd8d7 6 DigitalOut CLK(PC_5); // 74HC164
p4ken 2:75c7836a6ff4 7 DigitalIn BUTTON(USER_BUTTON);
p4ken 2:75c7836a6ff4 8 Serial pc(USBTX, USBRX);
p4ken 2:75c7836a6ff4 9 Timer timer; // 経過時間デバッグ用
p4ken 9:4efad95ffa53 10 unsigned char pattern[16][8] = // 手前赤、手前緑・・・
p4ken 9:4efad95ffa53 11 {{0,128,0,0,0,0,0,0},
p4ken 9:4efad95ffa53 12 {0,129,0,0,0,0,0,6},
p4ken 9:4efad95ffa53 13 {0,130,0,0,0,0,0,4},
p4ken 9:4efad95ffa53 14 {0,68,0,32,0,4,0,4},
p4ken 9:4efad95ffa53 15 {0,192,0,127,0,36,0,124},
p4ken 9:4efad95ffa53 16 {0,72,0,34,0,196,0,7},
p4ken 9:4efad95ffa53 17 {0,40,0,18,0,2,0,4},
p4ken 9:4efad95ffa53 18 {0,36,0,18,0,2,0,4},
p4ken 9:4efad95ffa53 19 {0,4,0,2,0,2,0,4},
p4ken 9:4efad95ffa53 20 {0,4,0,5,0,2,0,4},
p4ken 9:4efad95ffa53 21 {0,3,0,5,0,2,0,4},
p4ken 9:4efad95ffa53 22 {0,130,0,8,0,202,0,15},
p4ken 9:4efad95ffa53 23 {0,130,0,8,0,42,0,52},
p4ken 9:4efad95ffa53 24 {0,66,0,16,0,68,0,68},
p4ken 9:4efad95ffa53 25 {0,48,0,32,0,132,0,7},
p4ken 9:4efad95ffa53 26 {0,12,0,64,0,0,0,0}};
p4ken 1:9f6c6dcdd8d7 27 char scan = 16; // 点灯中の行
p4ken 6:f72e87d03ab0 28 int round = 0; // スキャンを何周したか
p4ken 3:68075c4a9ab4 29 int scroll = 0; // 左スクロールした量
p4ken 0:679fb5e8a0b4 30
p4ken 2:75c7836a6ff4 31 void receive() {
p4ken 2:75c7836a6ff4 32 if(pc.getc() == 0b00000001) pc.printf("received!\r\n");
p4ken 2:75c7836a6ff4 33 // pc.putc(pc.getc() + 1); // echo
p4ken 2:75c7836a6ff4 34 }
p4ken 2:75c7836a6ff4 35
p4ken 0:679fb5e8a0b4 36 int main() {
p4ken 1:9f6c6dcdd8d7 37 SPI spi(PB_15, PB_14, PB_13);
p4ken 1:9f6c6dcdd8d7 38 spi.format(8, 0);
p4ken 7:d9681a6487d4 39 spi.frequency(100000000);
p4ken 2:75c7836a6ff4 40 pc.attach(receive, Serial::RxIrq);
p4ken 2:75c7836a6ff4 41 timer.start(); // 経過時間デバッグ用
p4ken 0:679fb5e8a0b4 42
p4ken 0:679fb5e8a0b4 43 while(1) {
p4ken 2:75c7836a6ff4 44 timer.reset();
p4ken 9:4efad95ffa53 45
p4ken 9:4efad95ffa53 46 // 行選択
p4ken 9:4efad95ffa53 47 scan++; // 一行進む
p4ken 9:4efad95ffa53 48 if(scan == 17) { // 16行目の次
p4ken 1:9f6c6dcdd8d7 49 SER = 0; // 点灯
p4ken 9:4efad95ffa53 50 scan = 1; // 1行目に戻る
p4ken 9:4efad95ffa53 51 round++; // スキャンが1周した
p4ken 9:4efad95ffa53 52 } else if(scan == 2) { // 2行目
p4ken 1:9f6c6dcdd8d7 53 SER = 1; // 消灯
p4ken 0:679fb5e8a0b4 54 }
p4ken 9:4efad95ffa53 55
p4ken 9:4efad95ffa53 56 // 表示パターン送り込み
p4ken 9:4efad95ffa53 57 for(int i=0; i<8; i++){
p4ken 9:4efad95ffa53 58 spi.write(pattern[scan-1][8-1-i]);
p4ken 6:f72e87d03ab0 59 }
p4ken 9:4efad95ffa53 60
p4ken 9:4efad95ffa53 61 // スクロール
p4ken 6:f72e87d03ab0 62 if(round > 200) { // スクロール速度
p4ken 6:f72e87d03ab0 63 scroll++; // 1ドットスクロールする
p4ken 6:f72e87d03ab0 64 round = 0; // スキャン周回カウントリセット
p4ken 6:f72e87d03ab0 65 }
p4ken 7:d9681a6487d4 66 if(scroll > 32) { // スクロール幅
p4ken 6:f72e87d03ab0 67 scroll = 0; // スクロール数リセット
p4ken 5:95590a89eb9f 68 }
p4ken 1:9f6c6dcdd8d7 69
p4ken 0:679fb5e8a0b4 70 RCK = 0;
p4ken 1:9f6c6dcdd8d7 71 CLK = 0;
p4ken 1:9f6c6dcdd8d7 72 G = 1; // 消灯
p4ken 0:679fb5e8a0b4 73 RCK = 1;
p4ken 1:9f6c6dcdd8d7 74 CLK = 1;
p4ken 8:496a1ba31a68 75
p4ken 8:496a1ba31a68 76 // ここまでの処理時間が長いほど明るくなる
p4ken 9:4efad95ffa53 77 while(timer.read_us()<0) { // 数字のぶんだけ暗くする
p4ken 8:496a1ba31a68 78 wait_us(10);
p4ken 8:496a1ba31a68 79 }
p4ken 4:cd1ed9d15ef4 80 G = BUTTON; // ボタン押すと点灯
p4ken 8:496a1ba31a68 81
p4ken 8:496a1ba31a68 82 // ダイナミック点灯のパルス幅を決める
p4ken 5:95590a89eb9f 83 while(timer.read_us()<100) { // 100*2500でゆっくり
p4ken 2:75c7836a6ff4 84 wait_us(10);
p4ken 2:75c7836a6ff4 85 }
p4ken 2:75c7836a6ff4 86 // pc.printf("%f\r\n", timer.read());
p4ken 0:679fb5e8a0b4 87 }
p4ken 0:679fb5e8a0b4 88 }