The second sketch cycles through the numbers from 0 to 9, but only increments the display counter each time a button is pressed. Note that this code includes simple debouncing by introducing a short delay when the Arduino detects that the button has been pressed.
Sketch #2:
// www.TheElectronicsHobbyist.com/blog // Natalia Fargasch Norman // Seven-segment LED Display // Common Anode pins 3 and 8 // G F + A B // | | | | | -> pins and segments they control // --------- // F| A |B // |---G---| -> segments // E| D |C // --------- // | | | | | -> pins and segments they control // E D + C DP // Segments that make each number when lit: // 0 => ABCDEF // 1 => BC // 2 => ABDEG // 3 => ABCDG // 4 => BCFG // 5 => ACDFG // 6 => ACDEFG // 7 => ABC // 8 => ABCDEFG // 9 => ABCDFG // Arduino digital pins used to light up // corresponding segments on the LED display #define A 2 #define B 3 #define C 4 #define D 5 #define E 6 #define F 7 #define G 8 // Pushbutton connected to pin 9 #define BUTTON 9 // Common anode; // on when pin is low // and off when pin is high #define ON LOW #define OFF HIGH int count = 0; // current display count int val = 0; // digital input from button void setup() { pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); pinMode(E, OUTPUT); pinMode(F, OUTPUT); pinMode(G, OUTPUT); pinMode(BUTTON, INPUT); zero(); } void loop() { val = digitalRead(BUTTON); if (val == HIGH) { count++; delay(200); switch (count) { case 0: zero(); break; case 1: one(); break; case 2: two(); break; case 3: three(); break; case 4: four(); break; case 5: five(); break; case 6: six(); break; case 7: seven(); break; case 8: eight(); break; case 9: { nine(); count = -1; break; } } } } // 0 => ABCDEF void zero() { digitalWrite(A, ON); digitalWrite(B, ON); digitalWrite(C, ON); digitalWrite(D, ON); digitalWrite(E, ON); digitalWrite(F, ON); digitalWrite(G, OFF); } // 1 => BC void one() { digitalWrite(A, OFF); digitalWrite(B, ON); digitalWrite(C, ON); digitalWrite(D, OFF); digitalWrite(E, OFF); digitalWrite(F, OFF); digitalWrite(G, OFF); } // 2 => ABDEG void two() { digitalWrite(A, ON); digitalWrite(B, ON); digitalWrite(C, OFF); digitalWrite(D, ON); digitalWrite(E, ON); digitalWrite(F, OFF); digitalWrite(G, ON); } // 3 => ABCDG void three() { digitalWrite(A, ON); digitalWrite(B, ON); digitalWrite(C, ON); digitalWrite(D, ON); digitalWrite(E, OFF); digitalWrite(F, OFF); digitalWrite(G, ON); } // 4 => BCFG void four() { digitalWrite(A, OFF); digitalWrite(B, ON); digitalWrite(C, ON); digitalWrite(D, OFF); digitalWrite(E, OFF); digitalWrite(F, ON); digitalWrite(G, ON); } // 5 => ACDFG void five() { digitalWrite(A, ON); digitalWrite(B, OFF); digitalWrite(C, ON); digitalWrite(D, ON); digitalWrite(E, OFF); digitalWrite(F, ON); digitalWrite(G, ON); } // 6 => ACDEFG void six() { digitalWrite(A, ON); digitalWrite(B, OFF); digitalWrite(C, ON); digitalWrite(D, ON); digitalWrite(E, ON); digitalWrite(F, ON); digitalWrite(G, ON); } // 7 => ABC void seven() { digitalWrite(A, ON); digitalWrite(B, ON); digitalWrite(C, ON); digitalWrite(D, OFF); digitalWrite(E, OFF); digitalWrite(F, OFF); digitalWrite(G, OFF); } // 8 => ABCDEFG void eight() { digitalWrite(A, ON); digitalWrite(B, ON); digitalWrite(C, ON); digitalWrite(D, ON); digitalWrite(E, ON); digitalWrite(F, ON); digitalWrite(G, ON); } // 9 => ABCDFG void nine() { digitalWrite(A, ON); digitalWrite(B, ON); digitalWrite(C, ON); digitalWrite(D, ON); digitalWrite(E, OFF); digitalWrite(F, ON); digitalWrite(G, ON); }
You might also enjoy:






{ 2 comments… read them below or add one }
Hola quería preguntar si hay otra manera más fácil de utilizar los pines para que se escriban de forma conjunta como escribir un byte en el PORTB de PIC por ejemplo output_B(BYTE); esto se me hace necesario para utilizar dos display con la técnica de multiplexacion.
Sorry, Edgar, but I’m not sure I understand your question… For Arduino port registers see http://www.arduino.cc/en/Reference/PortManipulation. For multiple displays it is sometimes easier to use a LED display driver like the Maxim MAX7219.