Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


digitalelektronik:seven-segment-temperature

Dies ist eine alte Version des Dokuments!


Temperaturanzeige

Dieses Programm stellt die Temperatur in Grad Celsius auf zwei Siebensegmentanzeigen dar. Die beiden Anzeigen werden mit Multiplexing angesteuert.

Die Anoden der Siebensegmentanzeigen werden wie folgt angeschlossen:

Segment Pin Bit
a 8 6
b 7 5
c 6 4
d 5 3
e 4 2
f 3 1
g 2 0

Die Kathoden der Siebensegmentanzeigen werden wie folgt angeschlossen:

Anzeige Pin Stelle
0 9 1er
1 10 10er
const int TEMP_DELAY_MS = 1000;
const int DELAY_MS = 5;
const int SEGMENT_PIN[] = { 8, 7, 6, 5, 4, 3, 2 };
const int SEGMENT_PIN_COUNT = 7;
const int DISPLAY_PIN[] = { 9, 10 };
const int DISPLAY_PIN_COUNT = 2;
 
const byte DIGIT[] = {
//    abcdefg
    B01111110, // 0
    B00110000, // 1
    B01101101, // 2
    B01111001, // 3
    B00110011, // 4
    B01011011, // 5
    B01011111, // 6
    B01110000, // 7
    B01111111, // 8
    B01111011  // 9
};
const int DIGIT_COUNT = 10;
byte tempC;
unsigned long nextReadTemp;
 
void setup() {
    int i = 0;
    while (i < SEGMENT_PIN_COUNT) {
        pinMode(SEGMENT_PIN[i], OUTPUT);
        i = i + 1;
    }
 
    i = 0;
    while (i < DISPLAY_PIN_COUNT) {
        pinMode(DISPLAY_PIN[i], OUTPUT);
        i = i + 1;
    }
}
 
void readTemp() {
    unsigned long now = millis();
    if (now > nextReadTemp) {
        int reading = analogRead(0);
        float millivolts = reading * 5.0 / 1024.0;
        tempC = 25 + (millivolts - 0.75) * 100;
        nextReadTemp = now + TEMP_DELAY_MS;
    }
}
 
void showByte(byte b) {
    byte i = 0;
    while (i < SEGMENT_PIN_COUNT) {
        if ((b & (1 << i)) != 0) {
            digitalWrite(SEGMENT_PIN[i], HIGH);
        }
        else {
            digitalWrite(SEGMENT_PIN[i], LOW);
        }
 
        i = i + 1;
    }
}
 
void loop() {
    readTemp();
    // Display 0 einschalten (LOW), 1 ausschalten (HIGH)
    digitalWrite(DISPLAY_PIN[0], LOW);
    digitalWrite(DISPLAY_PIN[1], HIGH);
    showByte(DIGIT[tempC % 10]);
    delay(DELAY_MS);
    // Display 0 ausschalten (HIGH), 1 einschalten (LOW)
    digitalWrite(DISPLAY_PIN[0], HIGH);
    digitalWrite(DISPLAY_PIN[1], LOW);
    showByte(DIGIT[tempC / 10]);
    delay(DELAY_MS);
}
digitalelektronik/seven-segment-temperature.1426694153.txt.gz · Zuletzt geändert: 2020/10/13 14:25 (Externe Bearbeitung)