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

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

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

Files at this revision

API Documentation at this revision

Comitter:
kanpapa
Date:
Sun Feb 17 12:25:21 2013 +0000
Child:
1:2705be49d5e2
Commit message:
beta release.

Changed in this revision

akiledmatrix.cpp Show annotated file Show diff for this revision Revisions of this file
akiledmatrix.h Show annotated file Show diff for this revision Revisions of this file
--- /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;
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/akiledmatrix.h	Sun Feb 17 12:25:21 2013 +0000
@@ -0,0 +1,36 @@
+#ifndef MBED_AKILEDMATRIX_H
+#define MBED_AKILEDMATRIX_H
+ 
+#include "mbed.h"
+
+/** AkiLedMatrix class.
+ *  Used for AKIZUKI MATRIX LED unit.
+ *
+ * Example:
+ * @code
+ * #include "mbed.h"
+ * #include "akiledmatrix.h"
+ *
+ * AkiLedMatrix ledmatrix(p5, p6, p7, p8, p9, p10);
+ * 
+ * int main() {
+ *     ledmatrix.display(buf);
+ * }
+ * @endcode
+ */
+class AkiLedMatrix {
+public:
+    AkiLedMatrix(PinName sin1,
+                 PinName sin2,
+                 PinName sin3,
+                 PinName clock,
+                 PinName latch,
+                 PinName strobe);
+                                  
+    void display(const unsigned char *buffer, const int speed = 20, const int maxled = 4);
+ 
+private:
+    DigitalOut _sin1,_sin2,_sin3,_clock,_latch,_strobe;
+};
+ 
+#endif
\ No newline at end of file