This library allows control of the TLC5940 PWM driver IC. It supports both normal operation and controlling multiplexed displays.

Dependencies:   FastPWM

Dependents:   TLC5940LEDtreiber

Revision:
0:be9399a34b15
Child:
3:e5ed5650eb15
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TLC5940Mux.cpp	Mon May 20 19:07:01 2013 +0000
@@ -0,0 +1,55 @@
+#include "mbed.h"
+#include "TLC5940.h"
+
+
+TLC5940Mux::TLC5940Mux(PinName SCLK, PinName MOSI, PinName GSCLK, PinName BLANK, 
+                       PinName XLAT, PinName DCPRG, PinName VPRG, const int number, 
+                       const int rows, void (*SetRows)(int)) : TLC5940(SCLK, MOSI, GSCLK, BLANK, XLAT, DCPRG, VPRG, number),
+                                                               rows(rows),
+                                                               SetRows(SetRows),
+                                                               index(0)
+
+{
+    // Create a data buffer to store the current LED states
+    dataBuffer = new unsigned short[rows * 16 * number];
+    
+    // Zero the buffer
+    memset(dataBuffer, 0x00, rows * 16 * number * 2);
+}
+
+TLC5940Mux::~TLC5940Mux()
+{
+    // Delete the buffer
+    delete[] dataBuffer;
+}
+
+unsigned short* TLC5940Mux::operator=(unsigned short* data)
+{
+    // Copy the memory from data to the data buffer
+    memcpy(dataBuffer, data, rows * 16 * number * 2);
+
+    return data;
+}
+
+unsigned short* TLC5940Mux::operator[](int index)
+{
+    // Return the start of the correct data chunk
+    return dataBuffer + (index * 16 * number);
+}
+
+void TLC5940Mux::setNextData()
+{
+    // Move into the dataBuffer and return a pointer corresponding to the start of the correct data block
+    setNewGSData(dataBuffer + (index * 16 * number));
+    
+    // Since the data we sent on the previous reset was just latched in,
+    // we must enable the row for the previous index so it is displayed in the right position
+    // The ternary is used in case index is zero (we can't have an index of -1)
+    SetRows((index ? (index - 1) : (rows - 1)));
+    
+    // Go to next index
+    if (index == (rows - 1))
+        index = 0;
+    else
+        index++;
+}
\ No newline at end of file