MAJOR EDIT so that this actually makes sense. Apologies for the previous nonsense.
I'd probably try this using some sort of 1-in-10 chip (4017) with the outputs connected to the 7seg displays' anodes (common anode type display). This gives one display power at a time; you then need to get something like a 4511 (BCD to 7-segment decoder) and connect the INVERTED result to the cathodes. Then put resistors between those connections and 0V:
Code:
a--o--[ R ]-|
b--o--[ R ]-|
c--o--[ R ]-|
4017 -> Display -> d--o--[ R ]-|
e--o--[ R ]-|
f--o--[ R ]-|
g--o--[ R ]-|
|
0V
The o's above are the appropriate inverted outputs from the 4511, and the [ R ]'s are resistors. My theory behind the above circuit is that when the 4511 lights a segment, the inverted output is low and so current flows from the 4017 to 0V, lighting the segment; as the 4511 turns a segment off, there is no potential difference between the 4017 and the display pin and so the segment does not light.
The 4511 reads your 4 of your PIC's output ports which have been coded to do BCD; you'll also need two output ports to control the 4017 (clock and reset). You maintain a variable to indicate which display is being written to. Set this to the first display and tell your PIC to reset the 4017 to sync up, then output this display. Next rapidly oscillate (>60Hz or so) the output connected to the 4017's clock while modifying the variable and setting the outputs appropriately to do the rest of the displays.
The main reason I suggest this solution, which is probably a bad one
, is because I don't know how to use transistors.
In any case however, if you're multiplexing displays like this, you shouldn't do it direct from the PIC as you may not get enough current.
ahydra