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つのパターンに結合したりすることもできます。
この実験は終わりました。メッセージを残して交換することを歓迎します。誰もがお互いから学び、進歩します。