copyright © 2026

AVR: LCD Driver

Using LED or character LCD displays is quite simple. However 7 segment LCD displays are very nice too and look just that bit more professional and use far less power.

The only disadvantage is that they are "difficult" to use because a) they need AC instead of DC to drive and b) they are usually not configurable as matrix and thus need a lot of IOs. There are custom ICs available to do this task but who wants to use some fancy, hard to get IC if it can be done with a normal, cheap and much better AVR? This project is an assembler routine for normal AVR microcontrollers to control a 7 segment display with up to any number of segments/IOs that can be spared on the AVR.

Features:

  • any pin can be assigned to any segment

  • uses less than 0.3% CPU load at 1MHz

  • uses less than 200 words of program memory

  • scanned at 30Hz

  • generator spreadsheet to generate segment data

  • written with the Algrom Assembler

  • runs on any AVR

    picture

Test circuit: a thermometer with DS1621 The driver uses less than 0.3% of the CPU time running at 1MHz. The AC has a frequency of 30Hz which turned out to be totally adequate for a flicker-free display. The pins that drive the segments can be chosen freely across all the ports. They do not need to be on one port for one digit nor do they need to be on the same portpin for each segment. All unused portpins can be used for something else. A calculator spreadsheet is used to decode the segment and port information. This is then exported in data files which are included in the driver.

picture

A pseudo AC is generated by simply inverting the polarity of the backplane (COM) and the segments. Visible segments have the opposite polarity to COM, invisible ones have the same. This is needed because the crystal segments get saturated with DC and fade out.

picture

"digital AC" for displays with common backplane The ultra compact module based on the LCD driver. It has a UART and I2C interface for general purpose use.

picture

The circuit side with ATmega64

picture

The back with pin description

picture

The ultra compact module

picture

Hardly bigger than the LCD itself

Back everything