Arduino > Afficheur 7 segments DEL / 7 Segment LED Display

7 segment led sh
/*

Thomas Ouellet Fredericks

Based on code by :

6-13-2011
Spark Fun Electronics 2011
Nathan Seidle

This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).

This code will work with most Arduinos but you may want to re-route some of the pins.

11 pins required for basic control

*/

// DIGITS
byte digit1 = 9; //  pin 1 of 7 segement LED display
byte digit2 = 8; //  pin 2 of 7 segement LED display
byte digit3 = 5; //  pin 6 of 7 segement LED display
byte digit4 = 4; //  pin 8 of 7 segement LED display

// SEGMENTS
byte segA = 12; // pin 14 of 7 segement LED display
byte segB = 10; // pin 16 of 7 segement LED display
byte segC = 2; //  pin 13 of 7 segement LED display
byte segD = 6; //  pin 3  of 7 segement LED display
byte segE = 7; //  pin 5  of 7 segement LED display
byte segF = 3; //  pin 11 of 7 segement LED display
byte segG = 11; // pin 15 of 7 segement LED display

#define DISPLAY_US  500


void setup() {

        pinMode(segA, OUTPUT);
        pinMode(segB, OUTPUT);
        pinMode(segC, OUTPUT);
        pinMode(segD, OUTPUT);
        pinMode(segE, OUTPUT);
        pinMode(segF, OUTPUT);
        pinMode(segG, OUTPUT);

        pinMode(digit1, OUTPUT);
        pinMode(digit2, OUTPUT);
        pinMode(digit3, OUTPUT);
        pinMode(digit4, OUTPUT);

        //Turn off all digits
        turnAllOff();

}

void loop() {


        displayNumber( millis() / 100 );


}


void displayNumber(int toDisplay) {


        digitalWrite(digit4, HIGH);
        lightSegments(toDisplay % 10);
        delayMicroseconds(DISPLAY_US); //Display this digit for a fraction of a second (between 1us and 5000us, 500 is pretty good)
        turnAllOff();
        delayMicroseconds(DISPLAY_US);

        toDisplay = toDisplay / 10;

        digitalWrite(digit3, HIGH);
        lightSegments(toDisplay % 10);
        delayMicroseconds(DISPLAY_US); //Display this digit for a fraction of a second (between 1us and 5000us, 500 is pretty good)
        turnAllOff();
        delayMicroseconds(DISPLAY_US);

        toDisplay = toDisplay / 10;

        digitalWrite(digit2, HIGH);
        lightSegments(toDisplay % 10);
        delayMicroseconds(DISPLAY_US); //Display this digit for a fraction of a second (between 1us and 5000us, 500 is pretty good)
        turnAllOff();
        delayMicroseconds(DISPLAY_US);

        toDisplay = toDisplay / 10;

        digitalWrite(digit1, HIGH);
        lightSegments(toDisplay % 10);
        delayMicroseconds(DISPLAY_US); //Display this digit for a fraction of a second (between 1us and 5000us, 500 is pretty good)
        turnAllOff();
        delayMicroseconds(DISPLAY_US);

}


void turnAllOff() {

        //Turn off all digits
        digitalWrite(digit1, LOW);
        digitalWrite(digit2, LOW);
        digitalWrite(digit3, LOW);
        digitalWrite(digit4, LOW);

        digitalWrite(segA, HIGH);
        digitalWrite(segB, HIGH);
        digitalWrite(segC, HIGH);
        digitalWrite(segD, HIGH);
        digitalWrite(segE, HIGH);
        digitalWrite(segF, HIGH);
        digitalWrite(segG, HIGH);
}




//Given a number, turns on those segments
//If number == 10, then turn off number
void lightSegments(int numberToDisplay) {



        switch (numberToDisplay){

                case 0:
                digitalWrite(segA, LOW);
                digitalWrite(segB, LOW);
                digitalWrite(segC, LOW);
                digitalWrite(segE, LOW);
                digitalWrite(segD, LOW);
                digitalWrite(segF, LOW);
                digitalWrite(segG, HIGH);
                break;

                case 1:
                digitalWrite(segA, HIGH);
                digitalWrite(segB, LOW);
                digitalWrite(segC, LOW);
                digitalWrite(segE, HIGH);
                digitalWrite(segD, HIGH);
                digitalWrite(segF, HIGH);
                digitalWrite(segG, HIGH);
                break;

                case 2:
                digitalWrite(segA, LOW);
                digitalWrite(segB, LOW);
                digitalWrite(segC, HIGH);
                digitalWrite(segE, LOW);
                digitalWrite(segD, LOW);
                digitalWrite(segF, HIGH);
                digitalWrite(segG, LOW);
                break;

                case 3:
                digitalWrite(segA, LOW);
                digitalWrite(segB, LOW);
                digitalWrite(segC, LOW);
                digitalWrite(segE, LOW);
                digitalWrite(segD, HIGH);
                digitalWrite(segF, HIGH);
                digitalWrite(segG, LOW);
                break;

                case 4:
                digitalWrite(segA, HIGH);
                digitalWrite(segB, LOW);
                digitalWrite(segC, LOW);
                digitalWrite(segE, HIGH);
                digitalWrite(segD, HIGH);
                digitalWrite(segF, LOW);
                digitalWrite(segG, LOW);
                break;

                case 5:
                digitalWrite(segA, LOW);
                digitalWrite(segB, HIGH);
                digitalWrite(segC, LOW);
                digitalWrite(segE, LOW);
                digitalWrite(segD, HIGH);
                digitalWrite(segF, LOW);
                digitalWrite(segG, LOW);
                break;

                case 6:
                digitalWrite(segA, LOW);
                digitalWrite(segB, HIGH);
                digitalWrite(segC, LOW);
                digitalWrite(segE, LOW);
                digitalWrite(segD, LOW);
                digitalWrite(segF, LOW);
                digitalWrite(segG, LOW);
                break;

                case 7:
                digitalWrite(segA, LOW);
                digitalWrite(segB, LOW);
                digitalWrite(segC, LOW);
                digitalWrite(segE, HIGH);
                digitalWrite(segD, HIGH);
                digitalWrite(segF, HIGH);
                digitalWrite(segG, HIGH);
                break;

                case 8:
                digitalWrite(segA, LOW);
                digitalWrite(segB, LOW);
                digitalWrite(segC, LOW);
                digitalWrite(segE, LOW);
                digitalWrite(segD, LOW);
                digitalWrite(segF, LOW);
                digitalWrite(segG, LOW);
                break;

                case 9:
                digitalWrite(segA, LOW);
                digitalWrite(segB, LOW);
                digitalWrite(segC, LOW);
                digitalWrite(segE, LOW);
                digitalWrite(segD, HIGH);
                digitalWrite(segF, LOW);
                digitalWrite(segG, LOW);
                break;

        }
}