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

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

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

akiledmatrix.cpp

Committer:
kanpapa
Date:
2013-06-02
Revision:
10:9ce938cdeb33
Parent:
1:2705be49d5e2
Child:
11:392395419b14

File content as of revision 10:9ce938cdeb33:

#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 unsigned int delay = 1000, const unsigned int ledunit = 1) {
    int bufp = 0;   // buffer pointer
    
    for (int y = 0; y < 16; y++){
        for (int ledno = ( ledunit - 1 ) ; ledno >= 0; ledno--){
            uint16_t led1_data = buffer[ledno * 4 + bufp + 0] * 256 + buffer[ledno * 4 + bufp + 1];
            uint16_t led2_data = buffer[ledno * 4 + bufp + 2] * 256 + buffer[ledno * 4 + 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_us(delay);
        
        bufp = bufp + (ledunit * 4);
        if (bufp > (ledunit * 64)) {
            bufp = 0;
        }
    }
}