I'm redesigning a product that has a custom LCD glass with a rather strange organization. It uses 22 segments with 14 commons. It's a little bit like the display in the picture below:

enter image description here

Since this is a cost critical product, I'm looking at the extremely common ST7066 LCD controller, which is used to drive alpanumeric LCD displays.

My approach would be to run the ST7066 in two-line mode (16 commons, 1/16 bias) and configure the first four characters of each line to be custom characters. I would use the 64 x 8-bit character generator RAM to define the patterns for those characters thus allowing me to lit up the segments individually as I please.

Now here comes the tricky part: I need 22 segments to control individually. And we're temptingly close with the 8 programmable characters. I need 14 commons, so I must set up the controller into 2-line mode. So I have 4 characters per line. If the characters are 5 pixels wide, that gives 5 x 4 = 20 segments, just short of 22. However, the CGRAM has 8x8 bits per character.

So the question is can the ST7066 / KS0066 / SED1278 be configured to actually display 8x8 characters? Or are the "extra" bits in the CGRAM just don't cares in any configuration? With 8 pixel wide characters, I would have 32 freely controllable segments and I would be home free.

Finally, do you think this approach is viable at all? The segments in the display have hugely different sizes. Does it affect the drive capability of the controller; would larger icons have worse contrast than the small ones? Also, the ST7066 drives 40 segments; since I only use 22, does that play a role in the contrast or the required panel bias voltage?


1 Answer 1


In your proposed scheme you would need to be aware that each position of the DDRAM represents 8 x 5 pixels for a normal display. When you program a pattern into the CGRAM only 5 bits in each byte are used. Look at the Table 5 of the data sheet and you can see this - CGRAM Data b7, b6 and b5 are not used.

If you program the DDRAM with a constant pattern of 00 - 01 - 02 and 03 in the first row of the display and 04 - 05 - 06 and 07 in the second row then you can control a total of 8 x 5 x 8 = 320 total pixels on the screen. You'll get support for the 2 rows x 8 = 16 commons. In addition since only the first four character positions of the DDRAM are used by this scheme you get a total of 4 x 5 = 20 segments. This does not match up with the requirements of your display.

So if your display really does look similar to the one pictured I would venture to guess that you have another option to be able use more of the segments of the St7066 than the first 20. You may very well find that the various 7 segment displays are arranged in the panels scan matrix in a way that you you can use additional segments of the display controller to select various of the 7-segment sites. With a bit luck you may find bit patterns in one of the normal CGROM fonts that can be used select the patterns of the seven segment sections. By selecting the codes that you would write to the DDRAM you could maybe get the 0->9 + blank of each site to give the needed display combinations. This would take some work to see what the possibilities are.

If the scheme I outlined above does not work out then your choice would be to look instead at a graphics display controller chip. These offer a RAM bit for every intersection of the COMMONs and SEGMENTs matrix.

  • \$\begingroup\$ thanks, you've reached the very conclusion that I was afraid of. It's a little (but just a little) strange to have 512 bits of memory and only be able to really take benefit of 320 bits. But I can understand using an existing standard 64x8-bit memory block instead of a custom 64x5-bit block... Right, I could explore the combinations but I doubt I'm successfull - the segments are scattered all over the place. Shame. I could get the 7066 for about USD0.2 currently; the next possible chip I have found is more like USD0.8. \$\endgroup\$
    – PkP
    Jan 6, 2015 at 15:47
  • \$\begingroup\$ I think the reason that the CGRAM is set at 8 bits wide is because one of the advertised features is that RAM unused for character generation can be used for general purpose storage. \$\endgroup\$ Jan 6, 2015 at 15:51
  • \$\begingroup\$ Michael, you're probably right. I was thinking the same actually but forgot to write. Too bad. I could do it if I could redesign the glass, but I need to use the existing one. \$\endgroup\$
    – PkP
    Jan 6, 2015 at 15:58
  • \$\begingroup\$ @PkP - If this is not a one-off or small run project you should consider evaluating the overall cost impact. If the difference in cost of silicon over the production life of the product is more than the cost to make a new glass design then the choice should be obvious. \$\endgroup\$ Jan 6, 2015 at 16:04
  • \$\begingroup\$ Michael, Indeed. But as these projects go, I only do one part of it (new main board and firmware). Other parties have have their own commercial interests and I've learned to not to challenge those, especially in the Far East. I can give recommendations, though. But as far as this project goes, I need to, at least first, come up with my best design that uses the established production chain. Then they will see it as viable/unviable, and if they see the merits of any changes that I propose, (and they can take merit for :D ), such as a new display glass, it may become implemented. \$\endgroup\$
    – PkP
    Jan 6, 2015 at 16:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.