Home > Technologie > Verschiedene Verfahren zum Ansteuern von 7 Segment-LED-Anzeigen mit Arduino

Verschiedene Verfahren zum Ansteuern von 7 Segment-LED-Anzeigen mit Arduino

Advertisement

Verschiedene Verfahren zum Ansteuern von 7 Segment-LED-Anzeigen mit Arduino

Verschiedene Verfahren zum Ansteuern von 7 Segment-LED-Anzeigen mit Arduino

Verschiedene Verfahren zum Ansteuern von 7 Segment-LED-Anzeigen mit Arduino

Ich möchte nur zeigen, ein paar verschiedene Methoden der Verbindung 7-Segment-LED-Displays zu einem Arduino oder Atmega 328 IC. Es handelt sich lediglich um einfache Zählcodes, die entweder automatisch über den Code gezählt oder über ein Paar von Drucktastenschaltern oder ein Potentiometer inkrementiert / dekrementiert werden. Ich habe 220 Ω-Widerstände in all diesen Schaltungen verwendet, aber Sie würden empfehlen, die richtigen für die jeweiligen 7-Segment-Displays, die Sie verwenden zu berechnen. Dadurch wird sichergestellt, dass die IO-Pins des 328 IC nicht beschädigt werden. Die Einschränkungen für diese maximalen Ströme, mit freundlicher Genehmigung von
http://www.gammon.com.au/forum/?id=11473
sind -
- Die IO-Pins haben eine absolute Maximalleistung von 40 mA pro Pin.
- Auch die folgenden Gruppen von Stiften sollten nicht mehr als 100 mA aus ihnen gezogen werden
* Digitale Stifte 0 bis 4
* Digitale Pins 5 bis 1
* Analoganschlüsse A0 bis A5
- Darüber hinaus verfügt der gesamte Prozessorchip über eine maximale Stromaufnahme von 200 mA.

Die 7-Segment-LED-Anzeigen sind gemeinsame Kathode und das Schieberegister ist ein 74HC595. Ich habe ein Foto von der 7-Segment-LED von vorne mit der Beziehung zwischen den Pin-Nummern und die entsprechende LED-Segment, dass der Pin steuert.

Schritt 1:

Verschiedene Verfahren zum Ansteuern von 7 Segment-LED-Anzeigen mit Arduino

  1. Direkt von Arduino / Atmega 328
  2. Über Schieberegister von Arduino / Atmega 328
  3. Direkt von Arduino / Atmega 328 mit direkter Anschlussmanipulation
  4. Multiplex über Schieberegister von Arduino / Atmega 328 / Drucktastenschalter
  5. Multiplex über Schieberegister vom Arduino / Atmega 328 / Potentiometer-Zähler

1 - Direkt von Arduino / Atmega 328
Zählt automatisch von Null auf neun und wiederholt dann

