
先日Amazonで買った74HC595がたくさん余ってるので,以前デジットで1個100円で買った1.5inchの大型7セグLED(アノードコモン) 4個を使ってArduino用の4桁7セグLED表示装置を作ってみました。
回路はこのシールドをマネしてこんな感じ↓

a~gのセグメントはそれぞれLEDが2個直列になってるので電流制限抵抗がなくても それぞれ6mA程度しか流れませんでしたが,DpはLED1個なので,220Ωの電流制限抵抗を入れました。
Arduinoからは SDI,LAT,CLKの3本の線でコントロールできるから便利です。
参考スケッチ ↓
//大型7segLED4個 + 74HC595を2個でカウントアップ
#define SDI 8
#define LAT 9
#define CLK 10
const byte digit[] = //7seg 点灯パターン(アノードコモン)
{
B00000011, // 0 ( abcdefgDp )
B10011111, // 1
B00100101, // 2
B00001101, // 3
B10011001, // 4
B01001001, // 5
B01000001, // 6
B00011011, // 7
B00000001, // 8
B00001001 // 9
};
const byte segment[] =
{
B00000000,
B10000000, //左端の7セグLED
B01000000, //
B00100000, //
B00010000 //右端の7セグLED
};
void setup() {
pinMode(SDI, OUTPUT);
pinMode(LAT, OUTPUT);
pinMode(CLK, OUTPUT);
}
void loop() {
for (int i=0; i < 10000; i++){
Disp(1,i/1000);
Disp(2,i%1000/100);
Disp(3,i%100/10);
Disp(4,i%100%10);
}
}
void Disp(byte seg,byte value){
digitalWrite(LAT, LOW);
shiftOut(SDI, CLK, LSBFIRST,digit[value]);
if (seg == 2) {
shiftOut(SDI, CLK, LSBFIRST, digit[value]&B11111110); //左から2番目の7セグLEDに小数点をつける
}
shiftOut(SDI, CLK, LSBFIRST,segment[seg]);
digitalWrite(LAT, HIGH);
delay(2);
}