« Arduinoで作ろう(61) Digisparkで7セグLED温度計 | トップページ | スターリングエンジン »

2022年1月23日 (日)

大型7セグLEDを4個使った表示装置

Cimg9863

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

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);
}

  

| |

« Arduinoで作ろう(61) Digisparkで7セグLED温度計 | トップページ | スターリングエンジン »

Arduino」カテゴリの記事