p4 ken
/
LED_Matrix_Japanese_Scroll
LT-5016M1を74HC595で制御します。文字スクロールなどの参考にどうぞ。
制作の過程はNotebookに書いています。
main.cpp@26:a370873304d9, 2016-11-05 (annotated)
- Committer:
- p4ken
- Date:
- Sat Nov 05 06:57:12 2016 +0000
- Revision:
- 26:a370873304d9
- Parent:
- 24:5c85cd80f5fa
- Child:
- 27:c49fd2b1279a
????????
Who changed what in which revision?
User | Revision | Line number | New 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 | 26:a370873304d9 | 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 | 26:a370873304d9 | 78 | spi.frequency(1*1000*1000); // 74595へのクロック周波数 最高96 初期1 |
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 | 26:a370873304d9 | 88 | if(scan == 17+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 | 24:5c85cd80f5fa | 97 | for(int i=0; i<4*12; i++){ // iは最大で4*11文字 |
p4ken | 26:a370873304d9 | 98 | // if(round < 500) { |
p4ken | 26:a370873304d9 | 99 | // spi.write(pattern1[scan-1][8-1-i%8]); |
p4ken | 26:a370873304d9 | 100 | // } else if(round < 1000) { |
p4ken | 20:29dc4a331254 | 101 | spi.write(pattern2[scan-1][8-1-i%8]); |
p4ken | 26:a370873304d9 | 102 | // } else { |
p4ken | 26:a370873304d9 | 103 | // spi.write(pattern3[scan-1][8-1-i%8]); |
p4ken | 26:a370873304d9 | 104 | // } |
p4ken | 24:5c85cd80f5fa | 105 | //spi.write(0b11111111); |
p4ken | 6:f72e87d03ab0 | 106 | } |
p4ken | 9:4efad95ffa53 | 107 | |
p4ken | 9:4efad95ffa53 | 108 | // スクロール |
p4ken | 24:5c85cd80f5fa | 109 | if(round > 1500) { // スクロール速度 |
p4ken | 6:f72e87d03ab0 | 110 | scroll++; // 1ドットスクロールする |
p4ken | 6:f72e87d03ab0 | 111 | round = 0; // スキャン周回カウントリセット |
p4ken | 6:f72e87d03ab0 | 112 | } |
p4ken | 7:d9681a6487d4 | 113 | if(scroll > 32) { // スクロール幅 |
p4ken | 6:f72e87d03ab0 | 114 | scroll = 0; // スクロール数リセット |
p4ken | 5:95590a89eb9f | 115 | } |
p4ken | 1:9f6c6dcdd8d7 | 116 | |
p4ken | 0:679fb5e8a0b4 | 117 | RCK = 0; |
p4ken | 1:9f6c6dcdd8d7 | 118 | CLK = 0; |
p4ken | 1:9f6c6dcdd8d7 | 119 | G = 1; // 消灯 |
p4ken | 0:679fb5e8a0b4 | 120 | RCK = 1; |
p4ken | 1:9f6c6dcdd8d7 | 121 | CLK = 1; |
p4ken | 8:496a1ba31a68 | 122 | |
p4ken | 8:496a1ba31a68 | 123 | // ここまでの処理時間が長いほど明るくなる |
p4ken | 9:4efad95ffa53 | 124 | while(timer.read_us()<0) { // 数字のぶんだけ暗くする |
p4ken | 8:496a1ba31a68 | 125 | wait_us(10); |
p4ken | 8:496a1ba31a68 | 126 | } |
p4ken | 24:5c85cd80f5fa | 127 | G = !BUTTON; // ボタン押すと!点灯 |
p4ken | 8:496a1ba31a68 | 128 | |
p4ken | 8:496a1ba31a68 | 129 | // ダイナミック点灯のパルス幅を決める |
p4ken | 5:95590a89eb9f | 130 | while(timer.read_us()<100) { // 100*2500でゆっくり |
p4ken | 2:75c7836a6ff4 | 131 | wait_us(10); |
p4ken | 2:75c7836a6ff4 | 132 | } |
p4ken | 15:5cec652070ca | 133 | // pc.printf("%d\r\n", timer.read_us()); |
p4ken | 15:5cec652070ca | 134 | // pc.printf("%d\r\n", round/100); |
p4ken | 0:679fb5e8a0b4 | 135 | } |
p4ken | 0:679fb5e8a0b4 | 136 | } |