4fache 7-Segment-LED-Anzeige (SH5461AS)

4fache 7-Segment-LED-Anzeige (SH5461AS)

Dieses 7-Segment-LED-Modul kann man unter den Bezeichnungen KYX-5461AS, CC-5461AS, A-5461AS oder SH5461AS finden und hat besitzt 4 Ziffern (inkl. jeweils ein Punkt) mit einer Höhe von 0,56 Zoll (=14,2mm). Es gibt das Display in einer common anode und common cathode-Variante. Bei den folgenden Experimenten wird Letzteres verwendet.

Spezifikationen und Anschlüsse

Interner Schaltplan der 7-Segment-LED-Anzeige SH5461AS
Abb.: Interner Schaltplan der 7-Segment-LED-Anzeige SH5461AS
Anschlüsse der 7-Segment-LED-Anzeige SH5461AS (common cathode)
Abb.: Anschlüsse der 7-Segment-LED-Anzeige SH5461AS (common cathode)
Segment-Bezeichner für 7-Segment-LED-Anzeigen
Abb.: Segment-Bezeichner für 7-Segment-LED-Anzeigen
SH5461AS-Pin Label Arduino-Pin
1 Segment E 6
2 Segment D 5
3 DP 13
4 Segment C 4
5 Segment G 8
6 Ziffer 4 9 (über NPN Transistor Q4)
7 Segment B 3
8 Ziffer 3 10 (über NPN Transistor Q3)
9 Ziffer 2 11 (über NPN Transistor Q2)
10 Segment F 7
11 Segment A 2
12 Ziffer 1 12 (über NPN Transistor Q1)
Arduino mit SH5461AS verbinden
Abb.: Schaltplan zum Verbinden eines Arduino (Uno/Nano) mit einer SH5461AS 7-Segment-LED-Anzeige

Test aller Display-Segmente

Der folgende Sketch lässt nacheinander alle Segments der 4 Ziffern separat leuchten.

void setup()
{
   for (byte i = 2; i <= 13; i++) {
      pinMode(i, OUTPUT);
      digitalWrite(i, LOW);
   }
}

void loop()
{
   static byte p = 12, s = 2;

   digitalWrite(s, HIGH);
   digitalWrite(p, HIGH);
   delay(200);
   digitalWrite(s, LOW);
   digitalWrite(p, LOW);
   p--;
   if (p < 9) {
      p = 12;
      s++;
      if (s > 13) {
         s = 2;
      }
      if (s > 8) {
         s = 13;
      }
   }
}
Betrieb eines SH5461AS mit dem Arduino
Abb.: So sollte das Resultat des obigen Sketches aussehen: Nacheinander leuchten die Segmente des Displays.

Einfacher Zähler

Der folgende Sketch zählt von 0 bis 9999 und zeigt die entsprechende Zahl auf dem SH5461AS-Display an. (Der Dezimalpunkt wird hier nicht verwendet)

#define SWITCH_DELAY 5000 // in µs

const byte pDigit[4] = {12, 11, 10, 9}; // Digits 1 - 4
const byte pSegment[7] = {2, 3, 4, 5, 6, 7, 8}; // Segments A - G
const byte numbers[10] = {
   B0111111, B0000110, B1011011, B1001111, B1100110,
   B1101101, B1111101, B0000111, B1111111, B1101111};

void setup()
{
   for (byte i = 2; i <= 13; i++) {
      pinMode(i, OUTPUT);
   }
}

void loop()
{
   static int n = 0;

   clearDisplay();
   setDigit(1);
   setNumber((n / 1000) % 10);
   delayMicroseconds(SWITCH_DELAY);

   clearDisplay();
   setDigit(2);
   setNumber((n / 100) % 10);
   delayMicroseconds(SWITCH_DELAY);

   clearDisplay();
   setDigit(3);
   setNumber((n / 10) % 10);
   delayMicroseconds(SWITCH_DELAY);

   clearDisplay();
   setDigit(4);
   setNumber(n % 10);
   delayMicroseconds(SWITCH_DELAY);

   n++;
   n %= 1000;
}

void clearDisplay() {
   for (byte i = 2; i <= 13; i++) {
      digitalWrite(i, LOW);
   }
}

void setDigit(byte digit) {
   for (byte i = 0; i < 4; i++) {
      digitalWrite(pDigit[i], LOW);
   }
   digitalWrite(pDigit[digit - 1], HIGH);
}

void setNumber(byte num) {
   for (byte s = 0; s < 7; s++) {
      digitalWrite(s + 2, bitRead(numbers[num], s));
   }
}
Betrieb eines SH5461AS mit dem Arduino
Abb.: Resultat: Auf dem Display werden Zahlen hochgezählt.

Test mit Library

Der folgende Sketch wurde mit Hilfe der Library UniQHW/SH5461AS geschrieben.

#include <Arduino.h>

#include "Segment.h"
#include "Digit.h"
#include "Display.h"

const byte pDigit[4] {9, 10, 11, 12}; // Digits 1 - 4
const byte pSegment[7] {2, 3, 4, 5, 6, 7, 8}; // Segments A - G
const byte pDp = 13;

Display disp(pDigit, pSegment, pDp);

void setup()
{
   for (byte i = 2; i <= 13; i++) {
      pinMode(i, OUTPUT);
   }
}

void loop()
{
   disp.print("9.617");
}
Betrieb eines SH5461AS mit dem Arduino
Abb.: Leider hat diese Library bei mir nicht so funktioniert wie gedacht. Evtl. läuft beim Multiplexing irgendwas falsch...
zurück