User manual
55 56
7.3 Die Siebensegment-Anzeige - erweiterter Zähler
Mit zwei Siebensegment-Anzeigen kann man schon von 0 bis 9999 zählen. Dabei muss man am vorherigen Pro-
gramm nicht viel ändern. Die Umrechnung des Zählerstands geschieht wieder mit dem „sprintf()“ Befehl, dies-
mal aber im Format %04d um vier Stellen mit Vornullen zu erzeugen. Die Taste wird auch wieder abgefragt,
diesmal ist die Abfrage etwas anders aufgebaut. Der Delay wird in zwei Hälften zerlegt, was ggf. etwas mehr
Sicherheit beim Abfragen des Prellvorgangs bietet. Solange man die Taste drückt, wird der Zähler hochgezählt.
Die Abfrage des Überlaufs ist diesmal mit 9999 als Grenzwert eingebaut.
+
-
9V
1A
I²C 7-Segment-LED
SCL
SDA
SCL
SDA
+9V
Adr:40,44,48,4C
PCF8574 T
+9V
I²C 7-Segment-LED
SCL
SDA
SCL
SDA
+9V
Adr:40,44,48,4C
PCF8574 T
+9V
SCLS DA
+9V
A0
A1
Tx
Rx
PD2
SCLKMOSI
PD3
PD 6
PD 4
PD 5
PD 7
A7
A3
A2
A6
NANO
to
Br ick`R`
3,3V 5V
USB
B0
SS
MISC
B1
I²C
// DE_19 7segment Zaehler erweitert.
#include <Wire.h>
// 8574T
#dene i2cseg7x2alsb1 (0x40>>1)
#dene i2cseg7x2amsb1 (0x42>>1)
..... wie vorher ...
// Code neu:
#dene PORTTASTE 2 // Taste an PD2
void setup() { // Einmalige Initialisierung
Wire.begin(); // I2C initialisieren
pinMode(PORTTASTE,INPUT_PULLUP); // Taste mit pull-up Widerstan versehen
}
void loop() { // Schleife
char buffer[10]; // Buffer fuer ASCII Umrechnung
static int counter = 0; // statischer Zaaehler 0..9999
sprintf(buffer,“%04d“,counter); // nun 4 Stellen ausgeben
// Taste abfragen, kann prellen
if (digitalRead(PORTTASTE)==LOW) { // Uebergang High->Low
delay(20); // 20ms warten bis stabil diemsl hier schon
// haengt von der verwendeten Taste ab
// ob die Zeit ausreicht.
while (digitalRead(PORTTASTE)==LOW) { // Dann Low->High abwarten
// warten bis losgelassen !
} // Dann erst weiter
counter++; // zaehlen
delay(20); // auch nach dem loslassen nochmal warten (nicht wichtig aber
Summe 40ms)
}
if (counter > 9999) counter = 0; // 0..9999 zaehlen
// Counter ausgeben
display_seg1x(i2cseg7x2bmsb1,buffer[0]); // msb Zeichen/ LINKE Anzeige
display_seg1x(i2cseg7x2blsb1,buffer[1]); // mittlere Stelle links
display_seg1x(i2cseg7x2amsb1,buffer[2]); // mittlere Stelle rechts
display_seg1x(i2cseg7x2alsb1,buffer[3]); // lsb Zeichen
}
Was passiert? Wenn man die Taste drückt, sollte bei diesem
Versuch der Zählerstand um genau eins erhöht. Diesmal 4-stellig,
also 0000, 0001, 0002 ... 9999 und dann wieder von vorne.










