/* SevenSegmentLEDdisplay102a.ino * 2017-02-20 * Mel Lester Jr. * Simple example of using Shift Register with a * Single Digit Seven Segment LED Display */ // Globals const int dataPin = 4; // blue wire to 74HC595 pin 14 const int latchPin = 7; // green to 74HC595 pin 12 const int clockPin = 8; // yellow to 74HC595 pin 11 /* uncomment one of the following lines that describes your display * and comment out the line that does not describe your display */ const char common = 'a'; // common anode //const char common = 'c'; // common cathode bool decPt = true; // decimal point display flag void setup() { // initialize I/O pins pinMode(dataPin, OUTPUT); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { decPt = !decPt; // display decimal point every other pass through loop // generate characters to display for hexidecimal numbers 0 to F for (int i = 0; i <= 15; i++) { byte bits = myfnNumToBits(i) ; if (decPt) { bits = bits | B00000001; // add decimal point if needed } myfnUpdateDisplay(bits); // display alphanumeric digit delay(500); // pause for 1/2 second } } void myfnUpdateDisplay(byte eightBits) { if (common == 'a') { // using a common anonde display? eightBits = eightBits ^ B11111111; // then flip all bits using XOR } digitalWrite(latchPin, LOW); // prepare shift register for data shiftOut(dataPin, clockPin, LSBFIRST, eightBits); // send data digitalWrite(latchPin, HIGH); // update display } byte myfnNumToBits(int someNumber) { switch (someNumber) { case 0: return B11111100; break; case 1: return B01100000; break; case 2: return B11011010; break; case 3: return B11110010; break; case 4: return B01100110; break; case 5: return B10110110; break; case 6: return B10111110; break; case 7: return B11100000; break; case 8: return B11111110; break; case 9: return B11110110; break; case 10: return B11101110; // Hexidecimal A break; case 11: return B00111110; // Hexidecimal B break; case 12: return B10011100; // Hexidecimal C or use for Centigrade break; case 13: return B01111010; // Hexidecimal D break; case 14: return B10011110; // Hexidecimal E break; case 15: return B10001110; // Hexidecimal F or use for Fahrenheit break; default: return B10010010; // Error condition, displays three vertical bars break; } }