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.
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) |
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;
}
}
}
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));
}
}
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");
}
zurück