A dual-row, 4-digit, 7-Segment LED display for Arduino and compatible boards.
This design uses two serial-to-parallel shift registers with open-drain outputs that can each drive up to 250mA. In this design we are sticking to a peak LED current of about 20mA (from 5V) so the display is quite bright but should prolong the LED segment life. The SIPO (Serial In, Parallel Out) shift registers work directly with the Arduino SPI bus and display one digit at a time. The software updates the display at several hundred times per second to multiplex the digits fast enough to not see any flicker.
Mats has been kind enough to provide some really good drivers in Arduino and mBed libraries for the display. They are attached to this project and include Doxygen based documentation to make it easy to use them. Here's a breif demo of the display shield:
/* 7-Segment decoder lookup
This routine takes a uint8 and returns a BCD/HEX coded 8-bit code for a 7-segment plus D.P. LED display as uint8 (for LSB first SPI bus transmission)
<=A=> segment A = 0b10000000 = 0x80u
^ ^ segment B = 0b01000000 = 0x40u
F B segment C = 0b00100000 = 0x20u
v<=G=>v segment D = 0b00010000 = 0x10u
^ ^ segment E = 0b00001000 = 0x08u
E C segment F = 0b00000100 = 0x04u
v v segment G = 0b00000010 = 0x02u
<=D=> seg. d.p. = 0b00000001 = 0x01u
The heart of this design is the cascade of two TPIC6C595D Serial-to-parallel shift registers. These shift registers are available from Texas Instruments (TPIC6C595D) or ST Micro (STPIC6C595MTR), and the cool thing about these logic chips is that their outputs are open drain MOSFETs capable of sinking up to 250mA each (that's the limit - the continuous drain current rating is 100mA).
They are specifically designed for driving LEDs and have a fairly high VDS (actually it's a 33V zener clamp!) making them also able to drive strings of LEDs from a supply of up to 33V above the LED total forward votlage drop. Be sure always to connect the shift register's VCC to 3.3 or 5V only though, because only the open drain output pins are rated for a higher voltage. You should always check the datasheet first, of course.