Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


digitalelektronik:seven-segment-temperature

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.txt · Zuletzt geändert: 2020/10/13 14:25 (Externe Bearbeitung)