注釈

こんにちは、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にコピーしてください。

29-74hc595.ino
 1/*
 2  Control 74HC595 Shift Register to display numbers and letters (0-9, A-F)
 3
 4  Board: Arduino Uno R4 
 5  Component: 74HC595
 6*/
 7
 8const int STcp = 12;  //Pin connected to ST_CP of 74HC595
 9const int SHcp = 8;   //Pin connected to SH_CP of 74HC595
10const int DS = 11;    //Pin connected to DS of 74HC595
11//display 0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F
12int datArray[16] = { 252, 96, 218, 242, 102, 182, 190, 224, 254, 246, 238, 62, 156, 122, 158, 142 };
13
14void setup() {
15  //set pins to output
16  pinMode(STcp, OUTPUT);
17  pinMode(SHcp, OUTPUT);
18  pinMode(DS, OUTPUT);
19}
20void loop() {
21  //loop from 0 to 256
22  for (int num = 0; num < 16; num++) {
23    digitalWrite(STcp, LOW);  //ground ST_CP and hold low for as long as you are transmitting
24    shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
25    //return the latch pin high to signal chip that it
26    //no longer needs to listen for information
27    digitalWrite(STcp, HIGH);  //pull the ST_CPST_CP to save the data
28    delay(1000);               //wait for a second
29  }
30}

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