Quick-Start: Driving 7-Segment Displays with the MAX6954
Abstract
This article is how-to guide, intended as a quick learning aid for engineers considering using the MAX6954 to drive 7-segment monocolor LEDs.
The MAX6954 is a versatile display driver, capable of controlling a mix of discrete, 7-segment, 14-segment, and 16-segment LED displays through a serial interface. This application note shows a typical application and configuration for driving sixteen mono-color, 7-segment LEDs using the MAX6954.
See the MAX6954 data sheet for additional information about MAX6954 features.
"Quick-Start: Driving 16-Segment Displays with the MAX6954" and "Quick-Start: Driving 14-Segment Displays with the MAX6954" are similar application notes that discuss configuring the MAX6954 for 16-segment and 14-segment applications, respectively.
A common application for the MAX6954 is driving up to sixteen 7-segment mono-color LEDs. This application note guides the user through the process of connecting the MAX6954 to 7-segment displays and configuring the internal registers to control the displays using the included hexadecimal font map.
The MAX6954 utilizes a multiplex technique that reduces driver pin count by using ports alternately as cathode and anode drivers. This differs from the standard LED multiplex connection, which uses separate driver pins for anodes and cathodes. The technique is discussed in "Charlieplexing - Reduced Pin-Count LED Display Multiplexing". Table 1 lists the connection scheme for 7-segment digits that is compatible with the MAX6954 multiplex scheme and the built in hexadecimal font map. The letters in Table 1 correspond to the segment labels shown in Figure 2. Figure 1 illustrates a sixteen digit, 7-segment application circuit for the MAX6954.
Digit | O0 | O1 | O2 | O3 | O4 | O5 | O6 | O7 | O8 | O9 | O10 | O11 | O12 | O13 | O14 | O15 | O16 | O17 | O18 |
0 0a |
CC0 | 1a | 1b | 1c | 1d | 1dp | 1e | 1f | 1g | 2a | 2b | 2c | 2d | 2e | 2f | 2g | 2dp | ||
1, 1a |
CC1 | 1a | 1b | 1c | 1d | 1dp | 1e | 1f | 1g | 2a | 2b | 2c | 2d | 2e | 2f | 2g | 2dp | ||
2, 2a |
1a | CC2 | 1b | 1c | 1d | 1dp | 1e | 1f | 1g | 2a | 2b | 2c | 2d | 2e | 2f | 2g | 2dp | ||
3 3a |
1a | CC3 | 1b | 1c | 1d | 1dp | 1e | 1f | 1g | 2a | 2b | 2c | 2d | 2e | 2f | 2g | 2dp | ||
4 4a |
1a | 1b | 1c | CC4 | 1d | 1dp | 1e | 1f | 1g | 2a | 2b | 2c | 2d | 2e | 2f | 2g | 2dp | ||
5 5a |
1a | 1b | 1c | CC5 | 1d | 1dp | 1e | 1f | 1g | 2a | 2b | 2c | 2d | 2e | 2f | 2g | 2dp | ||
6, 6a |
1a | 1b | 1c | 1d | 1dp | CC6 | 1e | 1f | 1g | 2a | 2b | 2c | 2d | 2e | 2f | 2g | 2dp | ||
7, 7a |
1a | 1b | 1c | 1d | 1dp | CC7 | 1e | 1f | 1g | 2a | 2b | 2c | 2d | 2e | 2f | 2g | 2dp |
Display test mode can be used to verify connections after connecting the MAX6954 to 7-segment displays. Display test mode overrides, but does not alter, all control and digit registers and turns all segments on. Enable display test mode by writing 0x01 to register 0x07. If a segment does not light in display test mode this indicates a connection problem that should be investigated. Write 0x00 to register 0x07 to exit display test mode.
After verification of the connections between the MAX6954 and the 7-segment displays the device must be configured for operation with 7-segment displays. Table 2 contains a list of the initial power-up states of important MAX6954 registers. When power is first applied to the MAX6954 the device is in shutdown mode, all digits are blanked, the 7-segment font map is selected and the device is set to scan the maximum number of digits. The default decode mode (0x01) and digit type (0x0C) register settings are correct for 7-segment applications.
REGISTER | POWER-UP CONDITION | ADDRESS (HEX) |
REGISTER DATA | |||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
Decode Mode | 7-segment font enabled | 0x01 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Global Intensity | 1/16 (minimum intensity) | 0x02 | X | X | X | X | 0 | 0 | 0 | 0 |
Scan Limit | Display sixteen 7-segment digits: 0, 1, 2, 3, 4, 5, 6, 7, 0a, 1a, 2a, 3a, 4a, 5a, 6a, 7a | 0x03 | X | X | X | X | X | 1 | 1 | 1 |
Control Register | Shutdown enabled, blink disabled, blink speed is slow | 0x04 | 0 | 0 | X | X | 0 | 0 | 0 | 0 |
Display Test | Normal operation (display test disabled) | 0x07 | X | X | X | X | X | X | X | 0 |
Digit Type | Digits 0 through 7 are 7 segment digits | 0x0C | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Intensity10 | 1/16 (min on), digits 1 and 0 | 0x10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Intensity32 | 1/16 (min on), digits 3 and 2 | 0x11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Intensity54 | 1/16 (min on), digits 5 and 4 | 0x12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Intensity76 | 1/16 (min on), digits 7 and 6 | 0x13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Intensity10a | 1/16 (min on), digits 1a and 0a | 0x14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Intensity32a | 1/16 (min on), digits 3a and 2a | 0x15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Intensity54a | 1/16 (min on), digits 5a and 4a | 0x16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Intensity76a | 1/16 (min on), digits 7a and 6a | 0x17 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Digit 0 | Blank digit, both planes | 0x60 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 1 | Blank digit, both planes | 0x61 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 2 | Blank digit, both planes | 0x62 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 3 | Blank digit, both planes | 0x63 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 4 | Blank digit, both planes | 0x64 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 5 | Blank digit, both planes | 0x65 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 6 | Blank digit, both planes | 0x66 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 7 | Blank digit, both planes | 0x67 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 0a | Blank digit, both planes | 0x68 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 1a | Blank digit, both planes | 0x69 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 2a | Blank digit, both planes | 0x6A | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 3a | Blank digit, both planes | 0x6B | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 4a | Blank digit, both planes | 0x6C | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 5a | Blank digit, both planes | 0x6D | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 6a | Blank digit, both planes | 0x6E | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Digit 7a | Blank digit, both planes | 0x6F | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
The configuration register (0x01) is used to enter and exit shutdown, control the blink function, globally clear the digit data and to select between global or digit-by-digit control of intensity. The configuration register contains 7 bits (Table 3):
- S bit selects shutdown or normal operation (read/write).
- B bit selects the blink rate (read/write).
- E bit globally enables or disables the blink function (read/write).
- T bit resets the blink timing (data is not stored-transient bit).
- R bit globally clears the digit data for both planes P0 and P1 for ALL digits (data is not stored-transient bit).
- I bit selects between global or digit-by-digit control of intensity (read/write).
- P bit returns the current phase of the blink timing (read only-a write to this bit is ignored).
CONFIGURATION REGISTER DATA BIT |
DATA BIT LABEL | STATE | FUNCTION |
D7 | P | 0 | P1 Blink Phase |
D6 | I | 0 | Intensity for all digits is controlled by one setting in the Global Intensity Register |
1 | Intensity for digits is controlled by the individual settings in the Intensity10 through Intensity76a registers. | ||
D5 | R | 0 | Digit data for both planes P0 and P1 are unaffected |
1 | Digit data for both planes P0 and P1 are cleared on the rising edge of active-low CS | ||
D4 | T | 0 | Blink timing counters are unaffected. |
1 | Blink timing counters are reset on the rising edge of active-low CS. | ||
D3 | E | 0 | Blink function disabled |
1 | Blink function enabled | ||
D2 | B | 0 | Slow Blinking. Segments blink on for 1s, off for 1s with fOSC = 4MHz. |
1 | Fast Blinking. Segments blink on for 0.5s, off for 0.5s with fOSC = 4MHz. | ||
D1 | X | X | Don't care |
D0 | S | 0 | Shutdown |
1 | Normal Operation |
Enable the display driver with global intensity control and without blinking by writing 0x01 to register 0x04. The internal oscillator powers as the MAX6954 exits shutdown and the oscillator output is available at OSC_OUT. Notice that the 7-segment displays remain blank, as the power-up state of digit control registers 0x60 to 0x6F is 0x20 or no segments lit (see Table 2 and Figure 3).
The MAX6954 includes a hexadecimal font map for 7-segment displays. Seven bits represent the hexadecimal font map; an 8th bit is used to select whether the decimal point (DP) is lit (Table 4). Digit registers are implemented with two planes, P0 and P1. Each digit is represented by 2 bytes of memory, 1 byte in plane P0 and the other in plane P1 (see Table 7). The digit registers are mapped so that a digit's data can be updated in plane P0 (registers 0x20 through 0x2F), plane P1 (registers 0x40 through 0x4F), or both planes simultaneously (registers 0x60 through 0x6F). The data in the digit registers does not control the digit segments directly for 7-segment displays. Instead, the register data is used to address a character generator that stores the data for the font (Figure 3). The lower 7 bits of the digit data (D6 to D0) select the character from the font. The most significant bit of the register data (D7) controls the DP segment of the digits; it is set to 1 to light DP, and to 0 to leave DP unlit.
MODE | ADDRESS CODE (HEX) | REGISTER DATA | ||||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
7-segment mode, writing digit data to use font map data with decimal place unlit | 0x20 to 0x2F 0x40 to 0x4F 0x60 to 0x6F |
0 | Bits D6 to D0 select font character | |||||||
7-segment mode, writing digit data to use font map data with decimal place lit | 0x20 to 0x2F 0x40 to 0x4F 0x60 to 0x6F |
1 | Bits D6 to D0 select font character |
If the blink function is disabled through the Blink Enable Bit E (Table 3) in the configuration register, then the digit register data in plane P0 is used to multiplex the display. The digit register data in P1 is not used. If the blink function is enabled, then the digit register data in both plane P0 and plane P1 are alternately used to multiplex the display. Blinking is achieved by multiplexing the LED display using data plane P0 and plane P1 on alternate phases of the blink clock.
As an example let's display the phone number for Maxim/Dallas Direct: 1 800 629 4642, using the MAX6954. We disabled the blink functionality when we programmed the configuration register, so data can be written to the 0x20 through 0x2F registers to control digit 0 through digit 7a, respectively. Using the font map in Figure 3 determine the code equivalent for each character:
REGISTER ADDRESS (HEX) | DIGIT | CHARACTER | FONT MAP EQUIVALENT CODE | |
DECIMAL | HEX | |||
0x20 | 0 | C | 0000 1100 | 0x0C |
0x28 | 0a | A | 0000 1001 | 0x0A |
0x21 | 1 | 1 | 0000 0001 | 0x01 |
0x29 | 1a | 1 | 0000 0001 | 0x01 |
0x23 | 3 | 8 | 0000 1000 | 0x08 |
0x2B | 3a | 0 | 0000 0000 | 0x00 |
0x24 | 4 | 0 | 1000 0000 | 0x80 |
0x2C | 4a | 6 | 0000 0110 | 0x06 |
0x25 | 5 | 2 | 0000 0010 | 0x02 |
0x2D | 5a | 9 | 1000 1001 | 0x89 |
0x26 | 6 | 4 | 0000 0100 | 0x04 |
0x2E | 6a | 6 | 0000 0110 | 0x06 |
0x27 | 7 | 4 | 0000 0100 | 0x04 |
0x2F | 7a | 2 | 0000 0010 | 0x02 |
Adjust the intensity of the displays by writing to register 0x02, the global intensity control register. Intensity may be adjusted between 0x00 (minimum on, 1/16 current) and 0xFF (maximum on, 15/16 current). Digital control of display brightness can also be managed individually for each digit. For full details about adjusting digit intensity and other advanced features such as GPIO and key-scan, refer to the MAX6954 data sheet.
REGISTER (HEX) |
COMMAND (HEX) |
FUNCTION |
0x07 | 0x01 | Enter display test mode |
0x07 | 0x00 | Exit display test mode |
0x04 | 0x01 | Exit shutdown mode, disable blinking and select global intensity control |
0x20 | 0x0C | Write "C" to digit 0 |
0x28 | 0x0A | Write "A" to digit 0a |
0x21 | 0x01 | Write "1" to digit 1 |
0x29 | 0x01 | Write "1" to digit 1a |
0x23 | 0x08 | Write "8" to digit 3 |
0x2B | 0x00 | Write "0" to digit 3a |
0x24 | 0x80 | Write "0." to digit 4 |
0x2C | 0x06 | Write "6" to digit 4a |
0x25 | 0x02 | Write "2" to digit 5 |
0x2D | 0x89 | Write "9." to digit 5a |
0x26 | 0x04 | Write "4" to digit 6 |
0x2E | 0x06 | Write "6" to digit 6a |
0x27 | 0x04 | Write "4" to digit 7 |
0x2F | 0x02 | Write "2" to digit 7a |
0x02 | 0xFF | Set global intensity to full-scale |
REGISTER | ADDRESS (COMMAND BYTE) | ADDRESS (HEX CODE) |
|||||||
D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 | ||
Decode Mode | R/active-low W | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0x01 |
Global Intensity | R/active-low W | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0x02 |
Scan Limit | R/active-low W | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0x03 |
Configuration | R/active-low W | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0x04 |
Display Test | R/active-low W | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0x07 |
Digit Type | R/active-low W | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0x0C |
Intensity 10 | R/active-low W | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0x10 |
Intensity 32 | R/active-low W | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0x11 |
Intensity 54 | R/active-low W | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0x12 |
Intensity 76 | R/active-low W | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0x13 |
Intensity 10a | R/active-low W | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0x14 |
Intensity 32a | R/active-low W | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0x15 |
Intensity 54a | R/active-low W | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0x16 |
Intensity 76a | R/active-low W | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0x17 |
Digit 0 Plane P0 | R/active-low W | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0x20 |
Digit 1 Plane P0 | R/active-low W | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0x21 |
Digit 2 Plane P0 | R/active-low W | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0x22 |
Digit 3 Plane P0 | R/active-low W | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0x23 |
Digit 4 Plane P0 | R/active-low W | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0x24 |
Digit 5 Plane P0 | R/active-low W | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0x25 |
Digit 6 Plane P0 | R/active-low W | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0x26 |
Digit 7 Plane P0 | R/active-low W | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0x27 |
Digit 0a Plane P0 | R/active-low W | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0x28 |
Digit 1a Plane P0 | R/active-low W | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0x29 |
Digit 2a Plane P0 | R/active-low W | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0x2A |
Digit 3a Plane P0 | R/active-low W | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0x2B |
Digit 4a Plane P0 | R/active-low W | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0x2C |
Digit 5a Plane P0 | R/active-low W | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0x2D |
Digit 6a Plane P0 | R/active-low W | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0x2E |
Digit 7a Plane P0 | R/active-low W | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0x2F |
Digit 0 Plane P1 | R/active-low W | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0x40 |
Digit 1 Plane P1 | R/active-low W | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0x41 |
Digit 2 Plane P1 | R/active-low W | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0x42 |
Digit 3 Plane P1 | R/active-low W | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0x43 |
Digit 4 Plane P1 | R/active-low W | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0x44 |
Digit 5 Plane P1 | R/active-low W | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0x45 |
Digit 6 Plane P1 | R/active-low W | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0x46 |
Digit 7 Plane P1 | R/active-low W | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0x47 |
Digit 0a Plane P1 | R/active-low W | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0x48 |
Digit 1a Plane P1 | R/active-low W | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0x49 |
Digit 2a Plane P1 | R/active-low W | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0x4A |
Digit 3a Plane P1 | R/active-low W | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0x4B |
Digit 4a Plane P1 | R/active-low W | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0x4C |
Digit 5a Plane P1 | R/active-low W | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 04D |
Digit 6a Plane P1 | R/active-low W | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0x4E |
Digit 7a Plane P1 | R/active-low W | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0x4F |