Code
// Dank Grumpy Mike http://www.thebox.myzen.co.uk/Tutorial/Arrays.html
// LED-Segmentzuordnung innerhalb von Byte = {DP ABCDEFG}
Int pins [] = {2, 3, 4, 5, 6, 7, 8, 9}; // Pin 9 dem DP zugeordnet, aber nicht verwendet (erstes Element des binären Arrays im char tenCode)
Int digit [] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Int counter = 0; // Zähler als Null initialisieren
Int timer = 1000; // Verzögerungszeitintervall
Char tenCode [] = {B01111110, B00110000, B01101101, B01111001, B00110011, B01011011, B01011111, B01110000, B01111111, B01111011};
Void setup ()
{
Für (int i = 0; i <8; i ++) // Digitale Pins als OUTPUTS einstellen
PinMode (Stifte [i], OUTPUT);
aufrechtzuerhalten.
Void Schleife ()
{
Für (int j = 0; j <10; j ++)
{
AnzeigeEleven (Ziffer [j]);
Zeitschalter);
aufrechtzuerhalten.
aufrechtzuerhalten.
Void displayEleven (int num)
{
Int mask = 1;
Für (int i = 0; i <8; i ++)
{
Wenn ((mask & tenCode [num]) == 0)
DigitalWrite (Stifte [i], LOW);
Sonst digitalWrite (Pins [i], HIGH);
Maske = Maske << 1;
aufrechtzuerhalten.
aufrechtzuerhalten.

Schritt 2:

Verschiedene Verfahren zum Ansteuern von 7 Segment-LED-Anzeigen mit Arduino

2 - Über Schieberegister von Arduino / Atmega 328

Zählt automatisch von Null auf neun und wiederholt dann

Code

// LED-Segmentzuordnung innerhalb von Byte = {ABCDEFG DP}

Int LatchPin = 8; // mit Pin 12 am Schieberegister verbinden

Int dataPin = 11; // mit Pin 14 am Schieberegister verbinden

Int clockPin = 12; // an Pin 11 am Schieberegister anschließen

Int i = 0;

Byte-Zahl [] = {B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110,

B11100000, B11111110, B11110110};

Void setup ()

{

PinMode (dataPin, OUTPUT); // Konfigurieren Sie dataPin als OUTPUT

PinMode (LatchPin, OUTPUT); // LatchPin als OUTPUT konfigurieren

PinMode (clockPin, OUTPUT); // ClockPin als OUTPUT konfigurieren

aufrechtzuerhalten.

Void Schleife ()

{

Für (i = 0; i <10; i ++)

{

DigitalWrite (LatchPin, LOW); // Ziehen Sie den Latch LOW, um mit dem Senden der Daten zu beginnen

ShiftOut (dataPin, clockPin, LSBFIRST, Ziffer [i]); // Daten senden

DigitalWrite (LatchPin, HIGH); // Ziehen Sie den Latch HIGH, um das Senden der Daten zu stoppen

Verzögerung (1000);

aufrechtzuerhalten.

aufrechtzuerhalten.

Schritt 3:

Verschiedene Verfahren zum Ansteuern von 7 Segment-LED-Anzeigen mit Arduino

3 - Direkt von Arduino / Atmega 328 mit direkter Portmanipulation

Zählt automatisch von Null auf neun und wiederholt dann

Code

// Weil die direkte Portmanipulation die Pins 0 und 1 verwendet, die RX und TX sind

// Pins müssen Sie diese Pins beim Hochladen des Codes trennen

// LED-Segmentzuordnung innerhalb von Byte = {DP ABCDEFG}

Byte i = 0;

Byte-Stelle [10] = {B01111110, B00110000, B01101101, B01111001, B00110011, B01011011, B01011111, B01110000, B01111111, B01111011};

Void setup ()

{

DDRD = B11111111; // PORTD (digital 7 ~ 0) auf Ausgänge setzen

aufrechtzuerhalten.

Void count ()

{

Für (i = 0; i <10; i ++)

{

PORTD = Ziffer [i];

Verzögerung (1000);

PORTD = 0;

aufrechtzuerhalten.

aufrechtzuerhalten.

Void Schleife ()

{

Graf();

aufrechtzuerhalten.

Schritt 4:

Verschiedene Verfahren zum Ansteuern von 7 Segment-LED-Anzeigen mit Arduino

4 - Multiplexing über Schieberegister von Arduino / Atmega 328 / Drucktastenschalter

Drucktasten erhöhen oder verringern einen Zähler zwischen null und acht

Code

// 7-Segment-LED-Zähler, Multiplexing mit 74HC595 8-Bit-Schieberegister, Inkrementzähler Null bis acht zu Null über Tasterschalter

// Code mangled zusammen aus diesen Quellen - Dank Fellas

// http://www.sweeting.org/mark/blog/2011/11/27/arduino-74hc595-shift-register-and-a-7-segment-led-display

// http://thecustomgeek.com/2011/06/29/multiplexing-for-a-7-year-old/

Const int latchPin = 5; // Pin an Pin 12 von 74HC595 (Latch) angeschlossen

Const int dataPin = 6; // Pin an Pin 14 von 74HC595 angeschlossen (Daten)

Const int clockPin = 7; // Pin an Pin 11 von 74HC595 (Clock) angeschlossen

Int upPin = 12; // Druckknopf an Pin 12 angeschlossen

Int downPin = 13; // Druckknopf an Pin 12 angeschlossen

Int currUpState = 1; // currUpState als HIGH initialisieren

Int currDownState = 1; // currDownState als HIGH initialisieren

Int prevUpState = 0;

Int prevDownState = 0;

Int counter = 0; // Zähler als Null initialisieren

Const byte numbers [10] = // Beschreibe jede Ziffer in den Displaysegmenten 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

{

B11111100,

B01100000,

B11011010,

B11110010,

B01100110,

B10110110,

B1011111,

B11100000,

B11111110,

B11100110,

};

Void setup ()

{

PinMode (LatchPin, OUTPUT); // Set-SR-Pins zur Ausgabe

PinMode (clockPin, OUTPUT);

PinMode (dataPin, OUTPUT);

PinMode (upPin, INPUT); // setzt Pin 12 als Taster INPUT

PinMode (downPin, INPUT); // setzt Pin 13 als Taster INPUT

aufrechtzuerhalten.

Void Schleife ()

{

CurrUpState = digitalRead (upPin);

If (prevUpState! = CurrUpState) // hat den Status von geändert

{// HIGH auf LOW oder umgekehrt

PrevUpState = currUpState;

If (currUpState == HIGH) // Wenn die Taste gedrückt wurde

Zähler ++; // den Zähler um eins erhöhen

// delay (1);

aufrechtzuerhalten.

Wenn (Zähler> 8)

Counter- = 1;

Show (Zahlen [Zähler]); // Anzeige der aktuellen Ziffer

CurrDownState = digitalRead (downPin);

If (prevDownState! = CurrDownState) // hat den Status von geändert

{// HIGH auf LOW oder umgekehrt

PrevDownState = currDownState;

If (currDownState == HIGH) // Wenn die Taste gedrückt wurde

Counter- = 1; // dekrementiere den Zähler um eins

// delay (1);

aufrechtzuerhalten.

Wenn (Zähler <0)

Zähler ++;

Show (Zahlen [Zähler]); // Anzeige der aktuellen Ziffer

aufrechtzuerhalten.

Void show (Byte-Nummer)

{

// Verwenden Sie eine Schleife und ein bitweises UND, um sich über jedes Bit zu bewegen, das ausmacht

// die sieben Segmentanzeige (von links nach rechts, A => G) und prüfen

/ / Um zu sehen, ob es auf oder nicht sein sollte

Für (int j = 0; j <= 7; j ++)

{

Byte toWrite = Zahl & (B10000000 >> j);

If (! ToWrite) {

fortsetzen;

} // Sind alle Bits 0, dann wird kein Punkt in das Schieberegister geschrieben, also brechen Sie aus und gehen Sie weiter zum nächsten Segment.

ShiftIt (zuWrite); // Andernfalls in das Register verschieben

aufrechtzuerhalten.

aufrechtzuerhalten.

Void shiftIt (Bytedaten)

{

DigitalWrite (LatchPin, LOW); // LatchPin LOW einstellen, während diese 8 Bits in das Register getaktet werden

(Int k = 0, k <= 7, k ++)

{

DigitalWrite (clockPin, LOW); // clockPin LOW vor dem Senden eines Bits

Wenn (Daten & (1 << k))

{

DigitalWrite (dataPin, HIGH); // anmachen"

aufrechtzuerhalten.

sonst

{

DigitalWrite (dataPin, LOW); // abschalten"

aufrechtzuerhalten.

DigitalWrite (clockPin, HIGH); // und das Bit in

aufrechtzuerhalten.

DigitalWrite (clockPin, LOW); // Stoppen Sie das Verschieben von Daten

DigitalWrite (LatchPin, HIGH); // set latchPin auf high, um Daten zu sperren und zu senden

aufrechtzuerhalten.

Schritt 5:

Verschiedene Verfahren zum Ansteuern von 7 Segment-LED-Anzeigen mit Arduino

5 - Multiplex über Schieberegister von Arduino / Atmega 328 / Potentiometerzähler

Potentiometer zum Inkrementieren und Dekrementieren eines Zählers zwischen 0 und 8

Code

// 7-Segment-LED-Zähler, Multiplexing mit 74HC595 8-Bit-Schieberegister, Inkrementzähler Null bis 8 auf Null über Potentiometer
// Code mangled zusammen aus diesen Quellen - Dank Fellas
// http://www.sweeting.org/mark/blog/2011/11/27/arduino-74hc595-shift-register-and-a-7-segment-led-display
// http://thecustomgeek.com/2011/06/29/multiplexing-for-a-7-year-old/

Const int latchPin = 5; // Pin an Pin 12 von 74HC595 (Latch) angeschlossen
Const int dataPin = 6; // Pin an Pin 14 von 74HC595 angeschlossen (Daten)
Const int clockPin = 7; // Pin an Pin 11 von 74HC595 (Clock) angeschlossen

Int counter = 0; // Zähler als Null initialisieren
Int potReading = 0;

Const byte numbers [10] = // Beschreibe jede Ziffer in den Displaysegmenten 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

{
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B1011111,
B11100000,
B11111110,
B11100110,
};
Void setup ()
{

PinMode (LatchPin, OUTPUT); // Set-SR-Pins zur Ausgabe
PinMode (clockPin, OUTPUT);
PinMode (dataPin, OUTPUT);

aufrechtzuerhalten.
Void Schleife ()

{
PotReading = analogRead (A0);
PotReading = map (potReading, 0, 1023, 0, 8);
{
Wenn (potReading> 8)
PotLesen -;
Show (Zahlen [potLeading]);

aufrechtzuerhalten.

{
Wenn (potReading <0)
PotLesung ++;
Show (Zahlen [potReading]);

aufrechtzuerhalten.
aufrechtzuerhalten.

Void show (Byte-Nummer)
{
// Verwenden Sie eine Schleife und ein bitweises UND, um sich über jedes Bit zu bewegen, das ausmacht
// die sieben Segmentanzeige (von links nach rechts, A => G) und prüfen
/ / Um zu sehen, ob es auf oder nicht sein sollte
Für (int j = 0; j <= 7; j ++)
{
Byte toWrite = Zahl & (B10000000 >> j);

If (! ToWrite) {
fortsetzen;
} // Sind alle Bits 0, dann wird kein Punkt in das Schieberegister geschrieben, also brechen Sie aus und gehen Sie weiter zum nächsten Segment.

ShiftIt (toWrite); // Andernfalls in das Register verschieben
aufrechtzuerhalten.
aufrechtzuerhalten.
Void shiftIt (Bytedaten)
{
DigitalWrite (LatchPin, LOW); // LatchPin LOW einstellen, während diese 8 Bits in das Register getaktet werden

(Int k = 0, k <= 7, k ++)
{
DigitalWrite (clockPin, LOW); // clockPin LOW vor dem Senden eines Bits

// Beachten Sie, dass wir in unserem Fall PinState auf 0 (LOW) setzen müssen
// "Ein", da der 74HC595 bei Verwendung eines gemeinsamen Stroms sinkt
// Anodenanzeige. Wenn Sie eine gemeinsame Kathodenanzeige verwenden möchten
// schalte das um.
Wenn (Daten & (1 << k))
{
DigitalWrite (dataPin, HIGH); // anmachen"
aufrechtzuerhalten.
sonst
{
DigitalWrite (dataPin, LOW); // abschalten"
aufrechtzuerhalten.
DigitalWrite (clockPin, HIGH); // und das Bit in
aufrechtzuerhalten.
DigitalWrite (clockPin, LOW); // Stoppen Sie das Verschieben von Daten
DigitalWrite (LatchPin, HIGH); // set latchPin auf high, um Daten zu sperren und zu senden
aufrechtzuerhalten.

Related Reading