kohacraft Lab / Mbed 2 deprecated kc_matrixclock

Dependencies:   Kc_TLC5940 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "TLC5940.h"
00003 SPI driver( dp2 , dp1 , dp6 );  //mosi , miso , sck
00004 DigitalOut vprg = dp4;
00005 DigitalOut xlat = dp9;
00006 DigitalOut blank = dp10;
00007 PwmOut gsclk = dp1;
00008 int num_ics = 1;    //何個5940がつながっているか
00009 
00010 #include "font.h"
00011 
00012 DigitalOut col1 = dp11;
00013 DigitalOut col2 = dp13;
00014 DigitalOut col3 = dp14;
00015 DigitalOut col4 = dp15;
00016 DigitalOut col5 = dp16;
00017 DigitalOut col6 = dp17;
00018 DigitalOut col7 = dp18;
00019 DigitalOut col8 = dp26;
00020 
00021 DigitalIn fastSw = dp28;
00022 DigitalIn slowSw = dp25;
00023 
00024 #define dispTime 10
00025 #define fastCount 500
00026 #define slowCount 50
00027 #define brightChange 1
00028 #define brightMax 2024
00029 
00030 int brightCangeValue;
00031 
00032 Ticker secTick;
00033 
00034 int min;//
00035 int hour =1;//
00036 unsigned short LEDS[16];
00037 
00038 //時間の数字をドッドの数字に変換
00039 unsigned char hourDecfont( int num , int colm )
00040 {
00041     unsigned char fontTemp = 0;
00042     unsigned char fontTemp2 = 0;
00043     int numTemp = 0 ;
00044     numTemp = num / 10;
00045     if( numTemp >0 )
00046     {
00047         fontTemp = font[ numTemp ][ colm ];
00048         fontTemp = fontTemp << 5;
00049     }
00050     numTemp = num - numTemp*10;
00051     fontTemp2 = font[ numTemp ][ colm ];
00052     fontTemp2 = fontTemp2 << 2;
00053     fontTemp = fontTemp | fontTemp2 | font[ 10 ][ colm ];
00054     
00055     return fontTemp;
00056 }
00057 
00058 //数字をドッドの数字に変換
00059 unsigned char decfont( int num , int colm )
00060 {
00061     unsigned char fontTemp = 0;
00062     int numTemp = 0 ;
00063     numTemp = num / 10;
00064     fontTemp = font[ numTemp ][ colm ];
00065     fontTemp = fontTemp << 4;
00066     numTemp = num - numTemp*10;
00067     fontTemp = fontTemp | font[ numTemp ][ colm ];
00068     
00069     return fontTemp;
00070 }
00071   
00072 
00073 void fontOut( unsigned char font )
00074 {
00075     unsigned char mask = 0x01;
00076     unsigned char temp = font;
00077     col1 = ( temp & mask );
00078     mask = mask << 1;
00079     col2 = ( temp & mask );
00080     mask = mask << 1;
00081     col3 = ( temp & mask );
00082     mask = mask << 1;
00083     col4 = ( temp & mask );
00084     mask = mask << 1;
00085     col5 = ( temp & mask );
00086     mask = mask << 1;
00087     col6 = ( temp & mask );
00088     mask = mask << 1;
00089     col7 = ( temp & mask );
00090     mask = mask << 1;
00091     col8 = ( temp & mask );
00092 }
00093 
00094 //カウントアップ
00095 void minUp()
00096 {
00097     for( int bright = brightMax ; bright > 0; bright-=brightCangeValue )
00098     { 
00099         for( int colmn=0 ; colmn<16 ; colmn++ )
00100         {
00101             brightCangeValue = brightChange;
00102             if( fastSw == 1 )
00103             {
00104                 brightCangeValue = fastCount;
00105                 secTick.detach();
00106                 secTick.attach(&minUp, 60.0);   //スイッチが押されている間は自動で進まないようにTickをリセット
00107             }
00108             if( slowSw == 1 )
00109             {
00110                 brightCangeValue = slowCount;
00111                 secTick.detach();
00112                 secTick.attach(&minUp, 60.0);
00113             }
00114                 
00115             for( int h=0; h<16 ; h++ )
00116                 LEDS[h] = 0;
00117             LEDS[colmn] = (unsigned short)bright;
00118             offDisp(blank, gsclk);
00119             if( colmn<8 )
00120                 fontOut( decfont( min , colmn ) );
00121             else
00122                 fontOut( hourDecfont( hour , colmn-8 ) );
00123             update_led (driver, xlat, blank, gsclk , LEDS);
00124             wait_us(dispTime);
00125         }
00126     }
00127     
00128     //1分増加させる 60になったら1時間増やす 12時間を超えたら1時に戻す
00129     min += 1;
00130     if( min >= 60 )
00131     {
00132         min = 0;
00133         hour++;
00134         if( hour > 12 )
00135             hour = 1;
00136     }
00137     
00138     for( int bright = 0 ; bright < brightMax; bright+=brightCangeValue )
00139     {
00140         for( int colmn=0 ; colmn<16 ; colmn++ )
00141         {
00142             //PWMをクリア
00143             for( int h=0; h<16 ; h++ )
00144                 LEDS[h] = 0;
00145             LEDS[colmn] = (unsigned short)bright;    //必要なピンのみ指定した明るさでON
00146             offDisp(blank, gsclk);          //PWM強制OFF
00147             if( colmn<8 )
00148                 fontOut( decfont( min , colmn ) );
00149             else
00150                 fontOut( hourDecfont( hour , colmn-8 ) );
00151             update_led (driver, xlat, blank, gsclk , LEDS);
00152             wait_us(dispTime);
00153         }
00154     }
00155 
00156 }
00157 
00158 
00159 
00160 int main() {
00161     initFont();
00162     
00163     setup (driver, vprg, xlat, blank, gsclk, num_ics );
00164     brightCangeValue = brightChange;
00165     secTick.attach(&minUp, 60.0);   //1分でカウントアップ処理を行う
00166     
00167     while(1)
00168     {
00169         //スイッチが押された時の処理
00170         if( fastSw == 1 )
00171             minUp();
00172         if( slowSw == 1 )
00173             minUp();
00174         
00175         //16行分ダイナミック点灯させる
00176         for( int colmn=0 ; colmn<16 ; colmn++ )
00177         {
00178                 
00179             for( int h=0; h<16 ; h++ )
00180                 LEDS[h] = 0;
00181             LEDS[colmn] = (unsigned short)brightMax;
00182             offDisp(blank, gsclk);
00183             if( colmn<8 )
00184                 fontOut( decfont( min , colmn ) );
00185             else
00186                 fontOut( hourDecfont( hour , colmn-8 ) );
00187             update_led (driver, xlat, blank, gsclk , LEDS);
00188             wait_us(dispTime);
00189         }
00190     }
00191 }