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

Dependencies:   mbed

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

Committer:
p4ken
Date:
Tue Apr 04 08:56:33 2017 +0000
Revision:
42:2df76753f8a1
Parent:
41:7c72eff4279a
?pattern???????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
p4ken 0:679fb5e8a0b4 1 #include "mbed.h"
p4ken 41:7c72eff4279a 2 #include "patterns.cpp"
p4ken 41:7c72eff4279a 3
p4ken 38:97031cb65085 4 DigitalOut RCK(D10);// 74595
p4ken 38:97031cb65085 5 DigitalOut G(D9); // 74595
p4ken 30:7f0f186d2b4a 6 DigitalOut SER(D8); // 74164
p4ken 30:7f0f186d2b4a 7 DigitalOut CLK(D7); // 74164
p4ken 38:97031cb65085 8 DigitalIn BUTTON(USER_BUTTON); // 点灯・消灯ボタン
p4ken 30:7f0f186d2b4a 9 //Serial pc(USBTX, USBRX); // USBシリアル通信
p4ken 39:f9a450e32abb 10 Timer timer; // 経過時間のカウンター
p4ken 38:97031cb65085 11 const unsigned char HI = 0;
p4ken 38:97031cb65085 12 const unsigned char LO = 1;
p4ken 38:97031cb65085 13 const unsigned char MODE = 2; //SPI
p4ken 16:cd36324730ad 14
p4ken 1:9f6c6dcdd8d7 15 char scan = 16; // 点灯中の行
p4ken 39:f9a450e32abb 16 //int round = 0; // スキャンを何周したか
p4ken 39:f9a450e32abb 17 //int scroll = 0; // 左スクロールした量
p4ken 40:39e626b5269d 18 char speed = 30-29; // スクロール進段ミリ秒
p4ken 40:39e626b5269d 19 int t = 0; // 経過時間
p4ken 0:679fb5e8a0b4 20
p4ken 21:bbb751c5d846 21 void receive() { // シリアル受信割り込み
p4ken 30:7f0f186d2b4a 22 // if(pc.getc() == 0b00000001) pc.printf("received!\r\n");
p4ken 2:75c7836a6ff4 23 // pc.putc(pc.getc() + 1); // echo
p4ken 2:75c7836a6ff4 24 }
p4ken 2:75c7836a6ff4 25
p4ken 39:f9a450e32abb 26 //unsigned char getPattern(char const *p, char x, char y, bool s) {
p4ken 39:f9a450e32abb 27 // unsigned char r;
p4ken 39:f9a450e32abb 28 // r = (unsigned char)p[x][4*11-1-y%(4*11)];
p4ken 39:f9a450e32abb 29 // return r;
p4ken 39:f9a450e32abb 30 //}
p4ken 39:f9a450e32abb 31
p4ken 0:679fb5e8a0b4 32 int main() {
p4ken 30:7f0f186d2b4a 33 SPI spi(D11, D12, D13); // SPIピン mosi, miso, sclk
p4ken 38:97031cb65085 34 spi.format(8, MODE); // 74595へ~ビットずつ送る //立ち下りクロック
p4ken 31:d6f78e70bf01 35 spi.frequency(1*1000*1000); // 74595へのクロック周波数 最高96 初期1
p4ken 30:7f0f186d2b4a 36 // pc.attach(receive, Serial::RxIrq); // シリアル受信割り込み
p4ken 30:7f0f186d2b4a 37 // pc.baud(9600); // シリアル通信のクロックレート デフォルト9600
p4ken 39:f9a450e32abb 38 timer.start(); // 経過時間のカウントを開始
p4ken 39:f9a450e32abb 39 timer.reset(); // 経過時間0秒
p4ken 42:2df76753f8a1 40
p4ken 42:2df76753f8a1 41 spi.write(pattern2[0][0]
p4ken 42:2df76753f8a1 42 + pattern5[0][0]
p4ken 42:2df76753f8a1 43 + pattern_bus1[0][0]
p4ken 42:2df76753f8a1 44 + pattern_bus2[0][0]
p4ken 42:2df76753f8a1 45 + pattern_bus3[0][0]
p4ken 42:2df76753f8a1 46 + pattern_bus4[0][0]
p4ken 42:2df76753f8a1 47 + pattern_bus5[0][0]
p4ken 42:2df76753f8a1 48 + pattern_bus6[0][0]
p4ken 42:2df76753f8a1 49 + pattern_8k_kaisoku_sho[0][0]
p4ken 42:2df76753f8a1 50 + pattern_8k_yayoi_tsugi[0][0]
p4ken 42:2df76753f8a1 51 + pattern_8k_yayoi_next[0][0]
p4ken 42:2df76753f8a1 52 + pattern_8k_izu_tsugi[0][0]
p4ken 42:2df76753f8a1 53 + pattern_8k_izu_next[0][0]
p4ken 42:2df76753f8a1 54 + pattern_8k_izuchi_tsugi[0][0]
p4ken 42:2df76753f8a1 55 + pattern_8k_izuchi_next[0][0]
p4ken 42:2df76753f8a1 56 + pattern_8k_yume_tsugi[0][0]
p4ken 42:2df76753f8a1 57 + pattern_8k_yume_next[0][0]
p4ken 42:2df76753f8a1 58 + pattern_8k_sho_tsugi[0][0]
p4ken 42:2df76753f8a1 59 + pattern_8k_sho_next[0][0]
p4ken 42:2df76753f8a1 60 + pattern_8k_shin_ya[0][0]
p4ken 42:2df76753f8a1 61 + pattern_8k_green_pocket[0][0]
p4ken 42:2df76753f8a1 62 + pattern_8k_yayoi_mamonaku[0][0]
p4ken 42:2df76753f8a1 63 + pattern_8k_izu_mamonaku[0][0]
p4ken 42:2df76753f8a1 64 + pattern_8k_izuchi_mamonaku[0][0]
p4ken 42:2df76753f8a1 65 + pattern_8k_yume_mamonaku[0][0]
p4ken 42:2df76753f8a1 66 + pattern_8k_sho_mamonaku[0][0]
p4ken 42:2df76753f8a1 67 + pattern_8k_door_this[0][0]
p4ken 42:2df76753f8a1 68 + pattern_8k_door_another[0][0]
p4ken 42:2df76753f8a1 69 + pattern_8k_door_both[0][0]
p4ken 42:2df76753f8a1 70 + pattern_8k_yayoi_jp[0][0]
p4ken 42:2df76753f8a1 71 + pattern_8k_yayoi_en[0][0]
p4ken 42:2df76753f8a1 72 + pattern_8k_izu_jp[0][0]
p4ken 42:2df76753f8a1 73 + pattern_8k_izu_en[0][0]
p4ken 42:2df76753f8a1 74 + pattern_8k_izuchi_jp[0][0]
p4ken 42:2df76753f8a1 75 + pattern_8k_izuchi_en[0][0]
p4ken 42:2df76753f8a1 76 );
p4ken 0:679fb5e8a0b4 77
p4ken 0:679fb5e8a0b4 78 while(1) {
p4ken 9:4efad95ffa53 79 // 行選択
p4ken 9:4efad95ffa53 80 scan++; // 一行進む
p4ken 31:d6f78e70bf01 81 if(scan == 17+0) { // 16行目の次
p4ken 38:97031cb65085 82 SER = LO; // 点灯
p4ken 9:4efad95ffa53 83 scan = 1; // 1行目に戻る
p4ken 39:f9a450e32abb 84 // round++; // スキャンが1周した
p4ken 40:39e626b5269d 85 // t = timer.read_ms();
p4ken 40:39e626b5269d 86 t += 1;
p4ken 9:4efad95ffa53 87 } else if(scan == 2) { // 2行目
p4ken 38:97031cb65085 88 SER = HI; // 消灯
p4ken 0:679fb5e8a0b4 89 }
p4ken 9:4efad95ffa53 90
p4ken 9:4efad95ffa53 91 // 表示パターン送り込み
p4ken 39:f9a450e32abb 92 // int t = scroll;
p4ken 34:e9895343c300 93 for(int i=0; i<4*11; i++){ // iは最大で~*11文字
p4ken 40:39e626b5269d 94 if(true) {
p4ken 39:f9a450e32abb 95 if(t/8/speed*2 < 4*(166+11)) {
p4ken 39:f9a450e32abb 96 unsigned char p;
p4ken 39:f9a450e32abb 97 char y = scan-1;
p4ken 39:f9a450e32abb 98 char x = 4*11-1-i%(4*11);
p4ken 39:f9a450e32abb 99 if(t/8/speed*2 <= i) {
p4ken 39:f9a450e32abb 100 p = (unsigned char)~0b00000000 >> ( (t/speed)%8);
p4ken 39:f9a450e32abb 101 } else if(t/8/speed*2 <= 4*166+i) {
p4ken 41:7c72eff4279a 102 p = (unsigned char)~pattern_8k_green_pocket[y][x+(t/8/speed*2-4*11)] >> ( (t/speed)%8);
p4ken 39:f9a450e32abb 103 } else {
p4ken 39:f9a450e32abb 104 p = (unsigned char)~0b00000000 >> ( (t/speed)%8);
p4ken 39:f9a450e32abb 105 }
p4ken 39:f9a450e32abb 106 if(t/8/speed*2 <= i-4) {
p4ken 39:f9a450e32abb 107 p += (unsigned char)~0b00000000 << (8-(t/speed)%8);
p4ken 39:f9a450e32abb 108 } else if(t/8/speed*2 <= 4*166+i-4) {
p4ken 41:7c72eff4279a 109 p += (unsigned char)~pattern_8k_green_pocket[y][x+(t/8/speed*2)+2-4*11] << (8-(t/speed)%8);
p4ken 39:f9a450e32abb 110 } else {
p4ken 39:f9a450e32abb 111 p += (unsigned char)~0b00000000 << (8-(t/speed)%8);
p4ken 39:f9a450e32abb 112 }
p4ken 39:f9a450e32abb 113 spi.write(p);
p4ken 39:f9a450e32abb 114 } else {
p4ken 40:39e626b5269d 115 spi.write((unsigned char)~pattern5[scan-1][4*11-1-i%(4*11)]);
p4ken 39:f9a450e32abb 116 // spi.write((unsigned char)~0b00000000); //消灯
p4ken 40:39e626b5269d 117 }
p4ken 40:39e626b5269d 118 }
p4ken 39:f9a450e32abb 119 // spi.write((unsigned char)~pattern2[scan-1][4*11-1-i%(4*11)]);
p4ken 38:97031cb65085 120 //spi.write(0);
p4ken 40:39e626b5269d 121 //spi.write(0b10101010);
p4ken 38:97031cb65085 122 //spi.write(0b11111111);
p4ken 6:f72e87d03ab0 123 }
p4ken 9:4efad95ffa53 124
p4ken 9:4efad95ffa53 125 // スクロール
p4ken 39:f9a450e32abb 126 // if(round > speed) { // スクロール速度
p4ken 39:f9a450e32abb 127 // scroll++; // 1ドットスクロールする
p4ken 39:f9a450e32abb 128 // round = 0; // スキャン周回カウントリセット
p4ken 39:f9a450e32abb 129 // }
p4ken 39:f9a450e32abb 130 // if(scroll > 200) { // スクロール幅
p4ken 39:f9a450e32abb 131 // scroll = 0; // スクロール数リセット
p4ken 39:f9a450e32abb 132 // }
p4ken 40:39e626b5269d 133
p4ken 40:39e626b5269d 134 wait_us(10);
p4ken 38:97031cb65085 135 RCK = LO;
p4ken 38:97031cb65085 136 CLK = LO;
p4ken 40:39e626b5269d 137 // G = HI; // 消灯
p4ken 40:39e626b5269d 138 wait_us(10);
p4ken 38:97031cb65085 139 RCK = HI;
p4ken 38:97031cb65085 140 CLK = HI;
p4ken 8:496a1ba31a68 141
p4ken 8:496a1ba31a68 142 // ここまでの処理時間が長いほど明るくなる
p4ken 27:c49fd2b1279a 143 // while(timer.read_us()<0) { // 数字のぶんだけ暗くする
p4ken 27:c49fd2b1279a 144 // wait_us(10);
p4ken 27:c49fd2b1279a 145 // }
p4ken 30:7f0f186d2b4a 146
p4ken 40:39e626b5269d 147 if(!BUTTON) G = LO; // ボタン押せば点灯
p4ken 8:496a1ba31a68 148
p4ken 8:496a1ba31a68 149 // ダイナミック点灯のパルス幅を決める
p4ken 27:c49fd2b1279a 150 // while(timer.read_us()<100) { // 100*2500でゆっくり
p4ken 27:c49fd2b1279a 151 // wait_us(10);
p4ken 27:c49fd2b1279a 152 // }
p4ken 15:5cec652070ca 153 // pc.printf("%d\r\n", timer.read_us());
p4ken 15:5cec652070ca 154 // pc.printf("%d\r\n", round/100);
p4ken 0:679fb5e8a0b4 155 }
p4ken 0:679fb5e8a0b4 156 }