4 桁の 7 セグメントディスプレイを使用する方法を学習します。
4桁 7セグメントディスプレイ
基本的には、1桁の時と制御は、同様です。

① | 「e」を点灯 |
② | 「d」を点灯 |
③ | 「dp」を点灯 |
④ | 「c」を点灯 |
⑤ | 「g」を点灯 |
⑥ | D4(4桁目) |
⑦ | 「b」を点灯 |
⑧ | D3(3桁目) |
⑨ | D2(2桁目) |
⑩ | 「f」を点灯 |
⑪ | 「a」を点灯 |
⑫ | D1(1桁目) |
「74HC595シフトレジスタ」を使用して、1桁ずつ表示していますが、非常に高速に数値を表示しているため、同時に表示されているように見えます。(写真では、全てが同時に表示されたようには見えません。)
表示する桁数のLOWにすることで表示桁の位置を指定します。(もしくは全てLOWにして順番に表示をセットします。)

使用部品
必要な部品は以下になります。
- Elegoo UNO R3 x 1
- 830 tie-points Breadboard x 1
- 220Ω 抵抗器 x 4
- 74HC595 IC
- 4桁 7-セグメントディスプレイ
- M-M Jumper wires x 31

以下のスターターキットに使用部品はすべて同梱されています。
リンク
回路をつくってみる


チュートリアルに従って繋いでみましたが、まともに値が表示されなかったため、回路図を以下のように変更しました。(D1~D4をArduinoの1~4に繋ぎました。)

Arduino UNO R3 | 74HC595 | 4DIG 7-SEGMENT DISPLAY |
---|---|---|
Q0 | ⑪ A | |
Q1 | ⑦ B | |
Q2 | ④ C | |
Q3 | ② D | |
Q4 | ① E | |
Q5 | ⑩ F | |
Q6 | ⑤ G | |
Q7 | ③ DP | |
GND | GND | |
5V | VCC | |
D8 | DS(DATA) | |
GND | OE | |
D9 | ST_CP(LATCH) | |
D10 | SH_CP(CLOCK) | |
5V | MR(CLEAR) | |
Q7′ | ||
⑫ D1 | ||
⑨ D2 | ||
⑧ D3 | ||
⑥ D4 |

プログラムを動かしてみる
回路を少し変更したのでチュートリアルのプログラムを少し変更して動かします。
//chikuma-creative.com
//2025.04.06
int tDelay = 1; // 100ms delay
int latch = 9; // 74HC595 pin 9 STCP
int clock = 10; // 74HC595 pin 10 SHCP
int data = 8; // 74HC595 pin 8 DS
#define DIG1 1 // DIG1
#define DIG2 2 // DIG1
#define DIG3 3 // DIG1
#define DIG4 4 // DIG1
#define numval(x) ((x > 16) ? (16) : (x))
unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c
,0x39,0x5e,0x79,0x71,0x00};
void setup() {
pinMode(latch,OUTPUT);
pinMode(clock,OUTPUT);
pinMode(data,OUTPUT);
pinMode(DIG1,OUTPUT);
pinMode(DIG2,OUTPUT);
pinMode(DIG3,OUTPUT);
pinMode(DIG4,OUTPUT);
digitalWrite(DIG1,HIGH);
digitalWrite(DIG2,HIGH);
digitalWrite(DIG3,HIGH);
digitalWrite(DIG4,HIGH);
}
uint8_t pinValue(uint8_t dig, uint8_t tgt) {
if (dig == tgt) {
return LOW;
} else {
return HIGH;
}
}
void display(uint8_t dig, uint8_t num)
{
delay(tDelay);
digitalWrite(DIG1,pinValue(DIG1,dig));
digitalWrite(DIG2,pinValue(DIG2,dig));
digitalWrite(DIG3,pinValue(DIG3,dig));
digitalWrite(DIG4,pinValue(DIG4,dig));
digitalWrite(latch,LOW);
shiftOut(data,clock,MSBFIRST,table[num]);
digitalWrite(latch,HIGH);
}
void display4digit(uint8_t num) {
for(int i=0; i<100; i++) {
display(DIG1, numval(num));
display(DIG2, numval(num + 1));
display(DIG3, numval(num + 2));
display(DIG4, numval(num + 3));
}
}
void loop() {
for (int i=0; i<17; i++) {
display4digit(i);
}
}
C++table配列を順番に表示します。DIG1にtable[0]、DIG2にtable[1]、DIG3にtable[2]、DIG4にtable[3]…、これを表示するデータを1つずつカウントアップします。
16以上の場合は、table[16]を(全て消灯)を表示しています。





以上
コメント