
It's a 128x128 1.44" color LCD, with a serial interface and a "graphics processor" attached. Sparkfun has them for about $32. One of the comments from the Sparkfun page:
So let me get this straight. This thing is a color LCD with built in controller, backlight circuitry, microSD socket which is compatible with both low capacity and high capacity cards, AND! it basically has a user programmable microcontroller with 10k of program space and 2 GPIO lines in addition to all the on-board control lines for interfacing with the LCD?
The product pages are here: uLCD-144(GFX)
4D has two versions: GFX and SGC. GFX is basically a "standalone" version, meaning you program the built in controller directly, and can built an interface to whatever you want (netduino, pic, etc -- but you have to write the interface)
SGC is more like a "traditional" serial display, where you send it command like "draw a circle here", "display this text", etc.
At first I thought the difference was actually in the hardware, but it's not: it's just firmware. You can reflash the GFX to the SGC and back without any trouble. You can get the SGC firmware here.
I was able to power, test, flash, and program it using the 3.3v Sparkfun FTDI breakout via a breadboard, in spite of the board requiring 5v. I did have to manually toggle the reset line, but it was flawless, otherwise.
Here is the start of the class I'm building to interface with it:
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
using System.IO.Ports;
namespace uLCD_144_Test1
{
class uLCD_144
{
public SerialPort _COM2;
public void init()
{
using (OutputPort d4 = new OutputPort(Pins.GPIO_PIN_D4, true))
{
d4.Write(false);
d4.Write(true);
}
Thread.Sleep(2000);
this.write(new byte[] { (byte)0x55 });
}
public void drawbitmap(byte[] bmp)
{
//2.2.5 Draw Image-Icon - 49hex
//Command cmd, x, y, width, height, colourMode, pixel1, .. pixelN
byte[] cmd = new byte[] { (byte)0x49, (byte)0x00, (byte)0x2A, (byte)0x80, (byte)0x28, (byte)0x08 };
this.write(cmd, false);
this.write(bmp);
}
public void write(byte[] ba, bool pause = true)
{
if (this._COM2.IsOpen)
{
this._COM2.Write(ba, 0, ba.Length);
int sleeptime = (ba.Length / 14) + 1; //(calculate transmission time, at 115200, it can send 14 bytes / ms
Debug.Print(sleeptime.ToString());
if (pause)
{
Thread.Sleep(sleeptime);
}
}
else
{
}
}
public uLCD_144()
{
this._COM2 = new SerialPort(SerialPorts.COM2, 115200);
this._COM2.Open();
this.init();
}
}
}











