74HC595

概要

一般的に、単一の7セグメントディスプレイを駆動する方法には2つあります。1つは、その8ピンをUnoボードの8ポートに直接接続する方法で、これは以前に行ったことがあります。もう1つの方法は、74HC595をUnoボードの3つのポートに接続し、その後に7セグメントディスプレイを74HC595に接続することです。この実験では、後者を使用します。この方法では、Unoボードの限られたポートを考えると、5つのポートを節約することができます。それでは始めましょう!

必要なコンポーネント

このプロジェクトには、以下のコンポーネントが必要です。

全セットを購入するのが便利です。こちらがリンクです:

名称

このキットのアイテム数

リンク

Elite Explorer Kit

300+

Elite Explorer Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

Arduino Uno R4 WiFi

-

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

7セグメントディスプレイ

BUY

74HC595

BUY

配線図

../_images/29-74hc595_bb.png

回路図

この実験では、MR(ピン10)を5V(HIGHレベル)に、OE(ピン1)をGND(LOWレベル)に接続します。したがって、データはSHcpの立ち上がりエッジで入力され、立ち上がりエッジでメモリレジスタに入ります。shiftout()関数を使用して、DSを介してシフトレジスタに8ビットのデータを出力します。SHcpの立ち上がりエッジでは、シフトレジスタ内のデータが1回に1ビットずつ順次移動し、つまり、Q1のデータがQ2に移動し、以降同様になります。STcpの立ち上がりエッジで、シフトレジスタのデータがメモリレジスタに移動します。8回後、すべてのデータがメモリレジスタに移動します。その後、メモリレジスタのデータがバス(Q0-Q7)に出力されます。したがって、16個の文字が7セグメントに順番に表示されます。

../_images/29_74hc595_schematic.png

コード

注釈

  • ファイル 29-74hc595.inoelite-explorer-kit-main\basic_project\29-74hc595 で直接開くことができます。

  • または、このコードをArduino IDEにコピーしてください。

Unoボードにコードをアップロードした後、7セグメントディスプレイで0から9、AからFまで順番に表示されるはずです。

コード解析

配列の要素を設定

int datArray[16] = {252, 96, 218, 242, 102, 182, 190, 224, 254, 246, 238, 62, 156, 122, 158, 142};

この配列には0からFまでの16文字のデータが格納されています。252は0を表し、自分で計算できます。0を表示するには、7セグメントディスプレイのセグメントg(中央のもの)をローレベル(暗い)にする必要があります。

セグメントgは74HC595のQ1に接続されているため、Q1とDP(ドット)の両方をローレベルに設定し、残りのピンをハイレベルにします。 したがって、Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0の値は1 1 1 1 1 1 0 0です。

2進数を10進数に変換します: 1x27+1x26+1x25+1x24+1x23+1x22+0x21+1x20=252.

これが数字**0**が表示される値です。他の文字も同様に計算できます。

7セグメントディスプレイに0-Fを表示

for(int num = 0; num < 16; num++)

{

  digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting

  shiftOut(DS,SHcp,MSBFIRST,datArray[num]);

  //return the latch pin high to signal chip that it

  //no longer needs to listen for information

  digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data

  delay(1000); //wait for a second

}

まず STcp を低レベルに設定し、その後高レベルにします。これによりSTcpの立ち上がりエッジパルスが生成されます。

shiftOut() は、DSピンを介して dataArray[num] のバイトデータを1ビットずつシフトするために使用されます。 MSBFIRST は高ビットから移動することを意味します。

digitalWrite(STcp,HIGH) が実行されると、STcpが立ち上がりエッジになります。この時点で、シフトレジスタのデータがメモリレジスタに移動します。

8回の操作で1バイトのデータがメモリレジスタに転送されます。その後、メモリレジスタのデータがバス(Q0-Q7)に出力されます。7セグメントに文字が表示されるのを見ることができます。その後、1000ms遅延します。その行の後に、 for() に戻ります。ループは16回繰り返され、7セグメントディスプレイに1つずつ文字が表示されます。