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

Dependencies:   mbed

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

Committer:
p4ken
Date:
Mon Oct 24 04:03:32 2016 +0000
Revision:
22:bc786f860cd0
Parent:
21:bbb751c5d846
????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
p4ken 0:679fb5e8a0b4 1 #include "mbed.h"
p4ken 0:679fb5e8a0b4 2
p4ken 13:83c703e6e843 3 DigitalOut RCK(PB_12);// 74595
p4ken 13:83c703e6e843 4 DigitalOut G(PB_1); // 74595
p4ken 13:83c703e6e843 5 DigitalOut SER(PC_6); // 74164
p4ken 13:83c703e6e843 6 DigitalOut CLK(PC_5); // 74164
p4ken 21:bbb751c5d846 7 DigitalIn BUTTON(USER_BUTTON); // 点灯・消灯ボタン
p4ken 21:bbb751c5d846 8 Serial pc(USBTX, USBRX); // USBシリアル通信
p4ken 21:bbb751c5d846 9 Timer timer; // 経過時間のカウンター
p4ken 16:cd36324730ad 10
p4ken 16:cd36324730ad 11 // 点灯パターン 手前赤、手前緑...
p4ken 19:7ba73bd55ca5 12 unsigned char pattern1[16][8] = // 手前赤、手前緑... // 緑「次は」
p4ken 9:4efad95ffa53 13 {{0,128,0,0,0,0,0,0},
p4ken 9:4efad95ffa53 14 {0,129,0,0,0,0,0,6},
p4ken 9:4efad95ffa53 15 {0,130,0,0,0,0,0,4},
p4ken 9:4efad95ffa53 16 {0,68,0,32,0,4,0,4},
p4ken 9:4efad95ffa53 17 {0,192,0,127,0,36,0,124},
p4ken 9:4efad95ffa53 18 {0,72,0,34,0,196,0,7},
p4ken 9:4efad95ffa53 19 {0,40,0,18,0,2,0,4},
p4ken 9:4efad95ffa53 20 {0,36,0,18,0,2,0,4},
p4ken 9:4efad95ffa53 21 {0,4,0,2,0,2,0,4},
p4ken 9:4efad95ffa53 22 {0,4,0,5,0,2,0,4},
p4ken 9:4efad95ffa53 23 {0,3,0,5,0,2,0,4},
p4ken 9:4efad95ffa53 24 {0,130,0,8,0,202,0,15},
p4ken 9:4efad95ffa53 25 {0,130,0,8,0,42,0,52},
p4ken 9:4efad95ffa53 26 {0,66,0,16,0,68,0,68},
p4ken 9:4efad95ffa53 27 {0,48,0,32,0,132,0,7},
p4ken 9:4efad95ffa53 28 {0,12,0,64,0,0,0,0}};
p4ken 10:68078d989f4e 29
p4ken 10:68078d989f4e 30 unsigned char pattern2[16][8] = // 橙「横浜」
p4ken 10:68078d989f4e 31 {{8,8,9,9,2,2,24,24},
p4ken 10:68078d989f4e 32 {8,8,73,73,4,4,7,7},
p4ken 10:68078d989f4e 33 {200,200,127,127,200,200,0,0},
p4ken 10:68078d989f4e 34 {8,8,9,9,64,64,0,0},
p4ken 10:68078d989f4e 35 {63,63,73,73,65,65,64,64},
p4ken 10:68078d989f4e 36 {200,200,127,127,194,194,127,127},
p4ken 10:68078d989f4e 37 {8,8,4,4,72,72,8,8},
p4ken 10:68078d989f4e 38 {156,156,63,63,72,72,8,8},
p4ken 10:68078d989f4e 39 {170,170,36,36,68,68,8,8},
p4ken 10:68078d989f4e 40 {138,138,36,36,68,68,8,8},
p4ken 10:68078d989f4e 41 {137,137,63,63,67,67,72,72},
p4ken 10:68078d989f4e 42 {136,136,36,36,242,242,127,127},
p4ken 10:68078d989f4e 43 {136,136,36,36,2,2,0,0},
p4ken 10:68078d989f4e 44 {136,136,63,63,130,130,16,16},
p4ken 10:68078d989f4e 45 {8,8,17,17,98,98,32,32},
p4ken 10:68078d989f4e 46 {232,232,96,96,26,26,64,64}};
p4ken 10:68078d989f4e 47
p4ken 10:68078d989f4e 48 unsigned char pattern3[16][8] = // 赤「終点」
p4ken 10:68078d989f4e 49 {{4,0,1,0,64,0,0,0},
p4ken 10:68078d989f4e 50 {4,0,9,0,64,0,32,0},
p4ken 10:68078d989f4e 51 {18,0,31,0,192,0,63,0},
p4ken 10:68078d989f4e 52 {145,0,8,0,64,0,0,0},
p4ken 10:68078d989f4e 53 {138,0,8,0,64,0,0,0},
p4ken 10:68078d989f4e 54 {68,0,5,0,252,0,31,0},
p4ken 10:68078d989f4e 55 {18,0,5,0,4,0,16,0},
p4ken 10:68078d989f4e 56 {17,0,10,0,4,0,16,0},
p4ken 10:68078d989f4e 57 {31,0,17,0,4,0,16,0},
p4ken 10:68078d989f4e 58 {196,0,96,0,4,0,16,0},
p4ken 10:68078d989f4e 59 {53,0,6,0,252,0,31,0},
p4ken 10:68078d989f4e 60 {21,0,8,0,0,0,0,0},
p4ken 10:68078d989f4e 61 {149,0,17,0,36,0,18,0},
p4ken 10:68078d989f4e 62 {21,0,6,0,68,0,36,0},
p4ken 10:68078d989f4e 63 {5,0,8,0,66,0,68,0},
p4ken 10:68078d989f4e 64 {4,0,16,0,65,0,68,0}};
p4ken 19:7ba73bd55ca5 65
p4ken 1:9f6c6dcdd8d7 66 char scan = 16; // 点灯中の行
p4ken 6:f72e87d03ab0 67 int round = 0; // スキャンを何周したか
p4ken 3:68075c4a9ab4 68 int scroll = 0; // 左スクロールした量
p4ken 0:679fb5e8a0b4 69
p4ken 21:bbb751c5d846 70 void receive() { // シリアル受信割り込み
p4ken 2:75c7836a6ff4 71 if(pc.getc() == 0b00000001) pc.printf("received!\r\n");
p4ken 2:75c7836a6ff4 72 // pc.putc(pc.getc() + 1); // echo
p4ken 2:75c7836a6ff4 73 }
p4ken 2:75c7836a6ff4 74
p4ken 0:679fb5e8a0b4 75 int main() {
p4ken 21:bbb751c5d846 76 SPI spi(PB_15, PB_14, PB_13); // SPIピンを指定
p4ken 13:83c703e6e843 77 spi.format(8, 0); // 74595へ8ビットずつ送る
p4ken 22:bc786f860cd0 78 spi.frequency(6*1000*1000); // 74595へのクロック周波数 デフォルト1M max96M
p4ken 21:bbb751c5d846 79 pc.attach(receive, Serial::RxIrq); // シリアル受信割り込み
p4ken 21:bbb751c5d846 80 pc.baud(9600); // シリアル通信のクロックレート デフォルト9600
p4ken 21:bbb751c5d846 81 timer.start(); // 経過時間のカウントを開始
p4ken 0:679fb5e8a0b4 82
p4ken 0:679fb5e8a0b4 83 while(1) {
p4ken 21:bbb751c5d846 84 timer.reset(); // 経過時間0秒
p4ken 9:4efad95ffa53 85
p4ken 9:4efad95ffa53 86 // 行選択
p4ken 9:4efad95ffa53 87 scan++; // 一行進む
p4ken 9:4efad95ffa53 88 if(scan == 17) { // 16行目の次
p4ken 1:9f6c6dcdd8d7 89 SER = 0; // 点灯
p4ken 9:4efad95ffa53 90 scan = 1; // 1行目に戻る
p4ken 9:4efad95ffa53 91 round++; // スキャンが1周した
p4ken 9:4efad95ffa53 92 } else if(scan == 2) { // 2行目
p4ken 1:9f6c6dcdd8d7 93 SER = 1; // 消灯
p4ken 0:679fb5e8a0b4 94 }
p4ken 9:4efad95ffa53 95
p4ken 9:4efad95ffa53 96 // 表示パターン送り込み
p4ken 22:bc786f860cd0 97 for(int i=0; i<4*8; i++){ // iは最大で4*11文字
p4ken 22:bc786f860cd0 98 // if(round < 5000) {
p4ken 22:bc786f860cd0 99 // spi.write(pattern1[scan-1][8-1-i%8]);
p4ken 22:bc786f860cd0 100 // } else if(round < 10000) {
p4ken 22:bc786f860cd0 101 // spi.write(pattern2[scan-1][8-1-i%8]);
p4ken 22:bc786f860cd0 102 // } else {
p4ken 22:bc786f860cd0 103 // spi.write(pattern3[scan-1][8-1-i%8]);
p4ken 22:bc786f860cd0 104 // }
p4ken 22:bc786f860cd0 105 spi.write(0b00000000);
p4ken 22:bc786f860cd0 106 spi.write(0b00000001);
p4ken 6:f72e87d03ab0 107 }
p4ken 9:4efad95ffa53 108
p4ken 9:4efad95ffa53 109 // スクロール
p4ken 19:7ba73bd55ca5 110 if(round > 15000) { // スクロール速度
p4ken 6:f72e87d03ab0 111 scroll++; // 1ドットスクロールする
p4ken 6:f72e87d03ab0 112 round = 0; // スキャン周回カウントリセット
p4ken 6:f72e87d03ab0 113 }
p4ken 7:d9681a6487d4 114 if(scroll > 32) { // スクロール幅
p4ken 6:f72e87d03ab0 115 scroll = 0; // スクロール数リセット
p4ken 5:95590a89eb9f 116 }
p4ken 1:9f6c6dcdd8d7 117
p4ken 0:679fb5e8a0b4 118 RCK = 0;
p4ken 1:9f6c6dcdd8d7 119 CLK = 0;
p4ken 1:9f6c6dcdd8d7 120 G = 1; // 消灯
p4ken 0:679fb5e8a0b4 121 RCK = 1;
p4ken 1:9f6c6dcdd8d7 122 CLK = 1;
p4ken 8:496a1ba31a68 123
p4ken 8:496a1ba31a68 124 // ここまでの処理時間が長いほど明るくなる
p4ken 9:4efad95ffa53 125 while(timer.read_us()<0) { // 数字のぶんだけ暗くする
p4ken 8:496a1ba31a68 126 wait_us(10);
p4ken 8:496a1ba31a68 127 }
p4ken 21:bbb751c5d846 128 G = BUTTON; // ボタン押すと点灯 消
p4ken 8:496a1ba31a68 129
p4ken 8:496a1ba31a68 130 // ダイナミック点灯のパルス幅を決める
p4ken 5:95590a89eb9f 131 while(timer.read_us()<100) { // 100*2500でゆっくり
p4ken 2:75c7836a6ff4 132 wait_us(10);
p4ken 2:75c7836a6ff4 133 }
p4ken 15:5cec652070ca 134 // pc.printf("%d\r\n", timer.read_us());
p4ken 15:5cec652070ca 135 // pc.printf("%d\r\n", round/100);
p4ken 0:679fb5e8a0b4 136 }
p4ken 0:679fb5e8a0b4 137 }