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

Dependencies:   mbed

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

Committer:
p4ken
Date:
Sat Sep 24 16:05:57 2016 +0000
Revision:
7:d9681a6487d4
Parent:
6:f72e87d03ab0
Child:
8:496a1ba31a68
????

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 2:75c7836a6ff4 10 unsigned char pattern[3][4] = // 奥緑右~左、奥赤右=左・・・
p4ken 2:75c7836a6ff4 11 {{0b11111100, 0b11111111, 0b00011111, 0b11100000},
p4ken 2:75c7836a6ff4 12 {0b00000000, 0b00000000, 0b00000000, 0b00000000},
p4ken 2:75c7836a6ff4 13 {0b00000000, 0b00000000, 0b00000000, 0b00000000}};
p4ken 1:9f6c6dcdd8d7 14 char scan = 16; // 点灯中の行
p4ken 6:f72e87d03ab0 15 int round = 0; // スキャンを何周したか
p4ken 3:68075c4a9ab4 16 int scroll = 0; // 左スクロールした量
p4ken 0:679fb5e8a0b4 17
p4ken 2:75c7836a6ff4 18 void receive() {
p4ken 2:75c7836a6ff4 19 if(pc.getc() == 0b00000001) pc.printf("received!\r\n");
p4ken 2:75c7836a6ff4 20 // pc.putc(pc.getc() + 1); // echo
p4ken 2:75c7836a6ff4 21 }
p4ken 2:75c7836a6ff4 22
p4ken 0:679fb5e8a0b4 23 int main() {
p4ken 1:9f6c6dcdd8d7 24 SPI spi(PB_15, PB_14, PB_13);
p4ken 1:9f6c6dcdd8d7 25 spi.format(8, 0);
p4ken 7:d9681a6487d4 26 spi.frequency(100000000);
p4ken 2:75c7836a6ff4 27 pc.attach(receive, Serial::RxIrq);
p4ken 2:75c7836a6ff4 28 timer.start(); // 経過時間デバッグ用
p4ken 0:679fb5e8a0b4 29
p4ken 0:679fb5e8a0b4 30 while(1) {
p4ken 2:75c7836a6ff4 31 timer.reset();
p4ken 1:9f6c6dcdd8d7 32 scan++;
p4ken 1:9f6c6dcdd8d7 33 if(scan == 17) {
p4ken 1:9f6c6dcdd8d7 34 SER = 0; // 点灯
p4ken 5:95590a89eb9f 35 scan = 1;
p4ken 6:f72e87d03ab0 36 round++;
p4ken 5:95590a89eb9f 37 } else if(scan == 2) {
p4ken 1:9f6c6dcdd8d7 38 SER = 1; // 消灯
p4ken 0:679fb5e8a0b4 39 }
p4ken 7:d9681a6487d4 40 for(int i=0; i<2*11; i++){
p4ken 6:f72e87d03ab0 41 spi.write(0b00000001 << scroll%8);
p4ken 6:f72e87d03ab0 42 spi.write(0b00000010 << scroll%8);
p4ken 6:f72e87d03ab0 43 }
p4ken 6:f72e87d03ab0 44 if(round > 200) { // スクロール速度
p4ken 6:f72e87d03ab0 45 scroll++; // 1ドットスクロールする
p4ken 6:f72e87d03ab0 46 round = 0; // スキャン周回カウントリセット
p4ken 6:f72e87d03ab0 47 }
p4ken 7:d9681a6487d4 48 if(scroll > 32) { // スクロール幅
p4ken 6:f72e87d03ab0 49 scroll = 0; // スクロール数リセット
p4ken 5:95590a89eb9f 50 }
p4ken 1:9f6c6dcdd8d7 51
p4ken 0:679fb5e8a0b4 52 RCK = 0;
p4ken 1:9f6c6dcdd8d7 53 CLK = 0;
p4ken 1:9f6c6dcdd8d7 54 G = 1; // 消灯
p4ken 0:679fb5e8a0b4 55 RCK = 1;
p4ken 1:9f6c6dcdd8d7 56 CLK = 1;
p4ken 7:d9681a6487d4 57 wait_us(100); // 暗くする
p4ken 4:cd1ed9d15ef4 58 G = BUTTON; // ボタン押すと点灯
p4ken 5:95590a89eb9f 59 while(timer.read_us()<100) { // 100*2500でゆっくり
p4ken 2:75c7836a6ff4 60 wait_us(10);
p4ken 2:75c7836a6ff4 61 }
p4ken 2:75c7836a6ff4 62 // pc.printf("%f\r\n", timer.read());
p4ken 0:679fb5e8a0b4 63 }
p4ken 0:679fb5e8a0b4 64 }