Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Tue Jul 26 2022 19:24:31 by
1.7.2