//Given a number, or '-', shifts it out to the display void postNumber(int number, boolean decimal) { // - A // / / F/B // - G // / / E/C // -. D/DP #define a 1<<0 #define b 1<<6 #define c 1<<5 #define d 1<<4 #define e 1<<3 #define f 1<<1 #define g 1<<2 #define dp 1<<7 byte segments; switch (number) { case 1: segments = b | c; break; case 2: segments = a | b | d | e | g; break; case 3: segments = a | b | c | d | g; break; case 4: segments = f | g | b | c; break; case 5: segments = a | f | g | c | d; break; case 6: segments = a | f | g | e | c | d; break; case 7: segments = a | b | c; break; case 8: segments = a | b | c | d | e | f | g; break; case 9: segments = a | b | c | d | f | g; break; // case 0: // if (number > 9) { // segments = a | b | c | d | e | f; break; // } else segments = 0; break; case 0: segments = a | b | c | d | e | f; break; case ' ': segments = 0; break; case 'c': segments = g | e | d; break; case '-': segments = g; break; } if (decimal) segments |= dp; //Clock these bits out to the drivers for (byte x = 0 ; x < 8 ; x++) { digitalWrite(segmentClock, LOW); digitalWrite(segmentData, segments & 1 << (7 - x)); digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK } }