1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

シフトレジスタ(74HC595)を用いて8×8LEDマトリクスを光らせる

Posted at

経緯

掃除していて自宅から以下の8×8LEDマトリクスが発掘されたのですが、使い方がいまいち分からなかったので、調べて使ったときのことを備忘録を兼ねてまとめます。

1B32C73D-D5E0-49E9-9C69-F449213633CC.jpg

シフトレジスタ

このLEDマトリクスについて調べていくと、どうやらこれが商品として近そうでした。

データシート見ると、回路がマトリクスになっていて、ダイナミック点灯させれば制御できそうでした。
ただ、これを単純にArduinoで制御しようと思うと、アノード×8、カソード×8でピンを16本も使ってしまうため、他の用途でピンが使えなくなってしまうという悲しい自体があります。
それを解決するためにシフトレジスタを使うことを考えました。

このシフトレジスタをアノード用とカソード用に二個購入し、それぞれ接続しました。

実装

回路は以下サイトを参考にして、これにシフトレジスタを加えました。

接続図

スクリーンショット 2024-12-06 012241.png

今回は星を表示してみることにします。

コード

// シフトレジスタと繋いだピン
//アノードピン = APIN
const int APIN_SRCLK = 4;
const int APIN_RCLK  = 3;
const int APIN_SER   = 2;

//カソードピン = CPIN
const int CPIN_SRCLK = 7;
const int CPIN_RCLK  = 6;
const int CPIN_SER   = 5;

int APIN[] = { APIN_SRCLK, APIN_RCLK, APIN_SER };
int CPIN[] = { CPIN_SRCLK, CPIN_RCLK, CPIN_SER };

const byte Apatterns[] = {
  B00011000, 
  B00100100,
  B11000011,
  B01000010,
  B00100100,
  B01111110,
  B01000010,
  B10000001,
};

const byte Cpatterns[] = {
  B01111111,
  B10111111,
  B11011111,
  B11101111,
  B11110111,
  B11111011,
  B11111101,
  B11111110,
};

void setup()
{
  // ピンの設定と初期化
  pinMode( APIN_SRCLK, OUTPUT );
  pinMode( APIN_RCLK, OUTPUT );  
  pinMode( APIN_SER, OUTPUT );
  pinMode( CPIN_SRCLK, OUTPUT );
  pinMode( CPIN_RCLK, OUTPUT );  
  pinMode( CPIN_SER, OUTPUT );

  digitalWrite( APIN_SRCLK, HIGH );  
  digitalWrite( APIN_RCLK, HIGH );
  digitalWrite( APIN_SER, HIGH );
  digitalWrite( CPIN_SRCLK, HIGH );
  digitalWrite( CPIN_RCLK, HIGH );
  digitalWrite( CPIN_SER, HIGH );
}

void loop()
{
    for(int i = 0; i < 8; i++) {
      // ラッチをLOWにする
      digitalWrite(APIN_RCLK, LOW);
      digitalWrite(CPIN_RCLK, LOW);
      
      // シリアル信号を送信
      shiftOut(APIN_SER, APIN_SRCLK, LSBFIRST, Apatterns[i]);
      shiftOut(CPIN_SER, CPIN_SRCLK, LSBFIRST, Cpatterns[i]);
      
      // ラッチをHIGHにする
      digitalWrite(APIN_RCLK, HIGH);
      digitalWrite(CPIN_RCLK, HIGH);
      
      // 表示のためのDelay
      delayMicroseconds(100);
      
      // カソードのシリアル信号を送り、消灯させる
      digitalWrite(CPIN_RCLK, LOW);
      shiftOut(CPIN_SER, CPIN_SRCLK, LSBFIRST, B11111111 );
      digitalWrite(CPIN_RCLK, HIGH);
    }
  }

無事LEDの星(に見えると嬉しい)が表示されました!

61A5E32C-4BF3-4964-9589-74D1A6C710A2.jpg

ピン6本で制御できるようになると色々応用しやすくなると思うので、楽しい電子工作ライフの一助になれば幸いです。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?