|
|
|||||||||||||||||
|
Simple 7-Segment Display driver that counts to 10Circuit:Common cathode 7 - segment display chip is connected so the second digit is driven by the Arduino board.Each LED segment is connected through a 240 ohm resistor to digital output ports 6 through 12. The pins on the display chip for segments A through G are mapped through pins 11, 10, 8, 6, 5, 12, and 7 respectively (pin 9 for the decimal point is not connected) The segments on the display are lettered with segment A at the top, continuing clockwise around the 'zero' . Ending with segment G as the middle segment (that makes the zero and eight. I have used jumper wires that are color coded as per resistor code in order to keep these connections straight. The connection scheme goes like this:
Source Code Listing/* 7 Segment Display without Delay Turns on and off a light emitting diode(LED) connected to a digital pin, without using the delay() function. This means that other code can run at the same time without being interrupted by the LED code. The circuit: * 7 segment common cathode LED display attached from pins 6 through 12 VIA 240 ohm resistors * ground to common cathode of display pin 13. Created 2012 by Stuart Baker */ // constants won't change. Used here to // set pin numbers: const int SegAPin = 6; // the number of the pin driving Segment A const int SegBPin = 7; // the number of the pin driving Segment B , etc. const int SegCPin = 8; const int SegDPin = 9; const int SegEPin = 10; const int SegFPin = 11; const int SegGPin = 12; // Variables will change: int dispNum = 0; int OutMin = 6; // Lowest input pin int OutMax = 12; // Highest input pin // the follow variables is a long because the time, measured in miliseconds, // will quickly become a bigger number than can be stored in an int. long interval = 1000; // interval at which to update display (milliseconds) long previousMillis = 0; // will store last time Display was updated // setup() function runs one time after Arduino is reset. void setup() { // set the digital pins as output: for(int i=OutMin; i<=OutMax; i++) { pinMode(i, OUTPUT); } } /* loop() does just that - it is the driving routine that compiles into something like the main() of a normal C++ program */ void loop() { // check to see if it's time to increment the number; that is, if the // difference between the current time and last time you sent the number // is bigger than the interval at which you want. unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { // save the last time you changed the number previousMillis = currentMillis; // Display current value of dispNum on 7-seg display if (dispNum < 10) dispNum++; else dispNum = 1; outNum(dispNum); } } /* Following outNum() function sets the Arduina Duemilanova output pins to drive the display segments needed to generate the number according to the interger passed into the x variable. */ int outNum(int x) { if (x == 0) { digitalWrite(SegAPin, LOW); digitalWrite(SegBPin, LOW); digitalWrite(SegCPin, LOW); digitalWrite(SegDPin, LOW); digitalWrite(SegEPin, LOW); digitalWrite(SegFPin, LOW); digitalWrite(SegGPin, HIGH); } else if (x == 1) { digitalWrite(SegAPin, LOW); digitalWrite(SegBPin, HIGH); digitalWrite(SegCPin, HIGH); digitalWrite(SegDPin, LOW); digitalWrite(SegEPin, LOW); digitalWrite(SegFPin, LOW); digitalWrite(SegGPin, LOW); } else if (x == 2) { digitalWrite(SegAPin, HIGH); digitalWrite(SegBPin, HIGH); digitalWrite(SegCPin, LOW); digitalWrite(SegDPin, HIGH); digitalWrite(SegEPin, HIGH); digitalWrite(SegFPin, LOW); digitalWrite(SegGPin, HIGH); } else if (x == 3) { digitalWrite(SegAPin, HIGH); digitalWrite(SegBPin, HIGH); digitalWrite(SegCPin, HIGH); digitalWrite(SegDPin, HIGH); digitalWrite(SegEPin, LOW); digitalWrite(SegFPin, LOW); digitalWrite(SegGPin, HIGH); } else if (x == 4) { digitalWrite(SegAPin, LOW); digitalWrite(SegBPin, HIGH); digitalWrite(SegCPin, HIGH); digitalWrite(SegDPin, LOW); digitalWrite(SegEPin, LOW); digitalWrite(SegFPin, HIGH); digitalWrite(SegGPin, HIGH); } else if (x == 5) { digitalWrite(SegAPin, HIGH); digitalWrite(SegBPin, LOW); digitalWrite(SegCPin, HIGH); digitalWrite(SegDPin, HIGH); digitalWrite(SegEPin, LOW); digitalWrite(SegFPin, HIGH); digitalWrite(SegGPin, HIGH); } else if (x == 6) { digitalWrite(SegAPin, HIGH); digitalWrite(SegBPin, LOW); digitalWrite(SegCPin, HIGH); digitalWrite(SegDPin, HIGH); digitalWrite(SegEPin, HIGH); digitalWrite(SegFPin, HIGH); digitalWrite(SegGPin, HIGH); } else if (x == 7) { digitalWrite(SegAPin, HIGH); digitalWrite(SegBPin, HIGH); digitalWrite(SegCPin, HIGH); digitalWrite(SegDPin, LOW); digitalWrite(SegEPin, LOW); digitalWrite(SegFPin, LOW); digitalWrite(SegGPin, LOW); } else if (x == 8) { digitalWrite(SegAPin, HIGH); digitalWrite(SegBPin, HIGH); digitalWrite(SegCPin, HIGH); digitalWrite(SegDPin, HIGH); digitalWrite(SegEPin, HIGH); digitalWrite(SegFPin, HIGH); digitalWrite(SegGPin, HIGH); } else if (x == 9) { digitalWrite(SegAPin, HIGH); digitalWrite(SegBPin, HIGH); digitalWrite(SegCPin, HIGH); digitalWrite(SegDPin, HIGH); digitalWrite(SegEPin, LOW); digitalWrite(SegFPin, HIGH); digitalWrite(SegGPin, HIGH); } else if (x == 10) { digitalWrite(SegAPin, HIGH); digitalWrite(SegBPin, HIGH); digitalWrite(SegCPin, HIGH); digitalWrite(SegDPin, HIGH); digitalWrite(SegEPin, HIGH); digitalWrite(SegFPin, HIGH); digitalWrite(SegGPin, LOW); } } |
||||||||||||||||
| Last Updated:
February 11, 2012 4:55 PM
Webmaster: Stuart Baker Email Stuart |
|||||||||||||||||