GLCD Library Support for PIC24H with ST7565R / ST7565P / PCD8544 (Nokia 3310 5510) LCDs

My graphic LCD library (glcd on GitHub) now supports PIC24H with the ST7565R, ST7565P and PCD8544 LCD controllers.

The code has been tested with the Newhaven display NHD-C12864A1Z-FSW-FBW-HTT and NHD-C12832A1Z-FSW-FBW-3V3. I used a Microstick II development board to test these, with demo code available below. I don’t have any PIC24F chips so I wasn’t able to test it with those chips as well (I think I have lost the chip from the Microstick II package). I would think only minor changes would be needed to make it work with PIC24F.

Sample code

Sample code for use with MPLAB X IDE.

Here are some sample projects:

Note that the glcd libraries included with the demos above are not kept up to date as further updates are made to the official glcd library. You can update the library by copying the latest glcd distribution into the existing project files. (take note of custom pin configurations, more details below)

Pin configuration

With the projects above, the pin connections to the LCD’s SPI interface are as follows:

  • SDA (serial data input) => RB14
  • SCK (serial clock) => RB15
  • SS / CS (chip select) => RB2
  • A0 (command / data write selection) => RB3
  • RESET => RA2

To add your own custom pin configuration, you can edit the file ‘devices/PIC24H.h’. You can also make a custom configuration file by creating a `glcd_user_config.h’ file outside of the glcd directory and defining a new compiler symbol ‘GLCD_USER_CONFIG’. Copy the contents of ‘PIC24H.h’ into it. This way, if you need to  update the library, you can simply overwrite the contents of the existing glcd directory without losing your custom pin configuration. Otherwise, you can just keep track yourself of custom changes made to the *.h files in the ‘devices/’ directory.


Footage of Newhaven Display NHD-C12864A1Z-FSW-FBW-HTT in action, running the sample code:

Footage of Newhaven Display NHD-C12832A1Z-FSW-FBW-3V3 in action, running the sample code:

GLCD 0.4 Released – ST7565R and NT75451 support, Blueboard LPC11U37 demo

Version 0.4 of GLCD Graphic LCD Library has been released. It includes added support for:

  • ST7565R LCD controller with SPI serial interface with AVR8 implementation. This is used in Newhaven Display model NHD-C12864WC-FSW-FBW-3V3-M (the device tested on). It should also be compatible with many of the DOG series of COG LCDs by Electronic Assembly, with many of them using the same chip.
  • NT75451 LCD controller with parallel interface with LPC11UXX implementation. This LCD is used in on NGX BlueBoard LPC11U37, and many of their other boards. Thanks to NGX for supplying a sample of their product.

Download version 0.4 release.

Also available:

  • BlueBoard LPC11U37 sample project demonstrating use of the library. Written for Keil MDK, it should be able to be modified to work in other compilers too, but you may need to replace the startup file.
  • AVR Studio 5.1 project demonstrating ST7565R controller on a ATMEGA1280 custom board.

Numerous bug fixes have been performed.

As usual, you can find the latest bleeding edge code at GitHub.

Making custom fonts for GLCD library

Update: I’ve been working on a little Qt based tool called glcd-utils which does makes creating fonts and bitmaps on GLCDs a lot easier than the process below. It is open source, but no binaries available or even much documentation. You can visit the Github page here. Otherwise, back to the tutorial below.

Here’s a quick guide on how to make your own custom fonts for my GLCD library, using the free MikroElectronika GLCD Font Creator. You can download this tool here and install it to your computer. You can download this software here:

This free tool was designed for use with MikroElektronika’s line of compilers, but it also works well with my library.

Install the software and start it up

Go to File -> New Font -> Important an Existing System Font

Select a font you would like to convert.

Choose the range of characters you would like converted. e.g just numbers, or alpha numeric numbers, etc.  32 to 127 covers most characters everyone needs to use. Refer to an ASCII table if you need to find out what number refers to which character.

Now click OK and the font should start to get imported in the program. A screen like below should show. You can click on each character see what the character is and how the pixelation will be set. You can also edit the fonts as well if needed to.

Go to File -> Export for GLCD

You should now see a screen like below. Change your font name to something descriptive. I like to put the start and end characters in it, and also the font size which may already pre filled for you. The font size is the dimensions in pixels of the generated font. In this example it is 31 by 27.

Choose X-GLCD Lib (only option for fonts with height over 8 bits) and KS0108 format.

Click on MikroC tab, and then make two edits to the source.

Change the type to “const char”, and add PROGMEM to just before the ‘=’ character.

This code is now ready. So we need to make a new font file, in our application. Here we’ll make a new file in CooCox editor, but you can use whatever method you like to create a new file.

I like to call the filename the same as the font description we made earlier. It will make it easier later when you’re using it. Copy and paste the code you previously generated into this new file.

We now need to add some #ifdef statements to the start and end of the header file. Like above. Make the symbol name nice and descriptive as well. Here we add to the start of the file:

#ifndef TAHOMA_32_TO_127_32X27_H_
#define TAHOMA_32_TO_127_32X27_H_

And then also add to the end of the file:


Now we’re done, to use the font, include the header file in your source code

#include "Tahoma_32_to_127_31x27.h"

Set your font like this (this is why it I mentioned to call the filename and font array the same name):


Note we need to set the width, height, start char and end char as parameters to the glcd_set_font() function.

Now we’re ready to use it!