Akizuki 32x16 dot LED Matrix unit (K-03735) control library.

秋月電子の32×16ドットLEDマトリクス表示装置(K-03735)を制御するライブラリです。
バッファの内容をそのままLEDマトリクス装置に送ります。
LEDマトリクス表示装置は最大4台まで接続できるので、接続台数を必ず指定してください。(この台数でバッファのサイズを計算しています。)
行間表示は1msのdelayを入れています。パラメタで変更可能です。
このライブラリの呼び出し元は基本的にwhile()でループしてください。
初めてのライブラリなのでメンバ関数もドキュメントとかまだ最低限です。
おかしなところはぜひコメントをください。

表示例は以下ページをご覧ください。

Revision:
0:bf351a2fa565
Child:
1:2705be49d5e2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/akiledmatrix.cpp	Sun Feb 17 12:25:21 2013 +0000
@@ -0,0 +1,69 @@
+#include "akiledmatrix.h"
+#include "mbed.h"
+
+AkiLedMatrix::AkiLedMatrix(PinName sin1,
+                 PinName sin2,
+                 PinName sin3,
+                 PinName clock,
+                 PinName latch,
+                 PinName strobe) :
+                 _sin1(sin1),
+                 _sin2(sin2),
+                 _sin3(sin3),
+                 _clock(clock),
+                 _latch(latch),
+                 _strobe(strobe) {
+                 // initrize
+                 _sin1 = 0;
+                 _sin2 = 0;
+                 _sin3 = 0;
+                 _clock = 0;
+                 _latch = 1;
+                 _strobe = 0; // LED ON
+}
+ 
+void AkiLedMatrix::display(const unsigned char *buffer, const int speed, const int maxled) {
+    int bufp = 0;   // buffer pointer
+    
+    while(1) {      // loop
+        for (int y = 0; y < 16; y++){
+            uint16_t led1_data = buffer[bufp + 0] * 256 + buffer[bufp + 1];
+            uint16_t led2_data = buffer[bufp + 2] * 256 + buffer[bufp + 3];
+
+            for (int x = 0; x < 16; x++){
+                if (x == y) {
+                        _sin1 = 1;
+                } else {
+                   _sin1 = 0;
+                }
+                
+                // LED1
+                _sin2 = led1_data & 0x01;
+                led1_data = led1_data >> 1;
+                
+                // LED2
+                _sin3 = led2_data & 0x01;
+                led2_data = led2_data >> 1;
+
+                wait_us(2);         // tSETUP min:1.2us
+                
+                // set clock
+                _clock = 1;
+                wait_us(1);         // twCLK min:1.0us
+                _clock = 0;
+            }
+
+            // set latch
+            _latch = 0;
+            wait_us(2);             // twLAT min:2.0us
+            _latch = 1;
+            
+            wait_ms(speed);
+
+            bufp = bufp + 4;
+            if (bufp > (maxled * 16)) {
+                bufp = 0;
+            }
+        }
+    }
+}