注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!

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

-

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

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

購入

74HC595

購入

配線図

../_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つずつ文字が表示されます。