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

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

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

Committer:
kanpapa
Date:
Mon Jun 03 15:45:48 2013 +0000
Revision:
2:ddef08e13c8e
Parent:
1:2705be49d5e2
Child:
3:532c50dc800e
bug fix. 2 LED unit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kanpapa 0:bf351a2fa565 1 #include "akiledmatrix.h"
kanpapa 0:bf351a2fa565 2 #include "mbed.h"
kanpapa 0:bf351a2fa565 3
kanpapa 0:bf351a2fa565 4 AkiLedMatrix::AkiLedMatrix(PinName sin1,
kanpapa 0:bf351a2fa565 5 PinName sin2,
kanpapa 0:bf351a2fa565 6 PinName sin3,
kanpapa 0:bf351a2fa565 7 PinName clock,
kanpapa 0:bf351a2fa565 8 PinName latch,
kanpapa 1:2705be49d5e2 9 PinName strobe,
kanpapa 2:ddef08e13c8e 10 int maxledunit) :
kanpapa 0:bf351a2fa565 11 _sin1(sin1),
kanpapa 0:bf351a2fa565 12 _sin2(sin2),
kanpapa 0:bf351a2fa565 13 _sin3(sin3),
kanpapa 0:bf351a2fa565 14 _clock(clock),
kanpapa 0:bf351a2fa565 15 _latch(latch),
kanpapa 1:2705be49d5e2 16 _strobe(strobe),
kanpapa 1:2705be49d5e2 17 _maxledunit(maxledunit) {
kanpapa 0:bf351a2fa565 18 // initrize
kanpapa 0:bf351a2fa565 19 _sin1 = 0;
kanpapa 0:bf351a2fa565 20 _sin2 = 0;
kanpapa 0:bf351a2fa565 21 _sin3 = 0;
kanpapa 0:bf351a2fa565 22 _clock = 0;
kanpapa 0:bf351a2fa565 23 _latch = 1;
kanpapa 0:bf351a2fa565 24 _strobe = 0; // LED ON
kanpapa 1:2705be49d5e2 25 _maxledunit = 1; // The number of LED units. (default 1 unit)
kanpapa 0:bf351a2fa565 26 }
kanpapa 0:bf351a2fa565 27
kanpapa 2:ddef08e13c8e 28 void AkiLedMatrix::display(const unsigned char *buffer, int delay) {
kanpapa 0:bf351a2fa565 29 int bufp = 0; // buffer pointer
kanpapa 0:bf351a2fa565 30
kanpapa 1:2705be49d5e2 31 for (int y = 0; y < 16; y++){
kanpapa 2:ddef08e13c8e 32 for (int ledno = (_maxledunit - 1); ledno >= 0; ledno--){
kanpapa 2:ddef08e13c8e 33 uint16_t led1_data = buffer[ledno * 4 + bufp + 0] * 256 + buffer[ledno * 4 + bufp + 1];
kanpapa 2:ddef08e13c8e 34 uint16_t led2_data = buffer[ledno * 4 + bufp + 2] * 256 + buffer[ledno * 4 + bufp + 3];
kanpapa 0:bf351a2fa565 35
kanpapa 2:ddef08e13c8e 36 for (int x = 0; x < 16; x++){
kanpapa 2:ddef08e13c8e 37 if (x == y){
kanpapa 2:ddef08e13c8e 38 _sin1 = 1;
kanpapa 2:ddef08e13c8e 39 } else {
kanpapa 2:ddef08e13c8e 40 _sin1 = 0;
kanpapa 2:ddef08e13c8e 41 }
kanpapa 0:bf351a2fa565 42
kanpapa 2:ddef08e13c8e 43 // LED1
kanpapa 2:ddef08e13c8e 44 _sin2 = led1_data & 0x01;
kanpapa 2:ddef08e13c8e 45 led1_data = led1_data >> 1;
kanpapa 0:bf351a2fa565 46
kanpapa 2:ddef08e13c8e 47 // LED2
kanpapa 2:ddef08e13c8e 48 _sin3 = led2_data & 0x01;
kanpapa 2:ddef08e13c8e 49 led2_data = led2_data >> 1;
kanpapa 0:bf351a2fa565 50
kanpapa 2:ddef08e13c8e 51 wait_us(2); // tSETUP min:1.2us
kanpapa 0:bf351a2fa565 52
kanpapa 2:ddef08e13c8e 53 // set clock
kanpapa 2:ddef08e13c8e 54 _clock = 1;
kanpapa 2:ddef08e13c8e 55 wait_us(1); // twCLK min:1.0us
kanpapa 2:ddef08e13c8e 56 _clock = 0;
kanpapa 2:ddef08e13c8e 57 }
kanpapa 1:2705be49d5e2 58 }
kanpapa 1:2705be49d5e2 59 // set latch
kanpapa 1:2705be49d5e2 60 _latch = 0;
kanpapa 1:2705be49d5e2 61 wait_us(2); // twLAT min:2.0us
kanpapa 1:2705be49d5e2 62 _latch = 1;
kanpapa 0:bf351a2fa565 63
kanpapa 1:2705be49d5e2 64 wait_us(delay);
kanpapa 0:bf351a2fa565 65
kanpapa 2:ddef08e13c8e 66 bufp = bufp + (_maxledunit * 4);
kanpapa 2:ddef08e13c8e 67 if (bufp > (_maxledunit * 64)) {
kanpapa 1:2705be49d5e2 68 bufp = 0;
kanpapa 0:bf351a2fa565 69 }
kanpapa 0:bf351a2fa565 70 }
kanpapa 0:bf351a2fa565 71 }