2017-11-02 18:20 | カテゴリ:PIC応用回路
普通の時計文字盤では、どうにも「ダサい」ので、何とか「スマート」な時計文字板、表示方法にならないかと、いるいろ無い知恵を絞っています。
ブロ友の6jiroさんから、表示方法のアイデアもアドバイスをいただきました。(多謝!)

時計の文字盤に時刻の数字を表示させるにしても、ちょっと工夫して、インテリア風にも楽しめるようにしたいです。
そのためには、32x32ドットのLED表示器の任意の場所にASCII文字(5x7ドット)や、時計の時刻数字(3x5ドット)を自由に表示できると自由度が高そうです。

そこで、これらを簡単にプログラムできるように、関数でマトリクスLED用のライブラリを製作する事にしました。


(MTX40)
MTX40.jpg

この様な直線的な表示をさせるのは、あるバイトに「ON」を書き込むか、所定のビットのみを「ON」にすればよいので簡単ですが。



続きは、、、


まず前提条件ですが、今回のCPU付のマトリクスLED(8x8ドットx4個ユニット)をシリアルに4セット接続し、32x32ドットのマトリクスLED表示器とします。
もっと多くのLEDを接続して大きなユニットにも対応できるように、汎用性を持たせたかったのですが、かなり複雑になりそうなので、今回は、32x32に固定して作成しました。

テストをする回路全体はこの様なブレッドボードです。

(MTX41)
MTX41.jpg


LEDの集合パネルですが、8X8の小さなLED(といっても3cm角くらいあります)を縦横に4個配置しています。

(MTX42)
MTX42.jpg

裏側はこれらのLEDがシリアルに接続されるように配線をしています。

(MTX43)
MTX43.jpg

配線は、V+(5Vです)、GND、Signal、Clock、Loadトリガの5本です。

さて、肝心のライブラリ関数ですが、まずは、シンプルなものからです。


1)Dot_On(int x, int y)

x,yで指定された座標のドットを点灯させる。32x32ドット画面の左下を(0,0)とする。
配列Data_Buff[L][N][M]
は、Lはy軸方向のLEDブロック番号、Nはx軸方向のブロック番号、Mは、ブロック内のLED行番号(下から0、、7)
となっています。

//--------------------------------------------------------------------
// Data_Buff[L][N][M]内の指定x,yのドットをONにする(既にOnの際はそのまま)
// ただしData_Buff_Out(void) を実行するまでデータはLEDへ転送されない
//--------------------------------------------------------------------

void Dot_On(int x, int y) {
unsigned char Dot_Data, tp = 1;
int L, N, M, K;

if ((x < 0) | (x > 31) | (y < 0) | (y > 31)) return; // Over scale
N = x / 8;
L = y / 8;
M = y % 8;
//K = 7 - (x % 8);
K = x % 8;
Dot_Data = Data_Buff[L][N][M];
tp = tp << K;
Data_Buff[L][N][M] = Dot_Data | tp;
}



2)Put_Pat(配列名、x0、y0)

X,Y座標を指定して、ドットを一つ表示する動作を繰り返し、配列内に定義された複数のドットを表示する
表示させる基準点をx0,y0で指定する。

//------------------------------------------------------------
// 配列Dot_Data[][2]に定義されたドットデータ(x,y)群をLEDに表示
//------------------------------------------------------------

void Put_Pat(int Dot_Data[][2], int x, int y) {
int i;
for (i = 1; i <= Dot_Data[0][0]; i++) {
Dot_On(Dot_Data[i][0] + x, Dot_Data[i][1] + y);
}
Data_Buff_Out(); //データはLEDへ転送されて表示される
}

上記関数に、下記の配列データを与えると、、、、

//---------------------------------------
// 表示パターンデータ(x、y)座標の定義(F文字の例)
// テストデータ
//---------------------------------------
const int Ptn01[13][2] = {// 20ポイント
{ 12, 0}, // 配列に定義されたドットの個数を代入しておきます
{ 0, 5}, // No#1のドットのデータ座標(x, y))
{ 1, 0}, // 2
{ 1, 1}, // 3
{ 1, 2}, // 4
{ 1, 3}, // 5
{ 1, 4}, // 6
{ 1, 5}, // 7
{ 2, 2}, // 8
{ 2, 5}, // 9
{ 3, 2}, // 10
{ 3, 5}, // 11
{ 4, 5} // 12
};

この様なFという形のパターンがLEDに表示されます。


(MTX44)
MTX44.jpg

続きは次回です、、、
関連記事

管理者のみに表示する