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

Dependencies:   mbed

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

main.cpp

Committer:
p4ken
Date:
2016-09-19
Revision:
2:75c7836a6ff4
Parent:
1:9f6c6dcdd8d7
Child:
3:68075c4a9ab4

File content as of revision 2:75c7836a6ff4:

#include "mbed.h"

DigitalOut RCK(PB_12);// 74HC595
DigitalOut G(PB_1);   // 74HC595
DigitalOut SER(PC_6); // 74HC164
DigitalOut CLK(PC_5); // 74HC164
DigitalIn BUTTON(USER_BUTTON);
Serial pc(USBTX, USBRX);
Timer timer; // 経過時間デバッグ用
unsigned char pattern[3][4] = // 奥緑右~左、奥赤右=左・・・
{{0b11111100, 0b11111111, 0b00011111, 0b11100000},
 {0b00000000, 0b00000000, 0b00000000, 0b00000000},
 {0b00000000, 0b00000000, 0b00000000, 0b00000000}};
char scan = 16; // 点灯中の行

void receive() {
    if(pc.getc() == 0b00000001) pc.printf("received!\r\n");
//    pc.putc(pc.getc() + 1); // echo
}

int main() {
    SPI spi(PB_15, PB_14, PB_13);
    spi.format(8, 0);
    spi.frequency(100000000);
    pc.attach(receive, Serial::RxIrq);
    timer.start(); // 経過時間デバッグ用
    
    while(1) {
        timer.reset();
        scan++;
        if(scan == 17) {
            SER = 0; // 点灯
            scan = 0;
        } else if(scan == 1) {
            SER = 1; // 消灯
        }
        spi.write(pattern[0][0]);
        spi.write(pattern[0][1]);
        spi.write(pattern[0][2]);
        spi.write(pattern[0][3]);
        
        RCK = 0;
        CLK = 0;
        G = 1; // 消灯
        RCK = 1;
        CLK = 1;
        if(BUTTON) G = 0; // 点灯
        while(timer.read_us()<100) {
            wait_us(10);
        }
//        pc.printf("%f\r\n", timer.read());
    }
}