|
|
- /* 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;
- }
- }
|