PR

Arduino学習⑰ Lesson19 74HC595と7セグメントディスプレイ
Arduinoの勉強会。74HC595シフトレジスタを使って7セグメントディスプレイにカウントダウンを表示してみた。

Arduino学習

ここでは「74HC595 シフトレジスタ」を使って7セグメントディスプレイを制御します。7セグメントディスプレイには、0から9までの数字を表示することが出来ます。

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

「e」をオンにする
「d」をオンにする
GND
「c」をオンにする
「dp」をオンにする
「b」をオンにする
「a」をオンにする
GND
「f」をオンにする
「g」をオンにする

7セグメント表示のマトリックス表は、以下のようになります。

表示
dp

a

b

c

d

e

f

g
001111110
100110000
201101101
301111001
400110011
501011011
601011111
701110000
801111111
901111011

使用部品

必要な部品は以下になります。

  • Elegoo UNO R3 x 1
  • 830 tie-points Breadboard x 1
  • 220Ω 抵抗器 x 8
  • 74HC595 IC
  • 1桁 7-セグメントディスプレイ
  • M-M Jumper wires x 26

以下のスターターキットに使用部品はすべて同梱されています。

回路をつくってみる

チュートリアル付属の回路図

各ピンは、次のように繋げます。ただし、74HC595と7-SEGMENT DISPLAYの間には、220Ωの抵抗器を繋ぎます。

Arduino UNO R374HC5957-SEGMENT DISPLAY
Q0⑦ a
Q1⑥ b
Q2④ c
Q3② d
Q4① e
Q5⑨ f
Q6⑩ g
Q7⑤ dp
GNDGND③ GND、⑧ GND
5VVCC
D2DS(SER)
5VOE
D3ST_CP(RCLK)
D4SH_CP(SCLK)
5VMR(CLEAR)
Q7′
チュートリアル付属の配線図

プログラムを動かしてみる

チュートリアル付属のコードを動かしてみます。

//www.elegoo.com
//2016.12.12

// define the LED digit patterns, from 0 - 9
// 1 = LED on, 0 = LED off, in this order:
//                74HC595 pin     Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7 
//                Mapping to      a,b,c,d,e,f,g of Seven-Segment LED
byte seven_seg_digits[10] = { B11111100,  // = 0
                              B01100000,  // = 1
                              B11011010,  // = 2
                              B11110010,  // = 3
                              B01100110,  // = 4
                              B10110110,  // = 5
                              B10111110,  // = 6
                              B11100000,  // = 7
                              B11111110,  // = 8
                              B11100110   // = 9
                             };
 
// connect to the ST_CP of 74HC595 (pin 3,latch pin)
int latchPin = 3;
// connect to the SH_CP of 74HC595 (pin 4, clock pin)
int clockPin = 4;
// connect to the DS of 74HC595 (pin 2)
int dataPin = 2;
 
void setup() {
  // Set latchPin, clockPin, dataPin as output
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
 
// display a number on the digital segment display
void sevenSegWrite(byte digit) {
  // set the latchPin to low potential, before sending data
  digitalWrite(latchPin, LOW);
     
  // the original data (bit pattern)
  shiftOut(dataPin, clockPin, LSBFIRST, seven_seg_digits[digit]);  
 
  // set the latchPin to high potential, after sending data
  digitalWrite(latchPin, HIGH);
}
 
void loop() {       
  // count from 9 to 0
  for (byte digit = 10; digit > 0; --digit) {
    delay(1000);
    sevenSegWrite(digit - 1); 
  }
   
  // suspend 4 seconds
  delay(3000);
}
C++

プログラムをアップロードして実行すると、7セグメントディスプレイに9、8、7・・・とカウントダウンした数字が表示されます。

以上

コメント

タイトルとURLをコピーしました