Arduino > Afficheur 7 segments DEL / 7 Segment LED Display
/* 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; } }