dot Matrix Led Clock with TLC5940

Dependencies:   Kc_TLC5940 mbed

main.cpp

Committer:
kohacraft
Date:
2015-07-28
Revision:
0:c61e5f0d54c1
Child:
1:7afb65e75dcd

File content as of revision 0:c61e5f0d54c1:

#include "mbed.h"
#include "TLC5940.h"
SPI driver( dp2 , dp1 , dp6 );  //mosi , miso , sck
DigitalOut vprg = dp4;
DigitalOut xlat = dp9;
DigitalOut blank = dp10;
PwmOut gsclk = dp1;
int num_ics = 1;    //何個5940がつながっているか

#include "font.h"

DigitalOut col1 = dp11;
DigitalOut col2 = dp13;
DigitalOut col3 = dp14;
DigitalOut col4 = dp15;
DigitalOut col5 = dp16;
DigitalOut col6 = dp17;
DigitalOut col7 = dp18;
DigitalOut col8 = dp26;

DigitalIn fastSw = dp28;
DigitalIn slowSw = dp25;

#define dispTime 10
#define fastCount 1024
#define slowCount 50

//時間の数字をドッドの数字に変換
unsigned char hourDecfont( int num , int colm )
{
    unsigned char fontTemp = 0;
    unsigned char fontTemp2 = 0;
    int numTemp = 0 ;
    numTemp = num / 10;
    if( numTemp >0 )
    {
        fontTemp = font[ numTemp ][ colm ];
        fontTemp = fontTemp << 5;
    }
    numTemp = num - numTemp*10;
    fontTemp2 = font[ numTemp ][ colm ];
    fontTemp2 = fontTemp2 << 2;
    fontTemp = fontTemp | fontTemp2 | font[ 10 ][ colm ];
    
    return fontTemp;
}

//数字をドッドの数字に変換
unsigned char decfont( int num , int colm )
{
    unsigned char fontTemp = 0;
    int numTemp = 0 ;
    numTemp = num / 10;
    fontTemp = font[ numTemp ][ colm ];
    fontTemp = fontTemp << 4;
    numTemp = num - numTemp*10;
    fontTemp = fontTemp | font[ numTemp ][ colm ];
    
    return fontTemp;
}
  

void fontOut( unsigned char font )
{
    unsigned char mask = 0x01;
    unsigned char temp = font;
    col1 = ( temp & mask );
    mask = mask << 1;
    col2 = ( temp & mask );
    mask = mask << 1;
    col3 = ( temp & mask );
    mask = mask << 1;
    col4 = ( temp & mask );
    mask = mask << 1;
    col5 = ( temp & mask );
    mask = mask << 1;
    col6 = ( temp & mask );
    mask = mask << 1;
    col7 = ( temp & mask );
    mask = mask << 1;
    col8 = ( temp & mask );
}
int main() {
    
    initFont();
    
    setup (driver, vprg, xlat, blank, gsclk, num_ics );
    
    unsigned short LEDS[16];
    while(1)
    {
        for( int l =1 ; l<13 ; l++ )
            {
            for( int k=0 ; k<60 ; k++)
            {
                for( int j = 0 ; j < 1024; j+=2 )
                {
                    if( fastSw == 1 )
                        j+=fastCount;
                    if( slowSw == 1 )
                        j+=slowCount;
                    for( int i=0 ; i<16 ; i++ )
                    {
                        //PWMをクリア
                        for( int h=0; h<16 ; h++ )
                            LEDS[h] = 0;
                        LEDS[i] = (unsigned short)j;    //必要なピンのみ指定した明るさでON
                        offDisp(blank, gsclk);          //PWM強制OFF
                        if( i<8 )
                            fontOut( decfont( k , i ) );
                        else
                            fontOut( hourDecfont( l , i-8 ) );
                        update_led (driver, xlat, blank, gsclk , LEDS);
                        wait_us(dispTime);
                    }
                }
                for( int j = 1024 ; j > 0; j-=2 )
                { 
                    if( fastSw == 1 )
                        j-= fastCount;
                    if( slowSw == 1 )
                        j-=slowCount;
                    for( int i=0 ; i<16 ; i++ )
                    {
                        for( int h=0; h<16 ; h++ )
                            LEDS[h] = 0;
                        LEDS[i] = (unsigned short)j;
                        offDisp(blank, gsclk);
                        if( i<8 )
                            fontOut( decfont( k , i ) );
                        else
                            fontOut( hourDecfont( l , i-8 ) );
                        update_led (driver, xlat, blank, gsclk , LEDS);
                        wait_us(dispTime);
                    }
                }
            }


        }
    }
}