Dot Matrix LED clock with RTC ver1.0

Dependencies:   ds3231 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TLC5940.cpp Source File

TLC5940.cpp

00001 #include "TLC5940.h"
00002 
00003 SPI driver( dp2 , NC , dp6 );  //mosi , miso , sck
00004 DigitalOut vprg = dp4;
00005 DigitalOut xlat = dp9;
00006 DigitalOut blank = dp10;
00007 //gsclk dp24に接続(CPUクロックの2分周したクロックを利用)
00008 int num_drivers = 1;
00009 
00010 void setup (int num_ics)
00011 {
00012     blank = 1;  //LEDをOFF
00013     
00014     //IO0_1(dp24)をCLKOUTに設定し、gsclkとして利用する
00015     LPC_IOCON->PIO0_1 |= 1;        // PIO0_1をCLKOUTとして使用する
00016     LPC_SYSCON->CLKOUTCLKSEL |= 0x3;    // 0:RC 1:Xtal 2:WDT 3:mainclock
00017     LPC_SYSCON->CLKOUTUEN = 0;          // レジスタ更新
00018     LPC_SYSCON->CLKOUTUEN = 1;
00019     while (!(LPC_SYSCON->CLKOUTUEN & 0x01));
00020     LPC_SYSCON->CLKOUTDIV |= 2;         // 2分周
00021 
00022     
00023     driver.format (6,0);
00024     driver.frequency (20000000);
00025     if (num_ics <= 0)
00026     {
00027         num_drivers = 1;
00028     }
00029     else
00030     {
00031         num_drivers = num_ics;
00032     }
00033 
00034     xlat = 0;               // hold GS/DC data constant
00035     
00036     //補正データを最大に設定
00037     vprg = 1;
00038     for (int i = 0; i<16*num_ics; i++)
00039     {
00040         driver.write (0x3F);   //最大
00041     }
00042     xlat = 1;
00043     xlat = 0;               // hold GS/DC data constant
00044     
00045     driver.format (12,0);
00046     vprg = 0;               // sets drivers to GS mode. Set to 1 to change to DC mode
00047     
00048     blank = 0;
00049  
00050 
00051 }
00052 
00053 
00054 void update_led (unsigned short* LEDS)
00055 {
00056     //blank = 0;
00057     for (int k = (num_drivers - 1); k >= 0; k--)
00058     {
00059         for (int i = (16 - 1); i >= 0; i--)
00060         {
00061             driver.write (*(LEDS + k + i));
00062         }
00063     }
00064     blank = 1;
00065     xlat = 1;
00066     xlat = 0;
00067     blank = 0;
00068     
00069     driver.format (1,0);
00070     driver.write (0);
00071     driver.format (12,0);
00072     wait_us(170);  //4096階調のために必要な時間  4096/24MHz
00073 
00074 }