will be read-only starting December 31st, 2018. For more info please look at this Forum Post


The NCR 7454 / Futaba M204SD01B VFD (vacuum fluorescent display) module is a large, bright, high quality display capable of displaying 4 rows of 20 character wide text. These displays are made specifically for the NCR 7454 point of sale system, however new, surplus units are available inexpensively and are easily driven by the Arduino with as few as 8 pins. In addition to this library reference, further hardware details are available on the M204SD01B page.

YouTube video of the display in action.

Library Download

The library and examples are available here:

  • - Version updated for Arduino 1.0 and later. NOTE: Tested to compile, not other testing has been done.
  • - Version for pre-1.0 Arduino versions. Tested with samples and hardware.

See Arduino Libraries for information on how to install libraries. For the purposes of that page, this library is a "user-created library".


In the above image the top of the display is to the left.


The VFD requires 5v power rated at 1A. Do not connect to the 5v connection on the Arduino as it can not provide sufficient current. Instead, a separate 5v regulated power supply connection is required. External computer peripherals often have suitable power supplies. Connect power supply GND to display pins 23, 24 and/or 25. Connect power supply 5v to display pins 26, 27 and/or 28.

Before making any further connections, power up the display to test the display and power connections. A startup sequence should be seen, consisting of all pixels being lit, followed by the part and version number (008-0221552 V1.02.00) of the display.

Caution: While the display operates on 5V, higher voltages are generated on board. As with all VFDs, the display board should not be operated outside of an appropriate enclosure.

Control Signals

It is easy to connect the display to the Arduino using commonly available single-wire M-F pin headers. If only F-F wires are available, one end can be converted to male my inserting a short length of solid wire. These wires are available connected together into a separable ribbon which can make it very easy to keep track of connections.

For unmodified example sketches, connections should be made as described below. Note that these connections are designed to make wiring more straightforward when using ribbon cable, at the expense of high Arduino pin usage. Information on how to reduce pin usage is located further below.

Display PinArduino Pin

N/C means the display pin is left unconnected to the Arduino.

Saving Pins

The example control signal wiring connects all data, control and status lines to Arduino pins. This arrangement helps guide connections when using a ribbon cable but uses most (17) of Arduino's pins. It is easy to reduce the pin usage to 10 and with some small compromises, to 9 or even 8.

10 Pins

The four S? connections on the display to not require any connection as they do not communication any information needed to control the display. The two C? lines and the /RESET line can be connected directly to +5V. Note that the samples contain code to drive these control lines high which can now be removed. This leaves 10 pins that need to be connected to Arduino pins: Data0-Data7, BUSY and /STROBE.

9 Pins

The timing of the display is sufficiently predictable that it is possible to control reliably without querying the BUSY pin. BUSY can be left unconnected, in which case Ncr4X20Vfd::DO_NOT_USE_PIN should be used for busyPin when constructing the Ncr4X20Vfd object. The suite of unit tests all pass when using this setting. The primary disadvantage is that sending data to the display can be significantly slower, approximately 250us per character. This is still fast enough for most applications: about as fast as 12C/two wire and faster than serial UART.

Alternatively, if extended characters (international characters, shapes, etc.) are not required, Data 7 can be connected directly to ground. In this case Ncr4X20Vfd::DO_NOT_USE_PIN should be used for data7Pin when constructing the Ncr4X20Vfd object. All standard ASCII characters and display control codes are still useable.

8 Pins

Both of the above approaches for reaching 9 pins can be combined, reducing the number of pins needed to control the display to 8.

Library Reference

The Ncr4X20Vfd library has been designed to be as consistent as possible with the standard Arduino LiquidCrystal library. Code written for LiquidCrystal can often be used with Ncr4X20Vfd with little or no modification.

Methods Consistent Between Ncr4X20Vfd and LiquidCrystal

Methods Unique to Ncr4X20Vfd

Methods Not Supported by Ncr4X20Vfd

The methods below supported by LiquidCrystal are not implemented in Ncr4X20Vfd as they are not implemented by the display. They can be simulated in software, however would add complexity and overhead that is outside of the scope of this library.

  • scrollDisplayLeft()
  • scrollDisplayRight()
  • autoscroll()
  • noAutoscroll()
  • leftToRight()
  • rightToLeft()
  • createChar()


To use examples without modification, the display must be wired as described in the sections above.

More Information