Dot Matrix LED clock with RTC ver1.0

Dependencies:   ds3231 mbed

Revision:
0:c872b97ce7ea
Child:
1:5577d93280da
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TLC5940.cpp	Tue Aug 11 00:56:37 2015 +0000
@@ -0,0 +1,84 @@
+#include "TLC5940.h"
+
+SPI driver( dp2 , NC , dp6 );  //mosi , miso , sck
+DigitalOut vprg = dp4;
+DigitalOut xlat = dp9;
+DigitalOut blank = dp10;
+//PwmOut gsclk = dp1; gsclkはdp24にマスタークロックの出力を利用する
+int num_drivers = 1;
+
+void setup (int num_ics)
+{
+    blank = 1;
+    
+    LPC_IOCON->PIO0_1 |= 1;        // PIO0_1をCLKOUTとして使用する
+    // CLKOUTピンに出力するクロックソースの選択
+    //    b00 IRC発振器
+    //    b01 Xtal発振器
+    //    b10 WDT発振器
+    //    b11 mainclock
+    LPC_SYSCON->CLKOUTCLKSEL |= 0x3;    // mainclockを選択
+    LPC_SYSCON->CLKOUTUEN = 0;          // レジスタ更新
+    LPC_SYSCON->CLKOUTUEN = 1;
+    while (!(LPC_SYSCON->CLKOUTUEN & 0x01));
+    // クロック分周器の値
+    //  0 ディスエーブル
+    //  1~255 分周値
+    //  31:8 - - 予約済み
+    LPC_SYSCON->CLKOUTDIV |= 1;         // 1分周=分周しない
+
+
+    driver.format (6,0);
+    driver.frequency (20000000);
+    if (num_ics <= 0)
+    {
+        num_drivers = 1;
+    }
+    else
+    {
+        num_drivers = num_ics;
+    }
+
+    xlat = 0;               // hold GS/DC data constant
+    
+    //補正データを最大に設定
+    vprg = 1;
+    for (int i = 0; i<16*num_ics; i++)
+    {
+        driver.write (0x3F);   //最大
+    }
+    xlat = 1;
+    xlat = 0;               // hold GS/DC data constant
+    
+    driver.format (12,0);
+    vprg = 0;               // sets drivers to GS mode. Set to 1 to change to DC mode
+//    gsclk.period_us (1);    // set grayscale clock to 1000 Hz
+//    gsclk = 0.5;            // turn on grayscale clock to 50% duty cycle at afore mentioned frequency
+    
+    blank = 0;
+ 
+
+}
+
+
+void update_led (unsigned short* LEDS)
+{
+    //blank = 0;
+    for (int k = (num_drivers - 1); k >= 0; k--)
+    {
+        for (int i = (16 - 1); i >= 0; i--)
+        {
+            driver.write (*(LEDS + k + i));
+        }
+    }
+    blank = 1;
+    xlat = 1;
+    xlat = 0;
+    blank = 0;
+    
+    driver.format (1,0);
+    driver.write (0);
+    driver.format (12,0);
+    wait_us(85);  //4096階調のために必要な時間  4096/48MHz
+
+}
\ No newline at end of file