Multiplexed 7-segment display


Similar projects worth following
Display made only from discrete components -- individual LEDs, transistors, etc. Supports hexadecimal values.

The aim of this project is to build a display unit, which can display characters (hex digits) when given a binary input. Built only with discrete transistors, LEds, etc. it will work through multiplexing, showing each 7-segment character one by one, in quick succession, so it will seem to eye as if it displays all characters simultaneously.

First iteration was building 8 character display, but it was a fail (due to its great size, complexity and mismatch of different modules, as well as flexibility of big board which resulted in breaks of several connections). I think now, it was too ambitious.

Current iteration is 4 characters, made of several smaller and more rugged boards, and this made it possible to become functional.

  • Finally, done!

    Pavel12/10/2018 at 06:49 0 comments

    The project is officially complete!

    The display unit displays the hexadecimal digits, as intended.

    Problem mentioned in the last log most probably was caused by bad solder joint, or shorting; anyway it was intermittent, and after assembly it "solved" itself - as no wire now moves, all digits are displayed correctly, regardless of input combination.

    Now, assembled, it looks like this:

    In the video below, the display is half-assembled, and run from low-frequency clock, to show it's workings:

    In an assembled unit, refresh rate is 79 Hz. This way there is almost no ghosting, and inactive segments are dark.

    All digits supported by the display are shown on photos below:

    Final tally of used components:

    Some 50 of the components are superfluous, because they belong to parts that were deactivated (because the circuits were wrong). Total number of used parts is 879 pcs.

    Views from sides:

    On this side board one can set the displayed numbers through  the use of switch banks (red), every four switches are coding for one hexadecimal digit in binary. Secondary input mode is through pin headers (yellow).

    This side board is ad-hoc additional board made to replace a part of base structure that was in error. Also here is a clock circuit which is much slower than original clock, so that ghosting is minimised.

    And final side view is from the power input side, the four main boards are visible edge-on.

    The display is done, any further possible changes will be cosmetic in nature (may be I'll add the enclosure in future), so the project can be thought of as complete.

  • Unexpected solution

    Pavel11/30/2018 at 06:18 0 comments

    I was tinkering with that new board (in the top-right on photo), adding components semi-randomly, while probing with oscilloscope, and one thing unexpectedly made the system work as was intended at the first place. All what needed was one more diode drop from transcoder board to driver circuits. The display system now looks ugly, with wires everywhere, but it works now!

    There is other problem had been uncovered though -- when the 3rd bit of the second digit is set (x1xx, displays '4' when all x are zeroes), all other digits have 4 added to them. Hope to solve this new problem soon, and then the whole system could be nicely packed in enclosure and display will be complete.

  • Yet another dead end

    Pavel11/29/2018 at 05:12 0 comments

    Here is short update: after re-doing segment driving part, it turned out yet another failure, very similar in behaviour with the mode of the first, 8-digit attempt, all digits lit all their segments no matter what input.

    I thought that I had one extra invertor in my circuits, but now it seems to me that probably I should have added yet another one to each segment driver instead of getting rid of it. 

  • Another return to project

    Pavel11/27/2018 at 17:56 0 comments

    So I have found some spare time, and willing to continue on this project, and now trying to make it finally work. For the display to work as intended, I have to add yet another board, which would do things properly instead of buggy parts that were assembled previously. One thing with old boards which prevents re-use is epoxy coating I did on their underside, to protect from shorting.

    For greatly reducing ghosting I found that reducing refresh rate works really well.

    Below is the photo of display, as it is looks like now (it shows sequence 1234):

    You can discern digits, if keeping in mind that active segments are dark.

    The board in the lower left corner is b&w PAL TV signal generator, acting as interim frequency generator (based on 16MHz quartz and 74hc163 counters), while the original one is unconnected.

    On the right is the small board with 4 2NAND gates wired as one XOR, connected to D flip-flops, so together they make synchronous counter.

  • Assembly and bugs

    Pavel07/03/2018 at 16:14 0 comments

    Today I connected all boards together, stacked, turned on... And saw FAIL. Most noticeable bug was inverted output, that is, segments that should be lit are dark, and vice versa. Also last digit is odd, even with all signals the same, it outputs different pattern. (On inspection it turned out several wires connecting small board came out, and after resoldering all four digits have same pattern given the same input.)

    Another problem is ghosting; it seems digit driver circuits are too slow.

    Some photos:

    So it seems I am not finished here, but into some bug hunting and rectifying them until the thing works as it should.

  • Multiplexor boards done

    Pavel07/02/2018 at 18:48 0 comments

    At last, all boards done, all seem to function properly.

    Here is an overview of all boards for this project:

    There was no way to place all circuitry for multiplexor on a single board, so I decided to extend it by one small board. As T-buffers occupy only half of this board, I placed some input capability. So the small board contains group of 4 tri-state buffers with common enable, which are enabling first nybble (most significant one) to the bus.

    On the big board there are three groups of four tri-state buffers with common enable. Also two small circuits -- one is group of four invertors, which invert bus value. They are needed because t-buffers have inverted output.

    Also there are four 2-NAND gates which are part of decoder.

    Below the two boards of multiplexor connected together:

    Part count:

    part name                      |  small board  | big board  |


    2n2222a transistors    |   20                |  68              |

    1n3138 diodes              |   8                  |   36             |

    red LEDs                      |   8                  |   32             |

    10k resistors                 |  24                 |  32             |

    20k resistors                |  8                   |  32             |

    47k resistors                |   8                   |  32             |

    dpdt switch                  |    1

    DIP 8x spst switch       |    2

    pin header 4p              |    4 


    Total parts:                   |   83                 |  232           |

    Also one 5*7cm and and one 7*9cm perfboards, and wires, of course.

  • Progressing toward the goal

    Pavel06/29/2018 at 11:08 0 comments

    Since last log entry I had made two more boards, transcoder board and clock/drive/amp board.

    Here is transcoder:

    It includes 4-to-16 decoder circuit coupled with diode matrix (maybe better to call it ROM?). Its inputs are 4-bit binary numbers, its outputs are 7 bits for lighting 7-segment digits.

    Component statistics:

    2n2222a transistors:  20

    1n4148 diodes:            102

    red LEDs:                     20

    10k resistors:                27

    20k resistors:               20

    47k resistors:               20

    Total parts:                   209

    also wires and 7*9cm perfboard.

    Other plate:

    This plate has four different circuits: one is just 7 driving sub-circuits meant to provide/deny sink for appropriate display segments; another is clock based on ~7 kHz multivibrator; third is two clocked data flip-flops connected as 2-bit counter; and last is regulated power supply based on 7805 IC (I like to think that it is not considered cheating to use power regulator IC in otherwise totally discrete component circuit) . The counter then feeds 2-to-4 decoder on display plate which chooses appropriate digit on display and appropriate nibble from 16-bit input word. 

    Component statistics:

    2n2222a transistors:          28

    1n4148 diodes:                    28

    red LEDs:                            19

    100R resistors:                    7

    1k resistors:                         11

    10k resistors:                       21

    20k resistors:                      12

    47k resistors:                       19

    10nF capacitors:                  2

    100nF capacitors:                1

    0.47uF capacitors:               1

    7805 voltage regulator IC:  1

    5.5 mm socket connector:  1

    total parts:                            151

    Also, of course, 7*9 cm perfboard and wires.

    The last part to make is 16-to-4 multiplexer, which should take in 16-bit data word, 2-bit "address" and spew out 4-bit part of data word fed into it. I decided to make multiplexer from tri-state buffers, as it seem more straightforward, and this choice also holds down component count.

  • First board testing

    Pavel05/13/2018 at 19:11 0 comments

    As the first board is complete, now it is time to test if it works as a whole.

    For start, for those who want to know, there is schematic (with all components pictured how they are placed on the board):

    For test, to see all segments lit, their outputs were connected together and through 50 Ohm resistor to ground.

    Testing with both inputs of 2-to-4 decoder connected to ground (black wires at the left side):

    First input at ground, second floating (same effect as if it connected to high through resistor):

    First input floating, second at ground:

    Both inputs floating:

    Test was done with 7.5V.

    Part count:

    Red LEDs:_____________56 pcs

    Green LEDs:____________6 pcs

    1 kOhm resistors:__________4 pcs

    10 kOhm resistors:________14 pcs

    20 kOhm resistors:________6 pcs

    47 kOhm resistors:________6 pcs

    BC557 transistors (pnp):____4 pcs

    N2222A transistors (npn):__14 pcs


    total:   110 parts

    + some wires

    + 7x9 cm perfboard

    I think, this constitutes sucsessfull build of first board.

    Now, there are other boards to build: 16-to4 multiplexor (for breaking 16 bit word to 4 nibbles in succession), 4-to-16 decoder, 16-to-7 encoder for digits and clock/2-bit counter (for driving the whole thing at fast rate, so all four digits are seen to be lit simultaneously).

  • Revival of project

    Pavel05/12/2018 at 14:15 0 comments

    After a long hiatus I decided to start anew. Now, I'll be using smaller boards (24*30 holes, 7*9 cm), display will have only 4 digits, overall design will be more modular. Each board will have more manageable amount of components, so it should be easier to debug, or at the worst scrap and make new one.

    Here is the first board, which will be the front one. It has digits and 2-to-4 decoder, which selects which digits to light.

    Other boards are: 4-to-16 decoder, 16-to-7 encoder (from which signals should drive display of digits) and multiplexor (4x 4-to1 mux), with 16 bit input and 4 bit output, this will be driven also by decoder on front board. At first, for 16 bit word switch bank will be used. At some future time I am doing to make 16 bit register, so this display should be able to read contents of that register and display it as hex number.

  • Big setback

    Pavel07/05/2017 at 04:51 0 comments

    After almost complete assembly of first board, it became apparent, that it is not working correctly -- mainly because of mismatch of gates, I presume.

    Only one digit should be alight at a time, but seems to be I had messed up with decoders...

    There are two decoders here: one 3 to 8 which is long wiry thing just over the digits. It is made of dtl NOT gates and diode 3AND gates and selects one of digits (that is, it intended to do this). Another decoder is the 4 to 16 one, made of 4 dtl NOT and 16 dtl 4AND gates, and have an inverted output (rectangular mess of wires over the last four digits with dimly lit red LEDs). This output drives an encoder, consisting of 7 dtl NAND gates with various number of inputs so as to select which of the segments of digit are not being lit (it is located along the right side of the board, diodes are clustered at right of decoder, and rest of gate circuits is at the right side from digis, with green LEDs). Well, although when it tested alone, it made proper digits, the 4 to 16 decoder cannot make it work properly, most probably because the gates cannot sink all the current. The gates comprising 16-to-7 encoder for digit disppay are operating at at least 10 times bigger current, than gates of 4-to-16 decoder.

    I think, I will have to start all over again on a new board, with more consideration given towards calculation of fanout and other things dealing with electricity rather than logic.

View all 15 project logs

Enjoy this project?



Dr. Cockroach wrote 12/10/2018 at 19:55 point

Good job, thats what hacking is all about :-D

  Are you sure? yes | no

Pavel wrote 12/10/2018 at 20:08 point

Thanks, I think so too

  Are you sure? yes | no

Dr. Cockroach wrote 10/14/2017 at 08:57 point

I like this project very much. My build only has a single 7 segment so far :-)

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates