If the output current from the ULN is 500ma (Data Sheet), how a single led should tolerate such amount?That's why there's a series of resistors in my ascii drawing at the output of each darlington. Keep in mind I use the darlingtons as basically switches: put 5v at the base, the darlington goes into saturation and conducts .. the column gets power.
put 5v at the base of the darlington at the row and the darlington is in saturation and conducts, so the row gets connected to ground.
You don't care about that 500mA (or mW power consuption) of the individual darlingtons in the uln package, the resistor you put on each output has the job to limit the current. .
I'm not sure the shift registers have enough power to light up 8 leds at a time (if each output of the shift register is on). Also, since you drive them at 5v, the maximum voltage would be 5v, with a darlington you can send 5v at the base of each darlington from the shift register, but have a different voltage on the output, you can put up to 30-40v to the led if you want to.
Either way, you have to limit the current going through led, and the simplest and cheapest way to do that is using a resistor.
There are more simple devices that limit the current no matter what voltage you have such as these ones:
10mA :
http://uk.farnell.com/on-semiconductor/nsi50010yt1g/ic-led-driver-50v-0-01a-sod123/dp/1794979RL20mA :
http://uk.farnell.com/on-semiconductor/nsi45020at1g/ic-led-driver-45v-0-02a-sod123/dp/179497330mA :
http://uk.farnell.com/on-semiconductor/nsi45030at1g/ic-ccr-led-driver-linear-sod-123/dp/1787605Anyway, back to the resistor method.. you just have the formula V = I x R ... you need to drop a particular voltage on the resistor, so you have to take out first the forward voltage of the led , the voltage lost on the non or darlington when it switches... let's say your led is 2.1v forward voltage, the darlington has about 1.1v saturation voltage and you power the leds from 5v
5v - 1.1v - 2.1v = 0.01 (10mA) x R = > 1.8v = 0.01 x R => R = 1.8v / 0.01 = 180 ohm
So you can use 150-220ohm and have the current around 10mA on the led.
If you use a darlington at both ends (row and column) you may have to decrease 2.2v instead of 1.1v , or double whatever saturation voltage the darlington has, so the resistor value will change.
Simple npn transistors have less voltage (0.2-0.5v) but they also may have a hard time (overheat, blow) when the current from all 20 leds from the row (20x10mA = 200mA) goes to ground through them.
later edit:
Seems you don't understand that 500mA thing... it's how much current the collector can handle. The collector doesn't "create" 500mA, it can just tolerate UP TO 500mA going through it to the emitter, on each darlington (as in you could link two collectors together to tolerate up to 1000mA )
The shift register in your example a few posts above outputs voltage and current, goes to the led... but if you don't limit the current you burn the led .. hence a resistor before the led, to limit the current. then the cathode of the led goes to the darlington which just passes the 10ma to the emitter which should be connected to ground.