Controlling a lot of 14-segment LEDs
A few possibilities, depending how many pins you want to spend on driving them.


2 SR registers on the segment and 16 individual pins for individual display.
2 SR registers on the segment plus two SR registers for the 16 display, driven independently. This allows very fast display update from digit to digit.
4 SR registerss together. The least amount of pins used and the slowest.


For more static solutions, look into dedicated drivers like max7219 or its modern equivalent.

edit:

i put this together based on an old project of mine to demonstrate the approach mentioned in #2 above: it drives up to 8 digit 14-segment leds with four pins.

//display a digit in lRAM[SRDIG_CNT]
//blanking optional - currently disabled
void ledx14_display(void) {
    static uint8_t cnt = 0x00;              //lsb first
    static uint16_t tmp=0;                  //pick up the current char

    //blanking the segments
    //ledx14seg_write(0);                       //active high segments
    //ledx14seg_write(0);

    //shift to the next digit
    IO_SET(SRDIG_PORT, SRDIG_SCLK);         //sclk on positive edge
    IO_CLR(SRDIG_PORT, SRDIG_SCLK);

    //send the segment data
    ledx14seg_write(tmp &gt;&gt; 8);              //send the msb first
    ledx14seg_write(tmp);                   //send the lsb

    //strike out the digit data
    IO_SET(SRSEG_PORT, SRSEG_SLAT);         //strike out data on positive edge
    IO_CLR(SRSEG_PORT, SRSEG_SLAT);

    //advance to the next digit
    cnt = (cnt == SRDIG_CNT - 1)?0x00:(cnt+1);  //advance to the next digit
    if (cnt==0) IO_CLR(SRSEG_PORT, SRSEG_SDI);  //digit active low (common cathod)
    else IO_SET(SRSEG_PORT, SRSEG_SDI);
    tmp = lRAM[cnt];
}


here is the display being driven by a 12f675. the three SR registers share SDI/SLAT pins but with their own SCLK pins.

the data being displayed (correctly i may add) is 0x0101, 0x0202, 0x0303, 0x0404, from the left to the right. Each digit takes 0.3ms to refresh. or 2.4ms for all 8 digits. 100 bytes of flash and 24 bytes of ram.



as is, the code can drive up to 8 digits. with the addition of one shift register, and no increase in pins, the code can drive 16 digits.

porting it to an arduino should be fairly easy.

hope it helps.