# Display large decimal number using seven segments display [closed]

I have a 8bit value on the output of ADC. I need to show this number on 3 seven segment displays. How to do it? I'm working in Multisim 11.0.

You can see a scheme of ADC that I have:

Two blue schemes on the right converts BCD to value on the displays and it works correct while value less then 9. But when it is bigger, displays show wrong value.

P.S.: This Question has as one of the answers the link to the DM9368 Data Sheet, but is seems that there is no such scheme in Multisim.

P.P.S.: In fact, I need only 6 bits if number to display values from 0 to 64.

• Why are you trying to do this in multisim? Jun 2, 2016 at 20:20
• The 7447 converts BCD to seven-segment. So before you connect to the 7447's you need to convert the ADC output to BCD. Jun 2, 2016 at 20:39
• Your question is not clear. Are you asking how to SIMULATE displaying a 2^6 or 2^8 value on three 7-segment displays? Or are you asking how to DESIGN and IMPLEMENT this function? There are modern chips that implement the function of BCD to 7-segment encoding and display driving. Even simpler would probably be to use a micro-controller (Arduino, et.al.) Please clarify your question. Jun 2, 2016 at 20:42

Since the output of your ADC is binary and you need BCD to drive the BCD to 7- segment display drivers, you'll need a binary to BCD converter between the ADC output and the seven-segment drivers.

One way to do the conversion in hardware is to load the ADC output into an 8 bit binary down counter and, at the same time, clear three BCD up counters.

Then, using the same clock for all of the counters, simultaneously clock all the counters. When the binary counter counts down to zero, stop the clock/disable the counters and - VOILA! - the ADC's output, in BCD, will be held in the up counters' Q outputs.

Like this:

• You're welcome. A caveat: You may want to watch the End Of Convert (EOC) signal from the ADC, convert its leading edge into a short pulse and start the counters when it goes true. Jun 4, 2016 at 0:05
• EM Fields, That is problem... There is no 74hc40103 scheme in multisim. Is there some other variants? Jun 4, 2016 at 6:21
• @Henry1996: Sure; you can use a couple of HC191's. Matter of fact, you can build the whole thing out of 191's Jun 4, 2016 at 9:32
• @Henry1996: Ooops... You can't build it all out of 191s since 191s are binary. But, 190s are BCD so you could build the up-counter using them. Sorry... Jun 4, 2016 at 17:32

Simplest method, perhaps, is 3 28C64 EEPROMs (plus 20 resistors)

One for each digit, feed them all the same 8 bits. For 6 bits 0..64 you only need 2 EEPROMS and 14 resistors. If you have a clock you could biplex the displays and use a single EEPROM and 7 resistors.

Easy enough to write a C program (or Python or whatever you like) to spit out the hex code for programming the EEPROMs and you'd need a compatible EEPROM programmer. You could expand this idea up to 13 bits with 4 displays, 4 EEPROMs and 28 resistors.

By the way, if you ever build the circuit shown in your question you'll burn out the displays and/or the 7447s. You must have series resistors, one per segment if you want it to work properly.

Of course, in reality, most of us would use a small part of a microcontroller program to do this.

The way you've designed it, you're giving 4 bits to one display and 4 bits to the other display. That's great if you're trying to display your value in hexidecimal. (...which assumes the 7447 LED driver chip supported symbols AbCdEF.)

Otherwise you're going to need another IC which inputs 8-bit digital value and either gives you 3-digit BCD (2,4,4 wires) or can directly drive the LED segments (3x7 wires). If your number will never exceed 63, you do not need to physically wire the 3rd digit.

Alternately you might find another display module which inputs 8 bits and displays a 2-3-digit unsigned decimal value.

If you want to convert binary to decimal, you're going to have to do a divide in one form or another. This could be successively, like counting, or outright dividing.

While it is possible to string together enough dedicated digital logic chips to achieve what you want, a microcontroller is the simplest solution for most cases. One way to generate decimal digits is to keep dividing a number by 10. The remainder from each division are the digit values in least to most significant order. Note that this works regardless of how large the original number is.

In the special case of the input value only being 0-255, various shortcuts are possible. One brute force but simple approach is to use a lookup table. Since you only have 256 possible input values, it doesn't need to be large. The lookup table could result in the 4-bit BCD values for each digit. Since the highest digit can only be 0,1,2, you actually only need 2 bits for its BCD value. That means a 8-bit in 10-bit out lookup table solves this problem very simply.

Or, the table could even result in the 7-segment values for each digit directly. That would require a minimum of 21 bits per table entry. Even if you ended up using 32 bits per table entry for convenience, that's still only 1024 bytes of program memory. That's a "small" amount of memory for a modest modern microcontroller.