74HC595¶
概要¶
一般的に、単一の7セグメントディスプレイを駆動する方法には2つあります。1つは、その8ピンをUnoボードの8ポートに直接接続する方法で、これは以前に行ったことがあります。もう1つの方法は、74HC595をUnoボードの3つのポートに接続し、その後に7セグメントディスプレイを74HC595に接続することです。この実験では、後者を使用します。この方法では、Unoボードの限られたポートを考えると、5つのポートを節約することができます。それでは始めましょう!
必要なコンポーネント¶
このプロジェクトには、以下のコンポーネントが必要です。
全セットを購入するのが便利です。こちらがリンクです:
名称 |
このキットのアイテム数 |
リンク |
---|---|---|
Elite Explorer Kit |
300+ |
以下のリンクから個別に購入することもできます。
コンポーネント紹介 |
購入リンク |
---|---|
- |
|
配線図¶
回路図¶
この実験では、MR(ピン10)を5V(HIGHレベル)に、OE(ピン1)をGND(LOWレベル)に接続します。したがって、データはSHcpの立ち上がりエッジで入力され、立ち上がりエッジでメモリレジスタに入ります。shiftout()関数を使用して、DSを介してシフトレジスタに8ビットのデータを出力します。SHcpの立ち上がりエッジでは、シフトレジスタ内のデータが1回に1ビットずつ順次移動し、つまり、Q1のデータがQ2に移動し、以降同様になります。STcpの立ち上がりエッジで、シフトレジスタのデータがメモリレジスタに移動します。8回後、すべてのデータがメモリレジスタに移動します。その後、メモリレジスタのデータがバス(Q0-Q7)に出力されます。したがって、16個の文字が7セグメントに順番に表示されます。
コード¶
注釈
ファイル
29-74hc595.ino
をelite-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つずつ文字が表示されます。