Chi rashi / Mbed 2 deprecated E233SideLED

Dependencies:   SDFileSystem mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //E233SideLED E233系側面LED再現
00002 //Ver:0.90
00003 
00004 //簡単な説明,また表示データを以下で配布しています。
00005 //https://chirashitech.wordpress.com/
00006 
00007 //このソースはSDカードが存在することが前提です。
00008 //SDカードがない状態で停車駅スクロールが有効になっている場合エラー文が出力されるため起動までに時間がかかります。
00009 //SDカードがない場合ScrollEnableを0にしてください。
00010 
00011 
00012 #include "mbed.h"
00013 #include "SDFileSystem.h"
00014 
00015 #define bitRead(value, bit) (((value) >> (bit)) & 0x01)
00016 #define bitSet(value, bit) ((value) |= (1UL << (bit)))
00017 #define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
00018 #define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
00019 
00020 #define LOW 0
00021 #define HIGH 1
00022 
00023 #define R_Debug1 0
00024 #define R_Debug2 0
00025 #define R_Debug3 0
00026 #define R_Debug4 0
00027 
00028 #define G_Debug1 0
00029 #define G_Debug2 0
00030 #define G_Debug3 0
00031 #define G_Debug4 0
00032 
00033 #define B_Debug1 0
00034 #define B_Debug2 0
00035 #define B_Debug3 0
00036 #define B_Debug4 0
00037 
00038 //表示幅を増やす場合ここ以外も変更が必要
00039 #define LED_Width 128
00040 #define LED_Height 16
00041 
00042 //表示処理Wait
00043 //ここを変更することで輝度調整可能
00044 //ただし消費電力も変動します。出力に余裕のない電源を利用している場合変更しないでください
00045 #define DisplayWait 15
00046 
00047 //最大停車駅数
00048 #define MaxStopStation 100
00049 
00050 //将来的な複数機器連動用の機器ID
00051 //0:全機器一斉送信用 1:前面LED 2:側面LED(暫定)
00052 #define DeviceID 2 
00053 
00054 
00055 //SDCard
00056 //MOSI - D11(PA7)
00057 //MISO - D12(PA6)
00058 //SCK  - D13(PA5)
00059 //CS   - D10(PB6)
00060 
00061 SDFileSystem sd(D11, D12, D13, D10, "sd");
00062 
00063 //Serial USB
00064 Serial pc(USBTX,USBRX );
00065 
00066 //Bluetooth Serial6
00067 //Serial pc(PA_11,PA_12 );
00068 
00069 
00070 //LEDModule
00071 //R1,R2,G1,G2,B1,B2はモジュールによりコネクタのピンアサインが異なります。
00072 //色が違う場合DigitalOutのピンアサインを変更してください。
00073 
00074 //R1  - D4(PB5)
00075 //R2  - D5(PB4)
00076 //G1  - D6(PB10)
00077 //G2  - D7(PA8)
00078 //B1  - D2(PA10)
00079 //B2  - D3(PB3)
00080 //or
00081 //R1  - D6(PB5)
00082 //R2  - D7(PB4)
00083 //G1  - D2(PB10)
00084 //G2  - D3(PA8)
00085 //B1  - D4(PA10)
00086 //B2  - D5(PB3)
00087 
00088 //A   - D8(PA9)
00089 //B   - D9(PC7)
00090 //C   - PB13
00091 //D   - PC5
00092 
00093 //CLK - PB14
00094 //LAT - PB15
00095 //OE  - PB1
00096 
00097 BusOut ABC(D8,D9,PB_13,PC_5); // Row address.
00098 DigitalOut CLK(PB_14);    //  Data clock    - rising edge
00099 DigitalOut LAT(PB_15);    //  Data latch    - active low (pulse up after data load)
00100 DigitalOut OE(PB_1);     //  Output enable - active low (hold high during data load, bring low after LAT pulse)
00101 
00102 DigitalOut R1(D4);     //  RED   Serial in for upper half
00103 DigitalOut R2(D5);     //  RED   Serial in for lower half
00104 DigitalOut G1(D6);      //  GREEN Serial in for upper half
00105 DigitalOut G2(D7);      //  GREEN Serial in for lower half
00106 DigitalOut B1(D2);      //  BLUE  Serial in for upper half
00107 DigitalOut B2(D3);      //  BLUE  Serial in for lower half
00108 
00109 
00110 //SumSW(現状未使用)
00111 DigitalOut SCK(PB_7); 
00112 DigitalOut SI(PC_13); 
00113 DigitalOut RCK(PC_14); 
00114 
00115 DigitalIn SumSW1(PA_0);
00116 DigitalIn SumSW2(PA_1);
00117 DigitalIn SumSW4(PA_4);
00118 DigitalIn SumSW8(PB_0);
00119 //BusIn SumSWNum(PA_0,PA_1,PA_4,PB_0);
00120 
00121 DigitalIn Button1 (USER_BUTTON);
00122 
00123 //表示切替用タイマ
00124 Ticker ChangeTimer;
00125 //表示切替用タイマ(テスト表示用)
00126 Ticker ChangeTimerTest;
00127 
00128 
00129 //スクロール用タイマ
00130 Ticker ScrollTimer;
00131 
00132 
00133 
00134 
00135 
00136 
00137 //Debug
00138 bool Debug = 0;
00139 
00140 
00141 //Mode(未使用?)
00142 //1固定
00143 int WriteMode = 1;
00144 
00145 
00146 
00147 //1:3段階 LEDBuffer-LEDBuffer2-LEDBuffer3
00148 //2:2段階 LEDBuffer5-LEDBuffer6
00149 //3:固定  LEDBuffer
00150 //4:2段階 LEDBuffer2-LEDBuffer3(次駅あり)
00151 //5:4段階 LEDBuffer-LEDBuffer4-LEDBuffer2-LEDBuffer3
00152 int DisplayMode = 1;
00153 
00154 //スクロール有効/無効
00155 bool Scroll = 1;
00156 
00157 //起動時スクロール読み込み有効/無効(SDがない場合0にする)
00158 //(1になっている場合SDカードが刺さっていないと起動に数分かかります)
00159 bool ScrollEnable = 1;
00160 
00161 
00162 int ChangeCount = 0;
00163 //テスト表示用
00164 int ChangeCountTest = 0;
00165 //路線コード
00166 int LineNumber = 1;
00167 //種別コード
00168 int KindNumber = 22;
00169 //行先コード
00170 int ForNumber = 114;
00171 //次駅コード
00172 int NextStaNumber = 1;
00173 //運用パターン番号
00174 int RoutePatternNumber = 1;
00175 //始発駅コード
00176 int DeptStaNumber = 3;
00177 //終着駅コード
00178 int TermStaNumber = 32;
00179 
00180 
00181 char SerialBuffer[60];
00182 //シリアル処理用バッファ
00183 char ABuffer[60];
00184 bool busyflag = false;
00185 int count = 0;
00186 
00187 //スクロール用変数
00188 int ScrollCount = 0;
00189 int ScrollWriteCount = 80;
00190 
00191 
00192 //SDCardFilePath
00193 char SDFilePath[80]= "/sd/a.txt";
00194 
00195 unsigned long CT;         
00196 
00197 //StopStationCode:停車駅コード(最大100駅 それ以上の場合MaxStopStationを増やしてください)
00198 //停車駅コード終端は0にする
00199 //StationNameLength:駅名の文字数(最大8文字)
00200 int StopStationCode[MaxStopStation] = {320,319,318,317,316,315,314,313,312,311,310,309,308,307,306,305,304,303,302,301,351,352,353,354,355,356,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,0};
00201 int StationNameLength[100] = {0,2,2,4,3,3,3,3,3,4,3,2,3,3,2,3,4,2,3,3,2,3,4,5,3,4,2,2,2,2,3,4,2,3,2,3,3,2,2,2,2,3,3,2,2,3,3,7,4,2,3,1,5,3,3,3,8,3}; 
00202 
00203 
00204 
00205 
00206 int8_t LEDBuffer [32][LED_Width] = {
00207 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00208 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00209 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00210 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00211 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00212 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00213 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00214 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00215 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00216 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15,15,15,15,15,15,15,15,7,7,7,7,7,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00217 {0,0,0,0,15,15,15,15,15,15,15,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00218 {15,15,15,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00219 {0,0,0,0,0,0,0,0,0,0,0,0,0,15,15,15,15,15,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00220 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00221 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,0,0,0,0,0,0,7,7,7,0,0,7,7,7,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,0,0},
00222 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,0,0,0,0,0,0,7,7,7,0,0,7,7,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,7,7,7,15,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,0,0,0},
00223 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,7,0,0,0,0,0,0,0,7,7,7,0,0,7,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,7,7,7,15,0,0,0,0,0,0,0,15,7,7,7,0,0,0,0,0,0},
00224 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,7,7,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,15,0,0,0,0,0,15,7,7,7,0,0,0,0,0,0,0},
00225 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,7,7,7,0,0,0,0,0,7,7,7,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,15,0,0,0,15,7,7,7,0,0,0,0,0,0,0,0},
00226 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,7,7,7,7,0,0,0,0,7,7,7,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,15,0,15,7,7,7,0,0,0,0,0,0,0,0,0},
00227 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,7,7,7,7,7,0,0,0,7,7,7,0,0,0,0,0,0,7,7,7,15,15,15,15,15,15,15,15,15,15,15,0,0,0,0,0,0,0,7,7,15,1,15,7,7,0,0,0,0,0,0,0,0,0,0},
00228 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,7,7,7,7,7,0,0,7,7,7,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0},
00229 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,7,7,7,7,7,0,7,7,7,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0},
00230 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,0,7,7,7,7,7,7,7,7,0,0,0,0,0,0,7,7,7,15,15,15,15,15,15,15,15,15,15,15,0,0,0,0,0,0,0,15,7,1,1,1,7,15,0,0,0,0,0,0,0,0,0,0},
00231 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,0,0,7,7,7,7,7,7,7,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,7,7,7,15,0,0,0,0,0,0,0,0,0},
00232 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,0,0,0,7,7,7,7,7,7,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,0,7,7,7,15,0,0,0,0,0,0,0,0},
00233 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,0,0,0,0,7,7,7,7,7,0,0,0,0,0,0,7,7,7,15,15,15,15,15,15,15,15,15,15,15,0,0,0,0,15,7,7,7,0,0,0,0,0,7,7,7,15,0,0,0,0,0,0,0},
00234 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,15,7,7,7,0,0,0,0,0,0,0,7,7,7,15,0,0,0,0,0,0},
00235 {14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,7,7,7,14,14,14,14,14,14,14,14,7,7,7,14,14,14,14,14,14,7,7,7,7,7,7,7,7,7,7,7,7,7,7,14,14,15,7,7,7,14,14,14,14,14,14,14,14,14,7,7,7,15,14,14,14,14,14},
00236 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,7,7,1,1,1,1,1,1,1,1,1,7,7,1,1,1,1,1,1,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1,1,7,7,7,1,1,1,1,1,1,1,1,1,1,1,7,7,7,1,1,1,1,1},
00237 {14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14},
00238 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
00239 
00240 
00241 };
00242 
00243 int8_t LEDBuffer2[32][LED_Width] = {
00244 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0},      
00245 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,7,7,7,7,0,0,7,7,7,7,7,7,7,7,7,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,7,7,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0},      
00246 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,7,7,7,7,0,7,7,7,7,7,7,7,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,7,7,0,0,7,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0},      
00247 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,0,0,7,7,7,0,0,0,0,0,0,0,0,0},      
00248 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,7,0,0,0,0,0,7,7,7,7,7,7,7,7,7,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,7,7,7,7,7,7,0,0,7,7,0,7,7,7,0,0,0,0,0,0,0,0,0,0},      
00249 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,7,7,7,7,0,0,0,7,7,7,7,7,7,7,7,7,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,7,7,7,7,7,7,0,0,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0},      
00250 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,7,7,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,7,7,7,7,0,0,7,7,0,0,7,7,0,0,0,0,0,0,0,7,7,0,0,0,7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0},      
00251 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,7,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,7,0,0,0,7,7,0,0,7,7,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0},      
00252 {9,7,7,9,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,9,9,7,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,7,0,0,7,7,0,0,7,7,0,0,0,0,0,0,0,7,7,0,0,0,7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0},      
00253 {9,7,7,9,7,7,9,7,9,7,7,7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,7,7,7,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0},      
00254 {9,7,7,9,7,7,9,7,7,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,0,0,7,0,0,0,7,7,0,0,0,7,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,7,7,7,7,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0},      
00255 {9,7,7,9,7,7,9,7,7,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,7,7,9,9,9,9,7,7,9,9,0,0,0,7,7,7,0,0,7,7,0,0,7,7,7,0,0,0,0,0,0,7,7,0,0,0,7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,7,7,7,7,7,7,0,0,7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,0},      
00256 {9,7,7,9,7,7,9,7,7,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,7,7,9,9,9,9,7,7,9,9,0,0,7,7,7,0,0,0,7,7,0,0,0,7,7,7,7,0,0,0,7,7,7,0,7,7,7,7,0,0,0,7,7,7,7,0,0,0,0,0,7,7,7,0,7,7,0,7,7,7,0,0,0,0,0,7,7,7,7,0,7,7,0,0,7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,0},      
00257 {9,7,7,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,7,7,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,7,7,7,0,0,7,7,7,7,0,0,0,0,7,7,7,7,0,7,7,7,0,7,7,7,7,0,0,0,0,0,7,7,7,7,0,7,7,7,7,7,0,0,7,7,0,0,7,7,7,7,7,0,0,0,7,0,0,0,7,7,0,0,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0},      
00258 {9,7,7,9,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,7,7,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,7,0,0,0,0,7,7,0,0,0,0,0,0,7,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,7,0,0,7,7,7,7,0,0,0,7,7,0,0,0,7,7,7,7,0,0,0,0,0,0,0,7,7,0,0,0,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0},      
00259 {9,9,9,9,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,7,7,9,9,9,9,9,9,9,7,7,7,7,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},      
00260 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,7,7,7,7,7,7,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,7,7,0,0,0,0,0},      
00261 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,7,7,7,7,7,7,7,7,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,7,7,7,7,7,7,0,0,0,0,0,0,7,7,0,0,0,7,7,0,0,0,7,7,0,0,0,0,0,7,7,7,0,0,0,7,7,7,7,7,7,7,7,0,0},      
00262 {9,9,9,9,7,7,9,9,9,9,9,9,9,7,7,7,7,7,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,7,7,7,7,9,7,7,9,7,7,7,7,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,7,7,7,7,7,7,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,7,7,0,7,0,0,7,7,7,7,7,7,7,7,0,0},      
00263 {9,9,9,9,7,7,9,9,9,9,9,9,9,7,7,9,7,7,9,9,9,9,9,9,9,9,9,9,7,7,9,7,7,7,7,7,9,9,7,7,9,9,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,0,0,0,0,7,7,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,7,7,0,7,7,0,0,7,7,0,0,0,0,7,7,0,0},      
00264 {9,9,9,9,7,7,9,9,9,9,9,9,7,7,7,9,7,7,7,9,9,9,9,9,9,9,9,9,7,7,9,7,7,7,9,9,9,9,7,7,9,9,9,9,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,0,0,7,7,7,7,7,7,7,7,0,0},      
00265 {9,9,9,9,7,7,9,9,9,9,9,7,7,7,9,9,9,7,7,7,9,9,9,9,9,9,9,7,7,7,7,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,7,7,7,7,7,7,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,7,7,7,7,0,0,0,7,7,0,0,0,0,7,7,0,0},      
00266 {9,9,9,9,7,7,9,9,9,7,7,7,7,9,9,9,9,9,7,7,7,9,9,9,9,9,7,7,7,7,7,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,7,7,7,0,0,7,7,0,0,0,0,7,7,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,7,7,0,7,7,0,7,7,7,7,7,7,7,7,0,0},      
00267 {9,9,9,9,7,7,9,7,7,7,7,7,9,9,9,9,9,9,9,7,7,7,7,9,9,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,0,7,7,7,7,0,7,7,7,7,7,7,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,0,7,7,7,7,7,7,7,7,0,0},      
00268 {9,9,9,9,7,7,9,7,7,7,9,9,9,9,9,9,9,9,9,9,7,7,7,9,9,9,7,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,7,7,0,0,7,7,0,7,7,7,7,7,7,7,7,7,7,0,0,0,7,7,7,7,7,7,7,7,0,0,0,7,7,0,0,0,7,0},      
00269 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,7,7,7,0,7,7,7,0,7,7,0,0,0,7,7,0,0,0,7,7,0,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,7,7,0,7,7,7,7,0,7,7,7,0,0,7,0},      
00270 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,7,7,0,0,7,7,0,7,7,7,0,7,7,0,0,0,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,7,7,0,7,7,7,0,0,0,7,0,7,7,7,0,7,0,0},      
00271 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,0,0,7,7,7,7,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,7,7,0,7,7,0,7,0,0,7,0,7,7,7,7,0,0,0},      
00272 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,0,0,0,7,7,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,7,7,0,7,7,0,7,0,7,7,0,7,7,0,7,0,0,0},      
00273 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,7,7,0,7,7,7,0,0,0,0,7,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,7,7,0,7,7,0,0,0,7,0,0,7,7,0,7,7,0,0},      
00274 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,7,7,0,0,0,7,7,7,7,0,7,7,7,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,7,7,0,0,7,7,0},      
00275 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,0,0,0,0,0,7,7,0,0,0,7,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0}
00276 
00277 };
00278 
00279 int8_t LEDBuffer3[32][LED_Width] = {
00280 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00281 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00282 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,7,7,0,7,7,0,0,0,0,0,0,0,0,0,0},
00283 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,7,7,0,7,7,0,0,0,0,0,0,0,0,0,0},
00284 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,0,0,0,7,7,0,7,7,0,0,0,0,0,0,0,0,0,0},
00285 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,0,0,0,7,7,0,7,7,7,0,0,0,0,0,0,0,0,0},
00286 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,0,0,7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,0},
00287 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,7,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,0,7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,0},
00288 {9,7,7,9,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,9,9,7,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,7,0,0,0,7,7,7,0,0,0,0,0,0,0,0},
00289 {9,7,7,9,7,7,9,7,9,7,7,7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0},
00290 {9,7,7,9,7,7,9,7,7,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,7,7,7,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0},
00291 {9,7,7,9,7,7,9,7,7,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,7,7,9,9,9,9,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,0,7,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0},
00292 {9,7,7,9,7,7,9,7,7,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,7,7,9,9,9,9,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00293 {9,7,7,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,7,7,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,0,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0},
00294 {9,7,7,9,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,7,7,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0},
00295 {9,9,9,9,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,7,7,9,9,9,9,9,9,9,7,7,7,7,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00296 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,7,7,7,7,7,7,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00297 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,7,7,7,7,7,7,7,7,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00298 {9,9,9,9,7,7,9,9,9,9,9,9,9,7,7,7,7,7,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,7,7,7,7,9,7,7,9,7,7,7,7,9,9,9,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00299 {9,9,9,9,7,7,9,9,9,9,9,9,9,7,7,9,7,7,9,9,9,9,9,9,9,9,9,9,7,7,9,7,7,7,7,7,9,9,7,7,9,9,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00300 {9,9,9,9,7,7,9,9,9,9,9,9,7,7,7,9,7,7,7,9,9,9,9,9,9,9,9,9,7,7,9,7,7,7,9,9,9,9,7,7,9,9,9,9,7,7,7,9,0,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,7,7,0,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0},
00301 {9,9,9,9,7,7,9,9,9,9,9,7,7,7,9,9,9,7,7,7,9,9,9,9,9,9,9,7,7,7,7,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,0,0,0,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,7,7,7,7,0,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0},
00302 {9,9,9,9,7,7,9,9,9,7,7,7,7,9,9,9,9,9,7,7,7,9,9,9,9,9,7,7,7,7,7,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,7,7,7,0,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00303 {9,9,9,9,7,7,9,7,7,7,7,7,9,9,9,9,9,9,9,7,7,7,7,9,9,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00304 {9,9,9,9,7,7,9,7,7,7,9,9,9,9,9,9,9,9,9,9,7,7,7,9,9,9,7,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00305 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00306 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,7,0,7,7,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00307 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,7,7,7,0,0,7,0,0,0,7,0,7,7,0,0,7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00308 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,7,0,0,0,7,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00309 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,7,7,0,7,0,0,0,7,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00310 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,7,0,0,0,0,7,7,0,7,0,7,0,0,0,7,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00311 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
00312 
00313 };
00314 
00315 int8_t LEDBuffer4[32][LED_Width] = {
00316 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00317 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00318 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,7,7,0,7,7,0,0,0,0,0,0,0,0,0,0},
00319 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,7,7,0,7,7,0,0,0,0,0,0,0,0,0,0},
00320 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,0,0,0,7,7,0,7,7,0,0,0,0,0,0,0,0,0,0},
00321 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,0,0,0,7,7,0,7,7,7,0,0,0,0,0,0,0,0,0},
00322 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,0,0,7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,0},
00323 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,7,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,0,7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,0},
00324 {9,7,7,9,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,9,9,7,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,7,0,0,0,7,7,7,0,0,0,0,0,0,0,0},
00325 {9,7,7,9,7,7,9,7,9,7,7,7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0},
00326 {9,7,7,9,7,7,9,7,7,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,7,7,7,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0},
00327 {9,7,7,9,7,7,9,7,7,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,7,7,9,9,9,9,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,0,7,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0},
00328 {9,7,7,9,7,7,9,7,7,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,7,7,9,9,9,9,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00329 {9,7,7,9,7,7,9,9,9,9,9,9,9,9,7,7,9,9,9,7,7,9,9,9,9,7,7,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,0,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0},
00330 {9,7,7,9,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,7,7,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0},
00331 {9,9,9,9,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,7,7,9,9,9,9,9,9,9,7,7,7,7,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00332 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,7,7,7,7,7,7,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00333 {9,9,9,9,7,7,9,9,9,9,9,9,9,9,7,7,7,9,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,9,9,7,7,7,7,7,7,7,7,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00334 {9,9,9,9,7,7,9,9,9,9,9,9,9,7,7,7,7,7,9,9,9,9,9,9,9,9,9,9,7,7,9,9,9,7,7,7,7,9,7,7,9,7,7,7,7,9,9,9,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,7,7,0,7,7,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00335 {9,9,9,9,7,7,9,9,9,9,9,9,9,7,7,9,7,7,9,9,9,9,9,9,9,9,9,9,7,7,9,7,7,7,7,7,9,9,7,7,9,9,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,7,7,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00336 {9,9,9,9,7,7,9,9,9,9,9,9,7,7,7,9,7,7,7,9,9,9,9,9,9,9,9,9,7,7,9,7,7,7,9,9,9,9,7,7,9,9,9,9,7,7,7,9,0,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,7,7,0,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0},
00337 {9,9,9,9,7,7,9,9,9,9,9,7,7,7,9,9,9,7,7,7,9,9,9,9,9,9,9,7,7,7,7,9,9,9,9,9,9,9,7,7,9,9,9,9,9,9,9,9,0,0,0,0,0,0,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,7,7,7,7,0,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0},
00338 {9,9,9,9,7,7,9,9,9,7,7,7,7,9,9,9,9,9,7,7,7,9,9,9,9,9,7,7,7,7,7,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,7,7,7,0,0,7,7,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0},
00339 {9,9,9,9,7,7,9,7,7,7,7,7,9,9,9,9,9,9,9,7,7,7,7,9,9,7,7,7,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00340 {9,9,9,9,7,7,9,7,7,7,9,9,9,9,9,9,9,9,9,9,7,7,7,9,9,9,7,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00341 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00342 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,7,0,7,7,0,0,0,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00343 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,7,7,7,0,0,7,0,0,0,7,0,7,7,0,0,7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00344 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,7,0,0,0,7,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00345 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,7,7,0,7,0,0,0,7,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00346 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7,0,0,0,0,7,0,0,0,0,7,7,0,7,0,7,0,0,0,7,0,0,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
00347 {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
00348 
00349 };
00350 
00351 int8_t LEDBuffer5[32][LED_Width] = {
00352 
00353 };
00354 
00355 int8_t LEDBuffer6[32][LED_Width] = {
00356 
00357 };
00358 int8_t LEDMainBuffer[32][LED_Width] = {
00359 
00360 };
00361 
00362 int8_t ScrollBuffer[16][2048] = {
00363 
00364 };
00365     
00366 
00367 //01 Red
00368 //02 Green
00369 //03 Blue
00370 //04 Yellow(R,G)
00371 //05(G,B)
00372 //06 purple(R,B)
00373 //07 White(R,G,B)
00374 //08 Blue(Keihin-tohoku Line)
00375 //10 Yellow(Nambu Local)
00376 //11 Green (Yokohama Line)
00377 //12 Orange(Rapid Acty,Urban)
00378 //13 Green(Saikyo Line)
00379 //14
00380 //15
00381 //16 Green(Utsunomiya Line)
00382 //17 Green(Joban Local Local)
00383 //18 Keikyu Logo(Gray
00384 
00385 bool R1Data[8][32]={
00386 {0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1},
00387 {0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1},
00388 {0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0},
00389 {0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0},
00390 
00391 {0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1},
00392 {0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,1},
00393 {0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0},
00394 {0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0}
00395 };
00396 
00397 bool G1Data[8][32]={
00398 {0,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1},
00399 {0,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1},
00400 {0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0},
00401 {0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0},
00402 
00403 {0,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1},
00404 {0,0,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,1},
00405 {0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0},
00406 {0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0}
00407 };
00408 
00409 bool B1Data[8][32]={
00410 {0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,1,1},
00411 {0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1},
00412 {0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0},
00413 {0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0},
00414 
00415 {0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,1,1},
00416 {0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1},
00417 {0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0},
00418 {0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0}
00419 };
00420 
00421 
00422 
00423 void Init()
00424 {
00425     //pc.baud(9600);
00426     // Set up things to a known state
00427     CLK = LOW;
00428     LAT = LOW;
00429     OE = HIGH; //display off
00430     ABC = 0;
00431     CT=0;
00432 
00433 }
00434 
00435 void WriteRow(unsigned char Row, int8_t Buffer[32][LED_Width], int8_t index2)
00436 {
00437     ABC = 15-Row; 
00438     for(int col=0; col<LED_Width; col++) { 
00439         R1 = R1Data[index2][(Buffer [(15-Row)][col])];
00440         G1 = G1Data[index2][(Buffer [(15-Row)][col])];   
00441         B1 = B1Data[index2][(Buffer [(15-Row)][col])];                        
00442         R2 = R1Data[index2][(Buffer [(31-Row)][col])]; 
00443         G2 = G1Data[index2][(Buffer [(31-Row)][col])];
00444         B2 = B1Data[index2][(Buffer [(31-Row)][col])];                  
00445         CLK = HIGH;                 
00446         CLK = LOW;                  
00447     }
00448     LAT = HIGH; 
00449     LAT = LOW;
00450 }
00451 
00452 void WrRowOFF(unsigned char Row)
00453 {
00454     // Write specified row (and row+8) to display. Valid input: 0 to 7.
00455     ABC = 15-Row; // Set row address
00456     for(int col=0; col<LED_Width; col++) { // To daisychain more displays, I guess you would have to increase this counter to n*32 columns. Might mirror though.
00457         R1 = 0; // Red bit, upper half
00458         G1 = 0; // Green bit, upper half
00459         B1 = 0; // Blue bit, upper half
00460         R2 = 0; // Red bit, lower half
00461         G2 = 0; // Green bit, lower half
00462         B2 = 0; // Blue bit, lower half
00463         CLK = HIGH;                 // tick (clock bit in)
00464         CLK = LOW;                  // tock
00465     }
00466     LAT = HIGH; // Latch entire row
00467     LAT = LOW;
00468 }
00469 
00470 void Paint(int8_t Buffer2[32][LED_Width])
00471 {
00472     for(int index = 0; index < 4; index++){
00473         for(int Row=0; Row<LED_Height; Row++) {
00474             OE = HIGH; // Disable output
00475             WriteRow(Row,Buffer2,index);
00476             //wait_us(5);
00477             OE = LOW; // Enable output
00478             wait_us(DisplayWait); // Wasting some time. Use for whatever else. Probably better with a ticker for the display refresh.
00479             OE = HIGH; // Disable output
00480         }     
00481     }
00482 }
00483 
00484 
00485 void PaintOFF()
00486 {
00487     // Write graphics memory to display
00488     for(int Row=0; Row<8; Row++) {
00489         OE = HIGH; // Disable output
00490         WrRowOFF(Row);
00491         OE = LOW; // Enable output
00492         wait_us(50); // Wasting some time. Use for whatever else. Probably better with a ticker for the display refresh.
00493     }
00494 }
00495 
00496 void CopyBuffer(int8_t ReadBuffer[32][LED_Width],int8_t WriteBuffer[32][LED_Width]){
00497     for(int y = 0; y < LED_Height * 2; y++){
00498         if(Scroll != 0 && y > 15 ){
00499             for(int x = 0; x < LED_Width - 80;  x++){
00500                 WriteBuffer[y][x] = ReadBuffer[y][x];    
00501             }              
00502         }else{
00503             for(int x = 0; x < LED_Width;  x++){
00504                 WriteBuffer[y][x] = ReadBuffer[y][x];    
00505             }    
00506         }      
00507     }
00508 }
00509 
00510 //バッファ初期化
00511 void ClearBuffer(int8_t TargetBuffer[32][LED_Width]){
00512     for(int y = 0; y < LED_Height * 2; y++){
00513         for(int x = 0; x < LED_Width;  x++){
00514             TargetBuffer[y][x] = 0;    
00515         }    
00516     }      
00517     
00518 }    
00519     
00520 
00521 void CopyScrollBuffer(int8_t ReadBuffer[16][2048],int8_t WriteBuffer[32][LED_Width],int Startx){
00522     for(int y = 0; y < 16; y++){
00523         int xCount = 0;       
00524         for(int x = 0; x < 80; x++){
00525                 if(bitRead(ScrollBuffer[y][(x + Startx) / 8 ], (x + Startx)% 8) != 0){
00526                     LEDMainBuffer[y + 16][x + 48] = 4;   
00527                 }else{
00528                     LEDMainBuffer[y + 16][x + 48] = 0;   
00529                 }                   
00530                 xCount = xCount + 1;
00531         }    
00532     }     
00533 }
00534 
00535 //1文字256byte 
00536 void CopyScrollBuffer2(int8_t ReadBuffer[16][2048],int8_t WriteBuffer[32][LED_Width],int Startx){
00537     for(int y = 0; y < 16; y++){
00538         for(int x = 0; x < 80; x++){
00539             LEDMainBuffer[y + 16][x + 48] = ScrollBuffer[y][x + Startx];   
00540         }    
00541     }     
00542 } 
00543 
00544 //書込み対象バッファ,書込み開始位置x,書込み開始位置y,読み出し幅x,読み出し高さy,読み出し開始位置(バイト)
00545 bool SDBufferWrite(int8_t TargetBuffer[32][LED_Width], int Startx, int Starty, int Readx, int Ready, int StartByte ){
00546     FILE *fp = fopen(SDFilePath, "r");
00547         if(fp == NULL) {
00548             pc.printf("SDFileOpen Error %s\r\n",SDFilePath);
00549             //error("Could not open file for write\r\n");
00550             return 1;
00551         }else{
00552             //pc.printf("SDFileOpen Success %s\r\n",SDFilePath);
00553         
00554             //SDDataReadtest
00555             int8_t Data;
00556             //先頭2バイトはヘッダ
00557             fseek(fp, 2 + StartByte, SEEK_SET);
00558             
00559             for(int y = Starty; y < Starty + Ready; y++){  
00560                 for(int x = Startx; x < Startx + Readx; x++){
00561                     Data = getc(fp);
00562                     TargetBuffer[y][x] = Data;    
00563                 }           
00564             }           
00565             fclose(fp); 
00566             return 0;
00567         }
00568 }
00569 
00570 //スクロールバッファへの書込み用 読み出し高さは16固定
00571 //書込み対象バッファ,書込み開始位置x,書込み開始位置y,読み出し幅x,読み出し高さy
00572 void SDScrollBufferWrite(int8_t TargetBuffer[16][2048], int Startx, int Starty, int Readx, int Ready){
00573     //pc.printf("SDScrollBufferWrite\r\n");
00574     FILE *fp = fopen(SDFilePath, "r");
00575         if(fp == NULL) {
00576             pc.printf("SDFileOpen Error %s\r\n",SDFilePath);
00577             //error("Could not open file for write\r\n");
00578         }else{
00579             //pc.printf("SDFileOpen Success %s\r\n",SDFilePath);
00580         
00581             //SDDataReadtest
00582             int8_t Data;
00583             //先頭2バイトはヘッダ
00584             fseek(fp, 2, SEEK_SET);
00585             for(int y = Starty; y < Starty + Ready; y++){  
00586                 for(int x = Startx; x < Startx + Readx; x++){
00587                     Data = getc(fp);
00588                     
00589                     
00590                     //TargetBuffer[y][x] = Data;   
00591                     
00592                     if(Data != 0){
00593                         bitSet(TargetBuffer[y][x / 8],x % 8);
00594                     }else{
00595                         bitClear(TargetBuffer[y][x / 8],x % 8);
00596                     }
00597                 }           
00598             }           
00599             fclose(fp); 
00600         }
00601 }
00602 
00603 //路線名表示の使用領域チェック
00604 //路線名表示時に次停車駅を表示するかどうかの判断に使用
00605 //路線名が下半分も使用しているなら次停車駅は表示しない
00606 bool BufferBlankCheck(){
00607     bool NotBlankflag = 0;
00608     for(int y = 16; y < 32; y++){
00609         for(int x = 48; x < 128; x++){
00610             if(LEDBuffer[y][x] != 0){
00611                 NotBlankflag = 1;   
00612             } 
00613             if(NotBlankflag == 1){
00614                 break;
00615             }
00616         }
00617         if(NotBlankflag == 1){
00618             break;
00619         }    
00620     }
00621     if(NotBlankflag == 0){
00622         pc.printf("Blank\r\n"); 
00623         return 0;     
00624     }else{
00625         pc.printf("Not Blank\r\n");  
00626         return 1;   
00627     }
00628 }
00629 
00630 void TimerTick(){
00631     //OE = HIGH;
00632     //DisplayMode = 1 3段階表示ならば
00633     if(DisplayMode == 1){
00634         if (ChangeCount == 0){
00635             CopyBuffer(LEDBuffer,LEDMainBuffer);
00636             ChangeCount = ChangeCount + 1;
00637         }else if(ChangeCount == 1 ){
00638             CopyBuffer(LEDBuffer2,LEDMainBuffer);
00639             ChangeCount = ChangeCount + 1;
00640             //ChangeCount = 0;
00641         }else if(ChangeCount == 2){
00642             CopyBuffer(LEDBuffer3,LEDMainBuffer);
00643             ChangeCount = 0;
00644         }else{
00645             ChangeCount = 0;
00646         }   
00647     }
00648     //DisplayMode = 2 2段階表示ならば
00649     //次駅表示なし2段階表示に使用
00650     
00651     if (DisplayMode == 2){
00652         
00653         if(ChangeCount == 0 ){
00654             //CopyBuffer(LEDBuffer,LEDMainBuffer);
00655             CopyBuffer(LEDBuffer5,LEDMainBuffer);
00656             ChangeCount = ChangeCount + 1;
00657         }else if(ChangeCount == 1){
00658             //CopyBuffer(LEDBuffer2,LEDMainBuffer);
00659             CopyBuffer(LEDBuffer6,LEDMainBuffer);     
00660             ChangeCount = 0;
00661         }else{
00662             ChangeCount = 0;
00663         }    
00664     }
00665     //DisplayMode = 3 ならば LEDBuffer2を固定表示
00666     if (DisplayMode == 3){
00667         CopyBuffer(LEDBuffer,LEDMainBuffer);
00668         ChangeCount = 1;
00669     }
00670     
00671     //2段階表示 次駅表示あり、路線名なしパターンに使用
00672     if(DisplayMode == 4){    
00673         if(ChangeCount == 1 ){
00674             CopyBuffer(LEDBuffer2,LEDMainBuffer);
00675             ChangeCount = ChangeCount + 1;
00676         }else{
00677             CopyBuffer(LEDBuffer3,LEDMainBuffer);
00678             ChangeCount = 1;
00679         }  
00680     }
00681 
00682     //DisplayMode = 5 5段階表示ならば
00683     if(DisplayMode == 5){
00684         if (ChangeCount == 0){
00685             CopyBuffer(LEDBuffer,LEDMainBuffer);
00686             ChangeCount = ChangeCount + 1;
00687         }else if(ChangeCount == 1 ){
00688             CopyBuffer(LEDBuffer4,LEDMainBuffer);
00689             ChangeCount = ChangeCount + 1;
00690             //ChangeCount = 0;
00691         }else if(ChangeCount == 2){
00692             CopyBuffer(LEDBuffer2,LEDMainBuffer);
00693             ChangeCount = ChangeCount + 1;
00694         }else if(ChangeCount == 3){
00695             CopyBuffer(LEDBuffer3,LEDMainBuffer);
00696             ChangeCount = 0;
00697         }else{
00698             ChangeCount = 0;
00699         }
00700     }
00701 
00702     //OE = LOW;
00703     //クロック確認
00704     //pc.printf("CPU SystemCoreClock is %.2f MHz\r\n", (float)SystemCoreClock/1000/1000); 
00705 }
00706 
00707 void TestDisplayTimerTick(){
00708     
00709     if (ChangeCountTest <= 10){
00710         sprintf(SDFilePath,"/sd/E233/LEDTest/LEDTest%d.bin",ChangeCountTest);
00711         OE = HIGH;
00712         SDBufferWrite(LEDMainBuffer,0,0,128,32,0);
00713         OE = LOW;
00714         ChangeCountTest = ChangeCountTest + 1;
00715     }else{
00716         ChangeCountTest = 0;
00717     }
00718     
00719 }
00720 
00721 void ScrollTimerTick(){
00722     if(ScrollCount < ScrollWriteCount + 80){    
00723         CopyScrollBuffer(ScrollBuffer,LEDMainBuffer,ScrollCount);
00724         ScrollCount = ScrollCount + 1;
00725     }else{
00726         ScrollCount = 0;
00727     }
00728 }
00729 
00730 
00731 
00732 
00733 
00734 void ScrollRead2(){
00735     //スクロールカウンタを0に戻す
00736     ScrollCount = 0;
00737     //スクロールバッファ初期化
00738     for(int i = 0; i < 2048; i++){
00739         for(int j = 0; j < 16; j++){
00740             ScrollBuffer[j][i] = 0;
00741         }
00742     }
00743 
00744     
00745     //test
00746     //Initialize StopStationCode
00747     for (int x = 0; x < MaxStopStation; x++){
00748         StopStationCode[x]= 0;
00749     }
00750     
00751     int DeptStaIndex = 0;
00752     int TermStaIndex = 0;
00753     //sprintf(SDFilePath,"/sd/E233/RoutePattern/RoutePattern%d.bin",1);
00754     //sprintf(SDFilePath,"/sd/E233/RoutePattern/RoutePattern001001.bin");
00755     sprintf(SDFilePath,"/sd/E233/RoutePattern/RoutePattern%03d%03d.bin",LineNumber,RoutePatternNumber);
00756     pc.printf("%s\r\n",SDFilePath);
00757      
00758     //始発駅インデックス取得
00759     for(int i = 0; i < MaxStopStation; i++){
00760         FILE *fp = fopen(SDFilePath, "r");
00761         if(fp == NULL) {
00762             //停車駅データを読み込めないならスクロールを無効にする
00763             pc.printf("SDFileOpen Error %s\r\n",SDFilePath);
00764             Scroll = 0;
00765             break;   
00766         }else{
00767             //停車駅コード取得
00768             int test = 0;
00769             int test2 = 0;
00770             fseek(fp, i*2 + 4, SEEK_SET);
00771             test = getc(fp);
00772             test = test << 8;
00773 
00774             fseek(fp, i*2 + 4 + 1, SEEK_SET);
00775             test2 = getc(fp); 
00776             test = test ^ test2;    
00777             fclose(fp); 
00778             if(test == DeptStaNumber){
00779                 DeptStaIndex = i + 1;
00780                 pc.printf("DeptStaIndex:%d\r\n",DeptStaIndex);
00781                 pc.printf("break\r\n");
00782                 break;
00783                 
00784             }
00785         }
00786         pc.printf("DeptSta-loopcount:%d\r\n",i);
00787     }
00788     
00789     //終着駅インデックス取得
00790     for(int i = 0; i < MaxStopStation; i++){
00791         FILE *fp = fopen(SDFilePath, "r");
00792         if(fp == NULL) {
00793             //停車駅データを読み込めないならスクロールを無効にする
00794             pc.printf("SDFileOpen Error %s\r\n",SDFilePath);
00795             Scroll = 0;
00796             break;   
00797         }else{
00798             //停車駅コード取得
00799             int test = 0;
00800             int test2 = 0;
00801             fseek(fp, i*2 + 4, SEEK_SET);
00802             test = getc(fp);
00803             test = test << 8;
00804 
00805             fseek(fp, i*2 + 4 + 1, SEEK_SET);
00806             test2 = getc(fp); 
00807             test = test ^ test2;    
00808             fclose(fp); 
00809             if(test == TermStaNumber){
00810                 TermStaIndex = i + 1;
00811                 pc.printf("TermStaIndex:%d\r\n",TermStaIndex);
00812                 pc.printf("break\r\n");
00813                 break;
00814                 
00815             }
00816         }
00817         pc.printf("TermSta-loopcount:%d\r\n",i);
00818     }
00819         
00820     
00821     if(DeptStaIndex != 0 && TermStaIndex != 0){
00822         //SDRead StopStationCode
00823         //始発駅インデックス < 終着駅インデックスなら
00824         if(DeptStaIndex < TermStaIndex){
00825             for(int i = 0; i < MaxStopStation; i++){
00826                 //停車駅コード取得
00827                 int test = 0;
00828                 int test2 = 0;
00829         
00830                 FILE *fp = fopen(SDFilePath, "r");
00831                 if(fp == NULL) {
00832                     //停車駅データを読み込めないならスクロールを無効にする
00833                     pc.printf("SDFileOpen Error %s\r\n",SDFilePath);
00834                     Scroll = 0;
00835                     break;    
00836                 }else{
00837                     //pc.printf("SDFileOpen Success %s\r\n",SDFilePath);
00838                     fseek(fp, DeptStaIndex*2 + i*2 + 4, SEEK_SET);
00839                     test = getc(fp);
00840                     test = test << 8;
00841 
00842                     fseek(fp, DeptStaIndex*2 + i*2 + 4 + 1, SEEK_SET);
00843                     test2 = getc(fp); 
00844                     test = test ^ test2;
00845             
00846                     StopStationCode[i] = test;
00847                     pc.printf("StopStationCode[%d]:%d\r\n",i,StopStationCode[i]);
00848               
00849                     //読み込んだ駅名コードが終着駅コードと同じならばループを抜ける  
00850                     if(StopStationCode[i] == TermStaNumber){
00851                         break;
00852                     }           
00853                     fclose(fp); 
00854                 }
00855             }
00856         }
00857         
00858         
00859               
00860     }else{
00861     //始発駅インデックス、終着駅インデックスのどちらか、または両方が0の場合運用パターンデータに駅名コードが存在しない
00862         pc.printf("Error DeptStaIndex or TermStaIndex = 0\r\n");
00863         pc.printf("Error DeptStaIndex:%d,TermStaIndex:%d",DeptStaIndex,TermStaIndex);
00864         Scroll = 0;
00865     }  
00866         
00867     //test end    
00868              
00869     //ScrollDebug
00870      ScrollWriteCount = 80;
00871     
00872     //この電車の停車駅は、
00873     sprintf(SDFilePath,"/sd/E233/StopStation/StopStation%d.bin",1);
00874     SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,80,16);
00875     ScrollWriteCount = ScrollWriteCount + 80;   
00876     sprintf(SDFilePath,"/sd/E233/StopStation/StopStation%d.bin",2);
00877     SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,80,16);       
00878     ScrollWriteCount = ScrollWriteCount + 80;  
00879 
00880     int StaNameLength = 0;
00881     for(int i = 0; i < MaxStopStation; i++){        
00882         if(StopStationCode[i] == 0){
00883             //駅名コードが0ならScrollWriteCountから終着駅の文字数 x 16 + 16 を引いてループを抜ける
00884             ScrollWriteCount = ScrollWriteCount - (StaNameLength * 16 + 16);  
00885             break;
00886         }
00887         //駅名
00888         sprintf(SDFilePath,"/sd/E233/StationName/%d.bin",StopStationCode[i]);
00889         SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,128,16);
00890         
00891         //駅名文字数取得
00892         //int test = 0;
00893         sprintf(SDFilePath,"/sd/E233/StationNameLength.bin");
00894         FILE *fp = fopen(SDFilePath, "r");
00895         if(fp == NULL) {
00896             pc.printf("SDFileOpen Error %s\r\n",SDFilePath);
00897         }else{
00898             //pc.printf("SDFileOpen Success %s\r\n",SDFilePath);
00899             fseek(fp, StopStationCode[i], SEEK_SET);
00900             StaNameLength = getc(fp);
00901             //pc.printf("StationNameLength:%d\r\n",StaNameLength);
00902             fclose(fp); 
00903         }
00904                
00905         ScrollWriteCount = ScrollWriteCount + (StaNameLength * 16);  
00906         sprintf(SDFilePath,"/sd/E233/StopStation/0x8132.bin");
00907         SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,16,16);       
00908         ScrollWriteCount = ScrollWriteCount + 16;      
00909     }
00910     
00911     
00912     
00913     ScrollWriteCount = ScrollWriteCount - 16;
00914     sprintf(SDFilePath,"/sd/E233/StopStation/StopStation%d.bin",3);
00915     SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,80,16);       
00916     ScrollWriteCount = ScrollWriteCount + 80;     
00917     sprintf(SDFilePath,"/sd/E233/StopStation/StopStation%d.bin",4);
00918     SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,80,16);       
00919     ScrollWriteCount = ScrollWriteCount + 80;   
00920     
00921     }
00922 
00923 
00924 void SDFileRead(){
00925     //バッファ初期化
00926     ClearBuffer(LEDBuffer);
00927     ClearBuffer(LEDBuffer2);
00928     ClearBuffer(LEDBuffer3);
00929     ClearBuffer(LEDBuffer4);
00930     ClearBuffer(LEDBuffer5);
00931     ClearBuffer(LEDBuffer6);
00932     
00933     
00934     //3段階表示 LEDBuffer  [種別]路線名(・次駅)
00935     //         LEDBuffer2 [種別]行先・次駅
00936     //         LEDBuffer3 [種別(英)]行先(英)・次駅(英)
00937     //路線コードが0なら2段階表示に変更
00938     if(LineNumber == 0){
00939         DisplayMode = 4;
00940     }else{
00941         DisplayMode = 1;
00942     }
00943 
00944     //SDCard
00945     //種別
00946     sprintf(SDFilePath,"/sd/E233/Kind/%d.bin",KindNumber);
00947     SDBufferWrite(LEDBuffer,0,0,48,32,0);
00948     sprintf(SDFilePath,"/sd/E233/Kind/%d.bin",KindNumber);
00949     SDBufferWrite(LEDBuffer2,0,0,48,32,0);    
00950     //種別(英語)
00951     sprintf(SDFilePath,"/sd/E233/KindE/%d.bin",KindNumber);
00952     SDBufferWrite(LEDBuffer3,0,0,48,32,0); 
00953            
00954     //路線名
00955     sprintf(SDFilePath,"/sd/E233/Line/%d.bin",LineNumber);
00956     //路線名データが読み込めない場合(返って来た値が0でない場合)2段階表示に変更
00957     if(SDBufferWrite(LEDBuffer,48,0,80,32,0) != 0){
00958         DisplayMode = 4;
00959     }
00960     
00961     //行先
00962     sprintf(SDFilePath,"/sd/E233/For/%d.bin",ForNumber);
00963     SDBufferWrite(LEDBuffer2,48,0,80,16,0);
00964     //行先(英語)
00965     //sprintf(SDFilePath,"/sd/E233/ForE/%d.bin",ForNumber);
00966     //SDBufferWrite(LEDBuffer3,48,0,80,16,0);
00967     sprintf(SDFilePath,"/sd/E233/For/%d.bin",ForNumber);
00968     SDBufferWrite(LEDBuffer3,48,0,80,16,1280);    
00969     
00970     //次停車駅(路線名表示)
00971     //路線名表示の次停車駅は路線名表示が上半分に収まるときのみ表示
00972     if(BufferBlankCheck() == 0){
00973         sprintf(SDFilePath,"/sd/E233/NextStation/%d.bin",NextStaNumber);
00974         SDBufferWrite(LEDBuffer,48,16,80,16,0);
00975     }else if(Scroll == 1){
00976         //路線名が下半分も使用している&スクロール有効の場合4段階表示に切り替え
00977         DisplayMode = 5;
00978         sprintf(SDFilePath,"/sd/E233/Kind/%d.bin",KindNumber);
00979         SDBufferWrite(LEDBuffer4,0,0,48,32,0);       
00980         sprintf(SDFilePath,"/sd/E233/Line/%d.bin",LineNumber);
00981         SDBufferWrite(LEDBuffer4,48,0,80,16,1280);        
00982     }
00983     //次停車駅
00984     sprintf(SDFilePath,"/sd/E233/NextStation/%d.bin",NextStaNumber);
00985     SDBufferWrite(LEDBuffer2,48,16,80,16,0);    
00986     //次停車駅(英語)
00987     //sprintf(SDFilePath,"/sd/E233/NextStationE/%d.bin",NextStaNumber);
00988     //SDBufferWrite(LEDBuffer3,48,16,80,16,0);   
00989     sprintf(SDFilePath,"/sd/E233/NextStation/%d.bin",NextStaNumber);
00990     SDBufferWrite(LEDBuffer3,48,16,80,16,1280);     
00991     
00992         
00993 
00994     
00995     //2段階(次駅なし)
00996     //次駅コードが0なら次駅なしの2段階表示に変更
00997     // 2段階表示 LEDBuffer5 [種別]行先(次駅表示なし) 
00998     //          LEDBuffer6 [種別]路線名
00999     //路線名がない場合(E233-0など)は固定表示
01000 
01001     if(NextStaNumber == 0){
01002         //種別
01003         sprintf(SDFilePath,"/sd/E233/Kind/%d.bin",KindNumber);
01004         //SDBufferWrite(LEDBuffer,0,0,48,32,0);
01005         //SDBufferWrite(LEDBuffer2,0,0,48,32,0);
01006         SDBufferWrite(LEDBuffer5,0,0,48,32,0);
01007         SDBufferWrite(LEDBuffer6,0,0,48,32,0);        
01008     
01009        //路線名
01010         sprintf(SDFilePath,"/sd/E233/Line2/%d.bin",LineNumber);
01011         //SDBufferWrite(LEDBuffer2,48,0,80,32,0);
01012         SDBufferWrite(LEDBuffer6,48,0,80,32,0);
01013         //行先
01014         sprintf(SDFilePath,"/sd/E233/For2/%d.bin",ForNumber);
01015         //SDBufferWrite(LEDBuffer,48,0,80,32,0);
01016         SDBufferWrite(LEDBuffer5,48,0,80,32,0);       
01017         
01018         //路線コードが0なら行先で固定表示       
01019         if(LineNumber == 0){
01020             DisplayMode = 3;
01021         }else{
01022             DisplayMode = 2;
01023         }    
01024     }
01025     
01026     
01027     //全面種別固定表示
01028     //路線名、行先、次駅がすべて0なら種別を全面に固定表示
01029     if(LineNumber == 0 && ForNumber == 0 && NextStaNumber == 0){
01030         
01031         //種別
01032         sprintf(SDFilePath,"/sd/E233/Kind/%d.bin",KindNumber);
01033         SDBufferWrite(LEDBuffer,0,0,48,32,0);
01034         sprintf(SDFilePath,"/sd/E233/Kind2/%d.bin",KindNumber);
01035         SDBufferWrite(LEDBuffer,0,0,128,32,0);        
01036         //固定表示に変更       
01037         DisplayMode = 3;
01038     }
01039     
01040     //全面行先固定表示
01041     //DisplayMode:3 固定表示 LEDBuffer 行先(次駅表示なし 32x128)
01042     //路線名、種別、次駅がすべて0なら行先を全面に固定表示
01043     if(LineNumber == 0 && KindNumber == 0 && NextStaNumber == 0){
01044         //データ作ってないからとりあえず80x32の行先データを表示
01045         //前面行先データフォルダ:For3
01046         
01047         sprintf(SDFilePath,"/sd/E233/For3/%d.bin",ForNumber);
01048         SDBufferWrite(LEDBuffer,0,0,128,32,0);          
01049         //固定表示に変更 
01050         DisplayMode = 3;
01051     }
01052     
01053         //Debug
01054     if(Debug == 1){
01055         //DataSerialOut
01056         for(int y = 0; y < 32; y++){
01057             for(int x = 0; x <128; x++){
01058                 if(LEDBuffer[y][x]== 0){
01059                     //pc.printf("0,"); 
01060                     pc.printf("  "); 
01061                 }else{
01062                     //pc.printf("#"); 
01063                     pc.printf("%.02d",LEDBuffer[y][x]); 
01064                 }
01065             }
01066             pc.printf("\r\n");           
01067         }
01068     }
01069     
01070 }
01071 
01072 
01073 int CharToInt(unsigned char Sertemp1,unsigned char Sertemp2,unsigned char Sertemp3){
01074     int n1 = 0 ;
01075     int n2 = 0 ;
01076     int n3 = 0 ;
01077     int n = 0;
01078     
01079     if ( Sertemp1 < '0' || Sertemp1 > '9' ) {
01080         // error
01081     } else {
01082         n1 = (int)(Sertemp1 - '0') ;
01083         //pc.printf("%d,",n1); 
01084     }      
01085     if ( Sertemp2 < '0' || Sertemp2 > '9' ) {
01086         // error
01087     } else {
01088         n2 = (int)(Sertemp2 - '0') ;
01089         //pc.printf("%d,",n2); 
01090     }         
01091     if ( Sertemp3 < '0' || Sertemp3 > '9' ) {
01092         // error
01093     } else {
01094         n3 = (int)(Sertemp3 - '0') ;
01095         //pc.printf("%d\r\n",n3); 
01096     }
01097     n = (n1 * 100) + (n2 * 10) + n3;
01098     return n;
01099     }
01100     
01101     
01102 void pc_rx(){
01103     //pc.putc(pc.getc());
01104     
01105     OE = HIGH;
01106     
01107     if (pc.readable() == 1) { // 受信したデータが存在する
01108         if (busyflag == false){
01109             SerialBuffer[count] = pc.getc(); // 受信データを読み込む
01110             
01111         }else{
01112             pc.printf("busy\r\n");
01113         }
01114         
01115         if (count > 29 || SerialBuffer[count] == '$') { // 文字数が既定の個数を超えた場合、又は終了文字を受信した場合
01116             busyflag = true;
01117             
01118             //SerialBuffer[count] = '\0';                    // 末尾に終端文字を入れる
01119             
01120             for(int a = 0; a < count; a++){
01121                 ABuffer[a] = SerialBuffer[a];
01122             }
01123             
01124             count = 0; 
01125             
01126             //路線名 L
01127             if(ABuffer[0] == 'L'){
01128                 //路線名 L
01129                 //ABuffer[0]は'L'
01130                 LineNumber = CharToInt(ABuffer[1],ABuffer[2],ABuffer[3]);
01131                 pc.printf("Line:%d\r\n",LineNumber);     
01132             }
01133             
01134             //種別 K
01135             if(ABuffer[0] == 'K'){
01136                 //種別 K
01137                 //ABuffer[0]は'K'
01138                 KindNumber = CharToInt(ABuffer[1],ABuffer[2],ABuffer[3]);
01139                 pc.printf("Kind:%d\r\n",KindNumber); 
01140             }
01141             
01142             //行先 F
01143             if(ABuffer[0] == 'F'){
01144                 //行先 F
01145                 //ABuffer[0]は'F'
01146                 ForNumber = CharToInt(ABuffer[1],ABuffer[2],ABuffer[3]);
01147                 pc.printf("For:%d\r\n",ForNumber);  
01148             }
01149             
01150             //次停車駅 N
01151             if(ABuffer[0] == 'N'){
01152                 //次停車駅 N
01153                 //ABuffer[0]は'N'                  
01154                 NextStaNumber = CharToInt(ABuffer[1],ABuffer[2],ABuffer[3]);
01155                 pc.printf("NextStation:%d\r\n",NextStaNumber);
01156             }
01157             
01158 
01159             
01160             //起動 Set
01161             if(ABuffer[0] == 'S' && ABuffer[1] == 'e' && ABuffer[2] == 't'){
01162                 pc.printf("Set\r\n"); 
01163                 SDFileRead();
01164             }else if(ABuffer[0] == 'S'){
01165                 //スクロール有効/無効 S
01166                 unsigned char Sertemp1 = ABuffer[1];
01167                 int n1 = 0 ;
01168                 int n = 0;
01169                 
01170                 if ( Sertemp1 < '0' || Sertemp1 > '9' ) {
01171                     // error
01172                 } else {
01173                     n1 = (int)(Sertemp1 - '0') ;
01174                     //pc.printf("%d,",n1); 
01175                 } 
01176                      
01177                 n = n1;
01178                 Scroll = n;
01179                 pc.printf("Scroll:%d\r\n",n);     
01180             }
01181             
01182             //データ一括設定
01183             //先頭文字:'A'
01184             if(ABuffer[0] == 'A'){
01185                 //路線名 L
01186                 //ABuffer[1]は'L'
01187                 LineNumber = CharToInt(ABuffer[2],ABuffer[3],ABuffer[4]);
01188                 pc.printf("Line:%d\r\n",LineNumber);
01189                 
01190                 //種別 K
01191                 //ABuffer[5]は'K'
01192                 KindNumber = CharToInt(ABuffer[6],ABuffer[7],ABuffer[8]);
01193                 pc.printf("Kind:%d\r\n",KindNumber);
01194                 
01195                 //行先 F
01196                 //ABuffer[9]は'F'
01197                 ForNumber = CharToInt(ABuffer[10],ABuffer[11],ABuffer[12]);
01198                 pc.printf("For:%d\r\n",ForNumber); 
01199                 
01200                 //次停車駅 N
01201                 //ABuffer[13]は'N'                  
01202                 NextStaNumber = CharToInt(ABuffer[14],ABuffer[15],ABuffer[16]);
01203                 pc.printf("NextStation:%d\r\n",NextStaNumber);
01204                 
01205                 //一括設定時は続けてSDからの読み込み
01206                 pc.printf("Set\r\n"); 
01207                 SDFileRead(); 
01208                 Scroll = 0;
01209                 //即時反映
01210                 TimerTick();                                
01211             }
01212             
01213             //データ一括設定2
01214             //先頭文字:'B'
01215             //BLxxxNxxxPxxxyyyzzzKxxxFxxxSx$
01216             //Lxxx:路線コード
01217             //Nxxx:次駅コード
01218             //Pxxxyyyzzz:停車駅パターン(xxx:運用パターン番号 yyy:始発駅コード zzz:終着駅コード)
01219             //Kxxx:種別コード
01220             //Fxxx:行先コード
01221             //Sx:スクロール(1:有効 0:無効)
01222             if(ABuffer[0] == 'B'){
01223                 //路線名 L
01224                 //ABuffer[1]は'L'
01225                 LineNumber = CharToInt(ABuffer[2],ABuffer[3],ABuffer[4]);
01226                 pc.printf("Line:%d\r\n",LineNumber);
01227                 
01228                 //次停車駅 N
01229                 //ABuffer[5]は'N'                  
01230                 NextStaNumber = CharToInt(ABuffer[6],ABuffer[7],ABuffer[8]);
01231                 pc.printf("NextStation:%d\r\n",NextStaNumber);
01232                 
01233                 //運用パターン P
01234                 //Pxxxyyyzzz
01235                 //x:運用パターン番号(3桁)
01236                 //y:始発駅(3桁)
01237                 //z:終着駅(3桁)
01238                 //ABuffer[9]は'P'                  
01239                 RoutePatternNumber = CharToInt(ABuffer[10],ABuffer[11],ABuffer[12]);
01240                 pc.printf("RoutePattern:%d\r\n",RoutePatternNumber);                
01241                 
01242                 DeptStaNumber = CharToInt(ABuffer[13],ABuffer[14],ABuffer[15]);
01243                 pc.printf("DeptStaNumber:%d\r\n",DeptStaNumber); 
01244                 TermStaNumber = CharToInt(ABuffer[16],ABuffer[17],ABuffer[18]);
01245                 pc.printf("TermStaNumber:%d\r\n",TermStaNumber); 
01246                 
01247                 //種別 K
01248                 //ABuffer[19]は'K'                  
01249                 KindNumber = CharToInt(ABuffer[20],ABuffer[21],ABuffer[22]);
01250                 pc.printf("Kind:%d\r\n",KindNumber); 
01251                 
01252                 //行先 F
01253                 //ABuffer[23]は'F'                  
01254                 ForNumber = CharToInt(ABuffer[24],ABuffer[25],ABuffer[26]);
01255                 pc.printf("For:%d\r\n",ForNumber);      
01256                 
01257                 //スクロール S
01258                 if(ABuffer[27] == 'S'){
01259                 //スクロール有効/無効 S
01260                     unsigned char Sertemp1 = ABuffer[28];
01261                     int n1 = 0 ;
01262                     int n = 0;
01263                 
01264                     if ( Sertemp1 < '0' || Sertemp1 > '9' ) {
01265                         // error
01266                     } else {
01267                         n1 = (int)(Sertemp1 - '0') ;
01268                         //pc.printf("%d,",n1); 
01269                     } 
01270                      
01271                         n = n1;
01272                     Scroll = n;
01273                     pc.printf("Scroll:%d\r\n",n);     
01274                 }                           
01275                        
01276                 
01277                 //一括設定時は続けてSDからの読み込み
01278                 pc.printf("Set\r\n"); 
01279                 SDFileRead(); 
01280                 ScrollRead2();
01281                 //Scroll = 1;
01282                 //即時反映
01283                 TimerTick();                                
01284             }  
01285             busyflag = false;
01286         }else{
01287             count++;
01288         }
01289     }
01290     OE = LOW;
01291 }
01292 
01293 void ScrollRead(){
01294     //test
01295     //Initialize StopStationCode
01296     for (int x = 0; x < MaxStopStation; x++){
01297         StopStationCode[x]= 0;
01298     }
01299     
01300     //SDRead StopStationCode
01301     for(int i = 0; i < MaxStopStation; i++){
01302 
01303         //停車駅コード取得
01304         int test = 0;
01305         int test2 = 0;
01306         sprintf(SDFilePath,"/sd/E233/StopStationList/%d.bin",1);
01307         FILE *fp = fopen(SDFilePath, "r");
01308         if(fp == NULL) {
01309             pc.printf("SDFileOpen Error %s\r\n",SDFilePath);
01310             break;
01311             
01312         }else{
01313             //pc.printf("SDFileOpen Success %s\r\n",SDFilePath);
01314             fseek(fp, i*2, SEEK_SET);
01315             test = getc(fp);
01316             test = test << 8;
01317 
01318             fseek(fp, i*2 + 1, SEEK_SET);
01319             test2 = getc(fp); 
01320             test = test ^ test2;
01321             
01322             StopStationCode[i] = test;
01323             pc.printf("StopStationCode[%d]:%d\r\n",i,StopStationCode[i]);
01324               
01325         if(StopStationCode[i] == 0){
01326             break;
01327         }           
01328             fclose(fp); 
01329         }
01330     }        
01331         
01332     //test end    
01333              
01334     //ScrollDebug
01335      ScrollWriteCount = 80;
01336     
01337     //この電車の停車駅は、
01338     sprintf(SDFilePath,"/sd/E233/StopStation/StopStation%d.bin",1);
01339     SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,80,16);
01340     ScrollWriteCount = ScrollWriteCount + 80;   
01341     sprintf(SDFilePath,"/sd/E233/StopStation/StopStation%d.bin",2);
01342     SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,80,16);       
01343     ScrollWriteCount = ScrollWriteCount + 80;  
01344 
01345     for(int i = 0; i < MaxStopStation; i++){        
01346         if(StopStationCode[i] == 0){
01347             break;
01348         }
01349         //駅名
01350         sprintf(SDFilePath,"/sd/E233/StationName/%d.bin",StopStationCode[i]);
01351         SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,128,16);
01352         
01353         //駅名文字数取得
01354         int test = 0;
01355         sprintf(SDFilePath,"/sd/E233/StationNameLength.bin");
01356         FILE *fp = fopen(SDFilePath, "r");
01357         if(fp == NULL) {
01358             pc.printf("SDFileOpen Error %s\r\n",SDFilePath);
01359         }else{
01360             //pc.printf("SDFileOpen Success %s\r\n",SDFilePath);
01361             fseek(fp, StopStationCode[i], SEEK_SET);
01362             test = getc(fp);
01363             //pc.printf("StationNameLength:%d\r\n",test);
01364             fclose(fp); 
01365         }
01366                
01367         ScrollWriteCount = ScrollWriteCount + (test * 16);  
01368         sprintf(SDFilePath,"/sd/E233/StopStation/0x8132.bin");
01369         SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,16,16);       
01370         ScrollWriteCount = ScrollWriteCount + 16;      
01371     }
01372     ScrollWriteCount = ScrollWriteCount - 16;
01373     sprintf(SDFilePath,"/sd/E233/StopStation/StopStation%d.bin",3);
01374     SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,80,16);       
01375     ScrollWriteCount = ScrollWriteCount + 80;     
01376     sprintf(SDFilePath,"/sd/E233/StopStation/StopStation%d.bin",4);
01377     SDScrollBufferWrite(ScrollBuffer,ScrollWriteCount,0,80,16);       
01378     ScrollWriteCount = ScrollWriteCount + 80;   
01379     
01380     }
01381 
01382 
01383 
01384 
01385 
01386 
01387 int main(){
01388     Init(); // Set things up
01389     //Serial
01390     pc.printf("Power ON\r\n");
01391     
01392     if(Button1 == 0){
01393         //起動時にボタンが押されているならテスト表示モードに移行
01394         pc.printf("DisplayTestMode\r\n");
01395         ChangeTimerTest.attach(&TestDisplayTimerTick,1);
01396         Scroll=0;
01397     
01398     }else{
01399         //通常モード
01400         //SDカードから表示データを読み込み
01401         SDFileRead();
01402     
01403         //起動時にスクロールデータを読み込み
01404         if(ScrollEnable == 1){
01405             ScrollRead2();
01406         }
01407         //表示切替タイマ有効
01408         ChangeTimer.attach(&TimerTick,3);
01409 
01410     }
01411 
01412     
01413     //2段階表示に変更
01414     //DisplayMode = 2;
01415     
01416     //test
01417     //sprintf(SDFilePath,"/sd/E233/whitetest.bin");
01418     //SDBufferWrite(LEDBuffer,0,0,128,32);   
01419     
01420 
01421     //Serial割り込み有効     
01422     pc.attach(pc_rx, Serial::RxIrq);
01423     
01424 
01425     
01426     
01427     while(1) { 
01428         //CT++;
01429         //表示切替は切り替え時にメインバッファに書き込む
01430         Paint(LEDMainBuffer);
01431         
01432         //スクロール
01433         //スクロールが有効なら
01434         if(Scroll == 1){
01435             //if(CT>0) {
01436                 //CT=0; // Start all over.
01437                 OE = HIGH;
01438                 ScrollTimerTick();
01439                 OE = LOW;
01440             //}
01441         //}else{
01442             //if(CT>4160){
01443             //    CT=0;
01444             //}
01445         }
01446         //PaintOFF();
01447     }
01448 }