ArduinoはMAX7219ドットマトリックスを駆動します

ArduinoはMAX7219ドットマトリックスモジュールを駆動します

MAX7219の紹介

MAX7219は、マイクロプロセッサを8桁の7セグメントデジタルLEDディスプレイ、および棒グラフディスプレイまたは64個の個別のLEDに接続する、統合されたシリアル入力/出力コモンカソードディスプレイドライバです。オンチップのBタイプBCDエンコーダー、複数のスキャンループ、セグメントワードドライバー、および各データを格納するための8*8スタティックRAMが含まれています。各LEDのセグメント電流を設定するために使用される外部レジスタは1つだけです。すべての汎用マイクロプロセッサは4線式シリアルインターフェースを介して接続でき、更新時にすべての表示を上書きすることなく各データをアドレス指定できます。
次に、Arduinoを使用してMAX7219ドットマトリックスモジュールを駆動し、いくつかの興味深いものを表示します。

ここに画像の説明を挿入

画像をクリックして購入

モジュールの説明

今回使用したMAX7219ラティスモジュールは、2x4に配置された8個の8x8ラティスで構成されたラティスモジュールです。
カスケード方式は次のとおりです。
ここに画像の説明を挿入
モジュールの左上隅の最初のモジュールは入力端子であり、右下隅の最後の1つは、カスケードを継続するためのインターフェイスとして使用できます。つまり、複数のモジュールがカスケード接続されている場合です。 、第1モジュールの入力端子はシングルチップマイクロコンピュータに接続され、出力端子は第2モジュールの入力に接続され、第2モジュールの出力は第3モジュールの入力に接続され、以下同様である。 。
カスケード内の任意のドットマトリックスは、さまざまなアドレスに従って編集できます。
以下は、Arduinoの「LedControl」ライブラリを拡張したものです。

ピンの説明と配線

VCC:マイクロコントローラの5v電源ポートから電力を供給できるモジュール電源インターフェース
GND:電源グランド
DIN:データ入力
CS:チップセレクト端子、インターフェースがローのときにシリアルデータがシフトレジスタにロードされます
CLK:クロックインターフェース

MAX7219ドットマトリックスモジュール Arduino UNO
VCC 5V
GND GND
から D12
CLK D11
CS D10

ここに画像の説明を挿入

モジュールテスト

テストを開始する前に、まずモジュールがすべて正常に点灯するかどうかを確認します
。「LedControl」ライブラリの「LCDemoCascadedDevices」の例を開きます。上記の配線方法に従って配線を接続した後、ArduinoUNOに書き込み、実行します。画面がすべてのピクセルが正常であるかどうかをテストします。
ここに画像の説明を挿入
時間の関係により、プログラムの遅延が50ミリ秒に変更されたため、ドットマトリックス全体が1回実行される時間が速くなります。

プログラム遅延ソースコード

unsigned long delaytime=500;

ドットマトリックスをすばやく検出するには、バック500を50に変更します。

表示パターン

「LedControl」ライブラリのファイル「LedControl.h」を開くと、このライブラリのすべてのライブラリ関数を確認できます。これらのライブラリ関数を使用して、MAX7219ドットマトリックスモジュールにパターンを表示します。

最初のライブラリ関数

void shutdown(int addr, bool status);

この機能は、MAX7219ドットマトリックスモジュールのオン/オフを切り替えるために使用されます(省エネモード) 。最初のパラメーター
は、カスケードで制御されるドットマトリックスのアドレスです。

2番目のライブラリ関数

void clearDisplay(int addr);

画面が切り替わったときに画面をクリアするために使用されます。
パラメータは、画面をクリアするために必要なドットマトリックスアドレスです。

3番目のライブラリ関数

void setRow(int addr, int row, byte value);

ライン表示に使用
最初のパラメータは表示されるドットマトリックスアドレス
、2番目のパラメータは表示されるライン(0〜7)
、3番目のパラメータはラインの表示値(1オンおよび0オフ)です。

「LedControl」ライブラリを使用して行または列を表示する場合、モジュロソフトウェアを使用して目的のパターンを16進数に変換する必要があります。ここに画像の説明を挿入
次に、上記の関数とモジュロソフトウェアを使用して、目的のパターンを表示するようにします。

#include <LedControl.h>
#include "Display.h"
#define DIN  12	//引脚定义
#define CLK  11
#define CS  10
LedControl led = LedControl(DIN, CLK, CS , 8);	//创建对象

void setup() {
    
    
  // put your setup code here, to run once:
  //点阵初始化设置
  for (int i = 0; i < 8; i++)
  {
    
    
    led.shutdown(i, false);
    led.setIntensity(i, 8);
    led.clearDisplay(i);
  }

}

void loop() {
    
    
  // put your main code here, to run repeatedly:
    for (int j = 0; j < 86; j++)
  {
    
    

    // printByte(aa[1][i]);
    for (int i = 0; i < 8; i++)
    {
    
    
      led.setRow(0, i, Display[j][i]);	//行显示
      led.setRow(1, i, Display[j][i]);
      led.setRow(2, i, Display[j][i]);
      led.setRow(3, i, Display[j][i]);
      led.setRow(4, i, Display[j][i]);
      led.setRow(5, i, Display[j][i]);
      led.setRow(6, i, Display[j][i]);
      led.setRow(7, i, Display[j][i]);
    }
    delay(100);
  }
}


結果を示す
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入
画面は元々一貫性がありましたが、gifファイルのサイズが原因で、セクションごとにスクリーンショットを撮ることしかできませんでした。
ライブラリ「LedControl」は比較的シンプルで、MAX7219を使って簡単に希望のパターンを表示できます。
上記の実験は、8つのドットマトリックスが同期してパターンを表示する実験です。

	  led.setRow(0, i, Display[j][i]);	//行显示
      led.setRow(1, i, Display[j][i]);
      led.setRow(2, i, Display[j][i]);

Display配列の内容を変更して、さまざまなラティスを持つさまざまなパターンを表示したり、複数のラティスを1つのパターンに結合したりすることもできます。
この実験は終わりました。メッセージを残して交換することを歓迎します。誰もがお互いから学び、進歩します。

おすすめ

転載: blog.csdn.net/qq_42250136/article/details/123846836