p4 ken
/
LED_Matrix_Japanese_Scroll
LT-5016M1を74HC595で制御します。文字スクロールなどの参考にどうぞ。
制作の過程はNotebookに書いています。
main.cpp
- Committer:
- p4ken
- Date:
- 2016-09-24
- Revision:
- 8:496a1ba31a68
- Parent:
- 7:d9681a6487d4
- Child:
- 9:4efad95ffa53
File content as of revision 8:496a1ba31a68:
#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; // 点灯中の行 int round = 0; // スキャンを何周したか int scroll = 0; // 左スクロールした量 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 = 1; round++; } else if(scan == 2) { SER = 1; // 消灯 } for(int i=0; i<2*11; i++){ spi.write(0b00000001 << scroll%8); spi.write(0b00000010 << scroll%8); } if(round > 200) { // スクロール速度 scroll++; // 1ドットスクロールする round = 0; // スキャン周回カウントリセット } if(scroll > 32) { // スクロール幅 scroll = 0; // スクロール数リセット } RCK = 0; CLK = 0; G = 1; // 消灯 RCK = 1; CLK = 1; // ここまでの処理時間が長いほど明るくなる while(timer.read_us()<100) { // 数字のぶんだけ暗くする wait_us(10); } G = BUTTON; // ボタン押すと点灯 // ダイナミック点灯のパルス幅を決める while(timer.read_us()<100) { // 100*2500でゆっくり wait_us(10); } // pc.printf("%f\r\n", timer.read()); } }