The full code is quite lengthy, but I've pasted it here.
// Segment labelling:
// A
// ----
// F | | B
// ---- G
// E | | C
// ---- .H
// D
// Pins:
// 12 7
// -----------------------
// | ~~ ~~ ~~ ~~ |
// | ~ ~ ~ ~ |
// | ~~. ~~. ~~. ~~. |
// -----------------------
// 1 6
//Pins on 4x7 Segment Display:
// Pin 1: E
// Pin 2: D
// Pin 3: H
// Pin 4: C
// Pin 5: G
// Pin 6: 4th 7 Segment
// Pin 7: B
// Pin 8: 3rd 7 Segment
// Pin 9: 2nd 7 Segment
// Pin 10: F
// Pin 11: A
// Pin 12: 1st 7 Segment
byte segmentPinCount=8; //Includes the . (Decimal place)
byte segmentDisplayCount=4; //How many 7 segment displays do we have?
byte sevenSegmentPins[8] = {2,3,4,5,6,7,8,9}; // A, B, C, D, E, F, G, H
byte sevenSegmentCathodePins[4]={10,11,14,16}; //1st, 2nd, 3rd, 4th
int delayTime = 4; // Time in ms to allow for pin state change.
boolean bigEndian = true; //If the display can't fit the number, which end should we show?
boolean serialCom = true; //Allow serial communication.
int num=0;
int dig1 = 0;
int dig2 = 0;
int dig3 = 0;
int dig4 = 0;
byte sevenSegmentDisplay[36][8] = {
//A B C D E F G H
{ 1,1,1,1,1,1,0,0 }, // = 0
{ 0,1,1,0,0,0,0,0 }, // = 1
{ 1,1,0,1,1,0,1,0 }, // = 2
{ 1,1,1,1,0,0,1,0 }, // = 3
{ 0,1,1,0,0,1,1,0 }, // = 4
{ 1,0,1,1,0,1,1,0 }, // = 5
{ 1,0,1,1,1,1,1,0 }, // = 6
{ 1,1,1,0,0,0,0,0 }, // = 7
{ 1,1,1,1,1,1,1,0 }, // = 8
{ 1,1,1,0,0,1,1,0 }, // = 9
{ 1,1,1,0,1,1,1,0 }, // = A
{ 0,0,1,1,1,1,1,0 }, // = B
{ 1,0,0,1,1,1,0,0 }, // = C
{ 0,1,1,1,1,0,1,0 }, // = D
{ 1,0,1,0,1,1,1,0 }, // = E
{ 1,0,0,0,1,1,1,0 }, // = F
{ 0,0,0,0,0,0,0,0 } // = Clear
{ 1,0,0,1,0,0,0,0 } // = =
{ 0,0,0,0,0,1,0,0 } // = '
{ 1,1,1,1,1,1,0,1 }, // = 0.
{ 0,1,1,0,0,0,0,1 }, // = 1.
{ 1,1,0,1,1,0,1,1 }, // = 2.
{ 1,1,1,1,0,0,1,1 }, // = 3.
{ 0,1,1,0,0,1,1,1 }, // = 4.
{ 1,0,1,1,0,1,1,1 }, // = 5.
{ 1,0,1,1,1,1,1,1 }, // = 6.
{ 1,1,1,0,0,0,0,1 }, // = 7.
{ 1,1,1,1,1,1,1,1 }, // = 8.
{ 1,1,1,0,0,1,1,1 }, // = 9.
{ 1,1,1,0,1,1,1,1 }, // = A.
{ 0,0,1,1,1,1,1,1 }, // = B.
{ 1,0,0,1,1,1,0,1 }, // = C.
{ 0,1,1,1,1,0,1,1 }, // = D.
{ 1,0,1,0,1,1,1,1 }, // = E.
{ 1,0,0,0,1,1,1,1 }, // = F.
{ 0,0,0,0,0,0,0,1 } // = Clear. (With dot)
};
void setup()
{
for (byte pinSetup = 0; pinSetup < segmentPinCount; ++pinSetup) {
pinMode(sevenSegmentPins[pinSetup], OUTPUT); //Setup our control pins for output.
}
for (byte segSetup = 0; segSetup < segmentDisplayCount; ++segSetup) {
pinMode(sevenSegmentCathodePins[segSetup], OUTPUT); //Setup our cathode power pins for each 7 segment display.
}
if (serialCom) { Serial.begin(9600); } //Allow serial communication.
}
void loop()
{
for (byte segSetup = 0; segSetup < segmentDisplayCount; ++segSetup) {
digitalWrite(sevenSegmentCathodePins[segSetup], HIGH); //Reset cathode control pins.
}
if (Serial.available() > 0)
{
num = Serial.parseInt();
Serial.println(num);
dig1 = num / 1000;
num = num - (dig1 * 1000);
dig2 = num / 100;
num = num - (dig2 * 100);
dig3 = num / 10;
dig4 = num - (dig3 *10);
}
//displayNumber(num);
// /*
setNumber(3, dig4);
setNumber(2, dig3);
setNumber(1, dig2);
setNumber(0, dig1);
// */
}
void displayNumber(int originalNumber)
{
int newNumber=originalNumber;
int digit=0;
if (bigEndian) {
for (byte segSetup = segmentDisplayCount; segSetup > 0; --segSetup) {
//Serial.println(newNumber);
//digit = ((originalNumber/(10^segSetup))%10);
digit = newNumber%10;
if (newNumber > 0) {
setNumber(segSetup-1, digit);
}
else {
setNumber(segSetup-1, 0);
}
newNumber /= 10;
}
}
}
void setNumber(byte pin, int x)
{
digitalWrite(sevenSegmentCathodePins[pin], LOW);
switch(x){
case 1:
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[1][segIndex]);
}
break;
case 2:
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[2][segIndex]);
}
break;
case 3:
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[3][segIndex]);
}
break;
case 4:
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[4][segIndex]);
}
break;
case 5:
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[5][segIndex]);
}
break;
case 6:
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[6][segIndex]);
}
break;
case 7:
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[7][segIndex]);
}
break;
case 8:
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[8][segIndex]);
}
break;
case 9:
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[9][segIndex]);
}
break;
case 0:
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[0][segIndex]);
}
case 10: //A
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[10][segIndex]);
}
break;
case 11: //B
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[11][segIndex]);
}
break;
case 12: //C
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[12][segIndex]);
}
break;
case 13: //D
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[13][segIndex]);
}
break;
case 14: //E
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[14][segIndex]);
}
break;
case 15: //F
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[15][segIndex]);
}
break;
case 36: //Clear . (With dot)
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[36][segIndex]);
}
break;
default: //Clear
for (byte segIndex = 0; segIndex < segmentPinCount; ++segIndex) {
digitalWrite(sevenSegmentPins[segIndex], sevenSegmentDisplay[16][segIndex]);
}
break;
}
delay (delayTime);
digitalWrite( sevenSegmentCathodePins[pin], HIGH);
}