p4 ken
/
LED_Matrix_Japanese_Scroll
LT-5016M1を74HC595で制御します。文字スクロールなどの参考にどうぞ。
制作の過程はNotebookに書いています。
Diff: main.cpp
- Revision:
- 21:bbb751c5d846
- Parent:
- 20:29dc4a331254
- Child:
- 22:bc786f860cd0
- Child:
- 24:5c85cd80f5fa
diff -r 29dc4a331254 -r bbb751c5d846 main.cpp --- a/main.cpp Sun Oct 02 14:47:49 2016 +0000 +++ b/main.cpp Sun Oct 02 17:17:24 2016 +0000 @@ -4,9 +4,9 @@ DigitalOut G(PB_1); // 74595 DigitalOut SER(PC_6); // 74164 DigitalOut CLK(PC_5); // 74164 -DigitalIn BUTTON(USER_BUTTON); -Serial pc(USBTX, USBRX); -Timer timer; // 経過時間デバッグ用 +DigitalIn BUTTON(USER_BUTTON); // 点灯・消灯ボタン +Serial pc(USBTX, USBRX); // USBシリアル通信 +Timer timer; // 経過時間のカウンター // 点灯パターン 手前赤、手前緑... unsigned char pattern1[16][8] = // 手前赤、手前緑... // 緑「次は」 @@ -67,20 +67,21 @@ int round = 0; // スキャンを何周したか int scroll = 0; // 左スクロールした量 -void receive() { +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ピンの指定 + SPI spi(PB_15, PB_14, PB_13); // SPIピンを指定 spi.format(8, 0); // 74595へ8ビットずつ送る - spi.frequency(96/16*1000*1000); // 74595へのクロック周波数 - pc.attach(receive, Serial::RxIrq); - timer.start(); // 経過時間デバッグ用 + spi.frequency(96/16*1000*1000); // 74595へのクロック周波数 デフォルト1000*1000 + pc.attach(receive, Serial::RxIrq); // シリアル受信割り込み + pc.baud(9600); // シリアル通信のクロックレート デフォルト9600 + timer.start(); // 経過時間のカウントを開始 while(1) { - timer.reset(); + timer.reset(); // 経過時間0秒 // 行選択 scan++; // 一行進む @@ -93,7 +94,7 @@ } // 表示パターン送り込み - for(int i=0; i<8*2; i++){ + for(int i=0; i<4*4; i++){ // iは最大で4*11文字 if(round < 5000) { spi.write(pattern1[scan-1][8-1-i%8]); } else if(round < 10000) { @@ -122,7 +123,7 @@ while(timer.read_us()<0) { // 数字のぶんだけ暗くする wait_us(10); } - G = BUTTON; // ボタン押すと点灯 + G = BUTTON; // ボタン押すと点灯 消 // ダイナミック点灯のパルス幅を決める while(timer.read_us()<100) { // 100*2500でゆっくり