p4 ken
/
LED_Matrix_Japanese_Scroll
LT-5016M1を74HC595で制御します。文字スクロールなどの参考にどうぞ。
制作の過程はNotebookに書いています。
main.cpp@9:4efad95ffa53, 2016-09-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |