Sort of.
You will send 2 bytes to the part every 4 mS.
1 byte will determine what is displayed, the 2nd will determine where it is displayed.
The "what" is displayed usually comes from an array:
byte fontArray[] = {
B00111111, // 0 bit 0 = a, 1=b, 2=c, 3=d, 4=e, 5=f, 6=g, 7=decimal High bit sources current for the selected segment
B00000110, // 1 a
B01011011, // 2 f b
etc g
B01100111, // 9 e c
}; d
The "where" comes from a 2nd array:
byte digitArray[] = {
B11111110, B11111101, B11111011, B11110111, B11101111, B11011111, B10111111, B01111111,}; // 0 sinks current for the digit selected
So you send out 2 bytes:
http://arduino.cc/en/Reference/ShiftOut
digitalWrite(latchPin, LOW);
shiftout(dataPin, clockPin, MSBFIRST,fontArray[x]); // these 2 lines may need to be swapped
shiftout(dataPin, clockPin, MSBFIRTS, digitArray[y]); // around, depends on how board is wired
digitalWrite(latchPin, HIGH);
This code would be in a loop, where one bye of fontArray data was sent out with one byte of digitArray.
Say you wanted to display the numbers 0 to 7 on the display. Then the loop might be:
for (x = 0; x<8; x=x+1){ // count from 0 to 7
digitalWrite(latchPin, LOW); // bring the shift register latch pin low
shiftout(dataPin, clockPin, MSBFIRST,fontArray[x]); // shift out the segment info
shiftout(dataPin, clockPin, MSBFIRTS, digitArray[x]); // shift out the digit select info
digitalWrite(latchPin, HIGH); // bring the shift register latch pin high, moves the data to the outputs
delay (4); // delay to let the data be seen at each digit (there are better ways to create this pause)
}