display control QVGA TFT MCB1700 KEIL

Dependents:   Touch_Screen_MCB

Files at this revision

API Documentation at this revision

Comitter:
fblanc
Date:
Wed Feb 29 10:11:54 2012 +0000
Child:
1:0ae206eb6e55
Commit message:
alpha v1.0a

Changed in this revision

GLCD_MCB1700.c Show annotated file Show diff for this revision Revisions of this file
GLCD_MCB1700.h Show annotated file Show diff for this revision Revisions of this file
font_16x24_h.h Show annotated file Show diff for this revision Revisions of this file
font_6x8_h.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GLCD_MCB1700.c	Wed Feb 29 10:11:54 2012 +0000
@@ -0,0 +1,749 @@
+#include "mbed.h"
+/******************************************************************************/
+/* GLCD_SPI_LPC1700.c: LPC1700 low level Graphic LCD (240x320 pixels) driven  */
+/*                     with SPI functions                                     */
+/******************************************************************************/
+/* This file is part of the uVision/ARM development tools.                    */
+/* Copyright (c) 2005-2010 Keil Software. All rights reserved.                */
+/* This software may only be used under the terms of a valid, current,        */
+/* end user licence from KEIL for a compatible version of KEIL software       */
+/* development tools. Nothing else gives you the right to use this software.  */
+/******************************************************************************/
+
+
+#include "mbed.h"
+#include "GLCD_MCB1700.h"
+#include "font_6x8_h.h"
+#include "font_16x24_h.h"
+
+/************************** Orientation  configuration ************************/
+
+#define HORIZONTAL  1                   /* If vertical = 0, if horizontal = 1 */
+
+/*********************** Hardware specific configuration **********************/
+
+/* SPI Interface: SPI3
+   
+   PINS: 
+   - CS     = P0.6 (GPIO pin)
+   - RS     = GND
+   - WR/SCK = P0.7 (SCK1)
+   - RD     = GND
+   - SDO    = P0.8 (MISO1)
+   - SDI    = P0.9 (MOSI1)                                                    */
+
+#define PIN_CS      (1 << 6)
+
+/* SPI_SR - bit definitions                                                   */
+#define TFE         0x01
+#define RNE         0x04
+#define BSY         0x10
+
+/*------------------------- Speed dependant settings -------------------------*/
+
+/* If processor works on high frequency delay has to be increased, it can be 
+   increased by factor 2^N by this constant                                   */
+#define DELAY_2N    18
+
+/*---------------------- Graphic LCD size definitions ------------------------*/
+
+#if (HORIZONTAL == 1)
+#define WIDTH       320                 /* Screen Width (in pixels)           */
+#define HEIGHT      240                 /* Screen Hight (in pixels)           */
+#else
+#define WIDTH       240                 /* Screen Width (in pixels)           */
+#define HEIGHT      320                 /* Screen Hight (in pixels)           */
+#endif
+#define BPP         16                  /* Bits per pixel                     */
+#define BYPP        ((BPP+7)/8)         /* Bytes per pixel                    */
+
+/*--------------- Graphic LCD interface hardware definitions -----------------*/
+
+/* Pin CS setting to 0 or 1                                                   */
+#define LCD_CS(x)   ((x) ? (LPC_GPIO0->FIOSET = PIN_CS) : (LPC_GPIO0->FIOCLR = PIN_CS));
+
+#define SPI_START   (0x70)              /* Start byte for SPI transfer        */
+#define SPI_RD      (0x01)              /* WR bit 1 within start              */
+#define SPI_WR      (0x00)              /* WR bit 0 within start              */
+#define SPI_DATA    (0x02)              /* RS bit 1 within start byte         */
+#define SPI_INDEX   (0x00)              /* RS bit 0 within start byte         */
+ 
+/*---------------------------- Global variables ------------------------------*/
+
+/******************************************************************************/
+static volatile unsigned short TextColor = Black, BackColor = White;
+
+
+/************************ Local auxiliary functions ***************************/
+
+/*******************************************************************************
+* Delay in while loop cycles                                                   *
+*   Parameter:    cnt:    number of while cycles to delay                      *
+*   Return:                                                                    *
+*******************************************************************************/
+
+static void delay (int cnt) {
+
+  cnt <<= DELAY_2N;
+  while (cnt--);
+}
+
+
+/*******************************************************************************
+* Send 1 byte over the serial communication                                    *
+*   Parameter:    byte:   byte to be sent                                      *
+*   Return:               byte read while sending                              *
+*******************************************************************************/
+
+static __inline unsigned char spi_send (unsigned char byte) {
+
+  LPC_SSP1->DR = byte;
+  while (!(LPC_SSP1->SR & RNE));        /* Wait for send to finish            */
+  return (LPC_SSP1->DR);
+}
+
+
+/*******************************************************************************
+* Write a command the LCD controller                                           *
+*   Parameter:    cmd:    command to be written                                *
+*   Return:                                                                    *
+*******************************************************************************/
+
+static __inline void wr_cmd (unsigned char cmd) {
+
+  LCD_CS(0)
+  spi_send(SPI_START | SPI_WR | SPI_INDEX);   /* Write : RS = 0, RW = 0       */
+  spi_send(0);
+  spi_send(cmd);
+  LCD_CS(1)
+}
+
+
+/*******************************************************************************
+* Write data to the LCD controller                                             *
+*   Parameter:    dat:    data to be written                                   *
+*   Return:                                                                    *
+*******************************************************************************/
+
+static __inline void wr_dat (unsigned short dat) {
+
+  LCD_CS(0)
+  spi_send(SPI_START | SPI_WR | SPI_DATA);    /* Write : RS = 1, RW = 0       */
+  spi_send((dat >>   8));                     /* Write D8..D15                */
+  spi_send((dat & 0xFF));                     /* Write D0..D7                 */
+  LCD_CS(1)
+}
+
+
+/*******************************************************************************
+* Start of data writing to the LCD controller                                  *
+*   Parameter:                                                                 *
+*   Return:                                                                    *
+*******************************************************************************/
+
+static __inline void wr_dat_start (void) {
+
+  LCD_CS(0)
+  spi_send(SPI_START | SPI_WR | SPI_DATA);    /* Write : RS = 1, RW = 0       */
+}
+
+
+/*******************************************************************************
+* Stop of data writing to the LCD controller                                   *
+*   Parameter:                                                                 *
+*   Return:                                                                    *
+*******************************************************************************/
+
+static __inline void wr_dat_stop (void) {
+
+  LCD_CS(1)
+}
+
+
+/*******************************************************************************
+* Data writing to the LCD controller                                           *
+*   Parameter:    dat:    data to be written                                   *
+*   Return:                                                                    *
+*******************************************************************************/
+
+static __inline void wr_dat_only (unsigned short dat) {
+
+  spi_send((dat >>   8));                     /* Write D8..D15                */
+  spi_send((dat & 0xFF));                     /* Write D0..D7                 */
+}
+
+
+/*******************************************************************************
+* Read data from the LCD controller                                            *
+*   Parameter:                                                                 *
+*   Return:               read data                                            *
+*******************************************************************************/
+
+static __inline unsigned short rd_dat (void) {
+  unsigned short val = 0;
+
+  LCD_CS(0)
+  spi_send(SPI_START | SPI_RD | SPI_DATA);    /* Read: RS = 1, RW = 1         */
+  spi_send(0);                                /* Dummy read 1                 */
+  val   = spi_send(0);                        /* Read D8..D15                 */
+  val <<= 8;
+  val  |= spi_send(0);                        /* Read D0..D7                  */
+  LCD_CS(1)
+  return (val);
+}
+
+
+/*******************************************************************************
+* Write a value to the to LCD register                                         *
+*   Parameter:    reg:    register to be written                               *
+*                 val:    value to write to the register                       *
+*******************************************************************************/
+
+static __inline void wr_reg (unsigned char reg, unsigned short val) {
+
+  wr_cmd(reg);
+  wr_dat(val);
+}
+
+
+/*******************************************************************************
+* Read from the LCD register                                                   *
+*   Parameter:    reg:    register to be read                                  *
+*   Return:               value read from the register                         *
+*******************************************************************************/
+
+static unsigned short rd_reg (unsigned char reg) {
+
+  wr_cmd(reg);
+  return(rd_dat());
+}
+
+
+/************************ Exported functions **********************************/
+
+/*******************************************************************************
+* Initialize the Graphic LCD controller                                        *
+*   Parameter:                                                                 *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_Init (void) { 
+  static unsigned short driverCode;
+
+  /* Enable clock for SSP1, clock = CCLK / 2                                  */
+  LPC_SC->PCONP       |= 0x00000400;
+  LPC_SC->PCLKSEL0    |= 0x00200000;
+
+  /* Configure the LCD Control pins                                           */
+  LPC_PINCON->PINSEL9 &= 0xF0FFFFFF;
+  LPC_GPIO4->FIODIR   |= 0x30000000;
+  LPC_GPIO4->FIOSET    = 0x20000000;
+
+  /* SSEL1 is GPIO output set to high                                         */
+  LPC_GPIO0->FIODIR   |= 0x00000040;
+  LPC_GPIO0->FIOSET    = 0x00000040;
+  LPC_PINCON->PINSEL0 &= 0xFFF03FFF;
+  LPC_PINCON->PINSEL0 |= 0x000A8000;
+
+  /* Enable SPI in Master Mode, CPOL=1, CPHA=1                                */
+  /* Max. 12.5 MBit used for Data Transfer @ 100MHz                           */
+  LPC_SSP1->CR0        = 0x01C7;
+  LPC_SSP1->CPSR       = 0x02;
+  LPC_SSP1->CR1        = 0x02;
+
+  delay(5);                             /* Delay 50 ms                        */
+  driverCode = rd_reg(0x00);
+
+  /* Start Initial Sequence --------------------------------------------------*/
+  wr_reg(0x01, 0x0100);                 /* Set SS bit                         */
+  wr_reg(0x02, 0x0700);                 /* Set 1 line inversion               */
+  wr_reg(0x04, 0x0000);                 /* Resize register                    */
+  wr_reg(0x08, 0x0207);                 /* 2 lines front, 7 back porch        */
+  wr_reg(0x09, 0x0000);                 /* Set non-disp area refresh cyc ISC  */
+  wr_reg(0x0A, 0x0000);                 /* FMARK function                     */
+  wr_reg(0x0C, 0x0000);                 /* RGB interface setting              */
+  wr_reg(0x0D, 0x0000);                 /* Frame marker Position              */
+  wr_reg(0x0F, 0x0000);                 /* RGB interface polarity             */
+
+  /* Power On sequence -------------------------------------------------------*/
+  wr_reg(0x10, 0x0000);                 /* Reset Power Control 1              */
+  wr_reg(0x11, 0x0000);                 /* Reset Power Control 2              */
+  wr_reg(0x12, 0x0000);                 /* Reset Power Control 3              */
+  wr_reg(0x13, 0x0000);                 /* Reset Power Control 4              */
+  delay(20);                            /* Discharge cap power voltage (200ms)*/
+  wr_reg(0x10, 0x12B0);                 /* SAP, BT[3:0], AP, DSTB, SLP, STB   */
+  wr_reg(0x11, 0x0007);                 /* DC1[2:0], DC0[2:0], VC[2:0]        */
+  delay(5);                             /* Delay 50 ms                        */
+  wr_reg(0x12, 0x01BD);                 /* VREG1OUT voltage                   */
+  delay(5);                             /* Delay 50 ms                        */
+  wr_reg(0x13, 0x1400);                 /* VDV[4:0] for VCOM amplitude        */
+  wr_reg(0x29, 0x000E);                 /* VCM[4:0] for VCOMH                 */
+  delay(5);                             /* Delay 50 ms                        */
+  wr_reg(0x20, 0x0000);                 /* GRAM horizontal Address            */
+  wr_reg(0x21, 0x0000);                 /* GRAM Vertical Address              */
+
+  /* Adjust the Gamma Curve --------------------------------------------------*/
+  if (driverCode == 0x5408) {           /* LCD with SPFD5408 LCD Controller   */
+    wr_reg(0x30, 0x0B0D);
+    wr_reg(0x31, 0x1923);
+    wr_reg(0x32, 0x1C26);
+    wr_reg(0x33, 0x261C);
+    wr_reg(0x34, 0x2419);
+    wr_reg(0x35, 0x0D0B);
+    wr_reg(0x36, 0x1006);
+    wr_reg(0x37, 0x0610);
+    wr_reg(0x38, 0x0706);
+    wr_reg(0x39, 0x0304);
+    wr_reg(0x3A, 0x0E05);
+    wr_reg(0x3B, 0x0E01);
+    wr_reg(0x3C, 0x010E);
+    wr_reg(0x3D, 0x050E);
+    wr_reg(0x3E, 0x0403);
+    wr_reg(0x3F, 0x0607);
+  }
+  else {                                /* LCD with other LCD Controller      */
+    wr_reg(0x30, 0x0006);
+    wr_reg(0x31, 0x0101);
+    wr_reg(0x32, 0x0003);
+    wr_reg(0x35, 0x0106);
+    wr_reg(0x36, 0x0B02);
+    wr_reg(0x37, 0x0302);
+    wr_reg(0x38, 0x0707);
+    wr_reg(0x39, 0x0007);
+    wr_reg(0x3C, 0x0600);
+    wr_reg(0x3D, 0x020B);
+  }
+
+  /* Set GRAM area -----------------------------------------------------------*/
+  wr_reg(0x50, 0x0000);                 /* Horizontal GRAM Start Address      */
+  wr_reg(0x51, (HEIGHT-1));             /* Horizontal GRAM End   Address      */
+  wr_reg(0x52, 0x0000);                 /* Vertical   GRAM Start Address      */
+  wr_reg(0x53, (WIDTH-1));              /* Vertical   GRAM End   Address      */
+  if (driverCode == 0x5408)             /* LCD with SPFD5408 LCD Controller   */
+    wr_reg(0x60, 0xA700);               /* Gate Scan Line                     */
+  else                                  /* LCD with other LCD Controller      */
+    wr_reg(0x60, 0x2700);               /* Gate Scan Line                     */
+  wr_reg(0x61, 0x0001);                 /* NDL,VLE, REV                       */
+  wr_reg(0x6A, 0x0000);                 /* Set scrolling line                 */
+
+  /* Partial Display Control -------------------------------------------------*/
+  wr_reg(0x80, 0x0000);
+  wr_reg(0x81, 0x0000);
+  wr_reg(0x82, 0x0000);
+  wr_reg(0x83, 0x0000);
+  wr_reg(0x84, 0x0000);
+  wr_reg(0x85, 0x0000);
+
+  /* Panel Control -----------------------------------------------------------*/
+  wr_reg(0x90, 0x0010);
+  wr_reg(0x92, 0x0000);
+  wr_reg(0x93, 0x0003);
+  wr_reg(0x95, 0x0110);
+  wr_reg(0x97, 0x0000);
+  wr_reg(0x98, 0x0000);
+
+  /* Set GRAM write direction
+     I/D=11 (Horizontal : increment, Vertical : increment)                    */
+
+#if (HORIZONTAL == 1)
+  /* AM=1   (address is updated in vertical writing direction)                */
+  wr_reg(0x03, 0x1038);
+#else 
+  /* AM=0   (address is updated in horizontal writing direction)              */
+  wr_reg(0x03, 0x1030);
+#endif
+
+  wr_reg(0x07, 0x0137);                 /* 262K color and display ON          */
+  LPC_GPIO4->FIOSET = 0x10000000;
+}
+
+
+/*******************************************************************************
+* Set draw window region                                                       *
+*   Parameter:      x:        horizontal position                              *
+*                   y:        vertical position                                *
+*                   w:        window width in pixel                            *
+*                   h:        window height in pixels                          *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_SetWindow (unsigned int x, unsigned int y, unsigned int w, unsigned int h) {
+
+  wr_reg(0x50, x);                      /* Horizontal GRAM Start Address      */
+  wr_reg(0x51, x+w-1);                  /* Horizontal GRAM End   Address (-1) */
+  wr_reg(0x52, y);                      /* Vertical   GRAM Start Address      */
+  wr_reg(0x53, y+h-1);                  /* Vertical   GRAM End   Address (-1) */
+
+  wr_reg(0x20, x);
+  wr_reg(0x21, y);
+}
+
+
+/*******************************************************************************
+* Set draw window region to whole screen                                       *
+*   Parameter:                                                                 *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_WindowMax (void) {
+
+#if (HORIZONTAL == 1)
+  GLCD_SetWindow (0, 0, HEIGHT, WIDTH);
+#else
+  GLCD_SetWindow (0, 0, WIDTH,  HEIGHT);
+#endif
+}
+
+
+/*******************************************************************************
+* Draw a pixel in foreground color                                             *
+*   Parameter:      x:        horizontal position                              *
+*                   y:        vertical position                                *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_PutPixel (unsigned int x, unsigned int y) {
+
+#if (HORIZONTAL == 1)
+  wr_reg(0x20, y);
+  wr_reg(0x21, WIDTH-1-x);
+#else
+  wr_reg(0x20, x);
+  wr_reg(0x21, y);
+#endif
+  wr_cmd(0x22);
+  wr_dat(TextColor);
+}
+
+
+/*******************************************************************************
+* Set foreground color                                                         *
+*   Parameter:      color:    foreground color                                 *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_SetTextColor (unsigned short color) {
+
+  TextColor = color;
+}
+
+
+/*******************************************************************************
+* Set background color                                                         *
+*   Parameter:      color:    background color                                 *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_SetBackColor (unsigned short color) {
+
+  BackColor = color;
+}
+
+
+/*******************************************************************************
+* Clear display                                                                *
+*   Parameter:      color:    display clearing color                           *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_Clear (unsigned short color) {
+  unsigned int i;
+
+  GLCD_WindowMax();
+  wr_cmd(0x22);
+  wr_dat_start();
+  for(i = 0; i < (WIDTH*HEIGHT); i++)
+    wr_dat_only(color);
+  wr_dat_stop();
+}
+
+
+/*******************************************************************************
+* Draw character on given position                                             *
+*   Parameter:      x:        horizontal position                              *
+*                   y:        vertical position                                *
+*                   cw:       character width in pixel                         *
+*                   ch:       character height in pixels                       *
+*                   c:        pointer to character bitmap                      *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_DrawChar_U8 (unsigned int x, unsigned int y, unsigned int cw, unsigned int ch, unsigned char *c) {
+  int idx = 0, i, j;
+
+#if (HORIZONTAL == 1)
+  x = WIDTH-x-cw;
+  GLCD_SetWindow(y, x, ch, cw);
+#else
+  GLCD_SetWindow(x, y, cw, ch);
+#endif
+  wr_cmd(0x22);
+  wr_dat_start();
+  for (j = 0; j < ch; j++) {
+#if (HORIZONTAL == 1)
+    for (i = cw-1; i >= 0; i--) {
+#else
+    for (i = 0; i <= cw-1; i++) {
+#endif
+      if((c[idx] & (1 << i)) == 0x00) {
+        wr_dat_only(BackColor);
+      } else {
+        wr_dat_only(TextColor);
+      }
+    }
+    c++;
+  }
+  wr_dat_stop();
+}
+
+
+/*******************************************************************************
+* Draw character on given position                                             *
+*   Parameter:      x:        horizontal position                              *
+*                   y:        vertical position                                *
+*                   cw:       character width in pixel                         *
+*                   ch:       character height in pixels                       *
+*                   c:        pointer to character bitmap                      *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_DrawChar_U16 (unsigned int x, unsigned int y, unsigned int cw, unsigned int ch, unsigned short *c) {
+  int idx = 0, i, j;
+
+#if (HORIZONTAL == 1)
+  x = WIDTH-x-cw;
+  GLCD_SetWindow(y, x, ch, cw);
+#else
+  GLCD_SetWindow(x, y, cw, ch);
+#endif
+  wr_cmd(0x22);
+  wr_dat_start();
+  for (j = 0; j < ch; j++) {
+#if (HORIZONTAL == 1)
+    for (i = cw-1; i >= 0; i--) {
+#else
+    for (i = 0; i <= cw-1; i++) {
+#endif
+      if((c[idx] & (1 << i)) == 0x00) {
+        wr_dat_only(BackColor);
+      } else {
+        wr_dat_only(TextColor);
+      }
+    }
+    c++;
+  }
+  wr_dat_stop();
+}
+
+
+/*******************************************************************************
+* Disply character on given line                                               *
+*   Parameter:      ln:       line number                                      *
+*                   col:      column number                                    *
+*                   fi:       font index (0 = 6x8, 1 = 16x24)                  *
+*                   c:        ascii character                                  *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_DisplayChar (unsigned int ln, unsigned int col, unsigned char fi, unsigned char c) {
+
+  c -= 32;
+  switch (fi) {
+    case 0:  /* Font 6 x 8 */
+      GLCD_DrawChar_U8 (col *  6, ln *  8,  6,  8, (unsigned char  *)&Font_6x8_h  [c * 8]);
+      break;
+    case 1:  /* Font 16 x 24 */
+      GLCD_DrawChar_U16(col * 16, ln * 24, 16, 24, (unsigned short *)&Font_16x24_h[c * 24]);
+      break;
+  }
+}
+
+
+/*******************************************************************************
+* Disply string on given line                                                  *
+*   Parameter:      ln:       line number                                      *
+*                   col:      column number                                    *
+*                   fi:       font index (0 = 6x8, 1 = 16x24)                  *
+*                   s:        pointer to string                                *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_DisplayString (unsigned int ln, unsigned int col, unsigned char fi, unsigned char *s) {
+
+  GLCD_WindowMax();
+  while (*s) {
+    GLCD_DisplayChar(ln, col++, fi, *s++);
+  }
+}
+
+
+/*******************************************************************************
+* Clear given line                                                             *
+*   Parameter:      ln:       line number                                      *
+*                   fi:       font index (0 = 6x8, 1 = 16x24)                  *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_ClearLn (unsigned int ln, unsigned char fi) {
+  unsigned char i;
+  unsigned char buf[60];
+
+  GLCD_WindowMax();
+  switch (fi) {
+    case 0:  /* Font 6 x 8 */
+      for (i = 0; i < (WIDTH+5)/6; i++)
+        buf[i] = ' ';
+      buf[i+1] = 0;
+      break;
+    case 1:  /* Font 16 x 24 */
+      for (i = 0; i < (WIDTH+15)/16; i++)
+        buf[i] = ' ';
+      buf[i+1] = 0;
+      break;
+  }
+  GLCD_DisplayString (ln, 0, fi, buf);
+}
+
+/*******************************************************************************
+* Draw bargraph                                                                *
+*   Parameter:      x:        horizontal position                              *
+*                   y:        vertical position                                *
+*                   w:        maximum width of bargraph (in pixels)            *
+*                   val:      value of active bargraph (in 1/1024)             *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_Bargraph (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned int val) {
+  int i,j;
+
+  val = (val * w) >> 10;                /* Scale value                        */
+#if (HORIZONTAL == 1)
+  x = WIDTH-x-w;
+  GLCD_SetWindow(y, x, h, w);
+#else
+  GLCD_SetWindow(x, y, w, h);
+#endif
+  wr_cmd(0x22);
+  wr_dat_start();
+  for (i = 0; i < h; i++) {
+#if (HORIZONTAL == 1)
+    for (j = w-1; j >= 0; j--) {
+#else
+    for (j = 0; j <= w-1; j++) {
+#endif
+      if(j >= val) {
+        wr_dat_only(BackColor);
+      } else {
+        wr_dat_only(TextColor);
+      }
+    }
+  }
+  wr_dat_stop();
+}
+
+
+/*******************************************************************************
+* Display graphical bitmap image at position x horizontally and y vertically   *
+* (This function is optimized for 16 bits per pixel format, it has to be       *
+*  adapted for any other bits per pixel format)                                *
+*   Parameter:      x:        horizontal position                              *
+*                   y:        vertical position                                *
+*                   w:        width of bitmap                                  *
+*                   h:        height of bitmap                                 *
+*                   bitmap:   address at which the bitmap data resides         *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_Bitmap (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bitmap) {
+  unsigned int    i, j;
+  unsigned short *bitmap_ptr = (unsigned short *)bitmap;
+
+#if (HORIZONTAL == 1)
+  x = WIDTH-x-w;
+  GLCD_SetWindow(y, x, h, w);
+#else
+  GLCD_SetWindow(x, y, w, h);
+#endif
+  wr_cmd(0x22);
+  wr_dat_start();
+  for (j = 0; j < h; j++) {
+#if (HORIZONTAL == 1)
+    for (i = 0; i < w; i++) {
+      wr_dat_only(*bitmap_ptr++);
+    }
+#else
+    bitmap_ptr += w-1;
+    for (i = 0; i < w; i++) {
+      wr_dat_only(*bitmap_ptr--);
+    }
+    bitmap_ptr += w+1;
+#endif
+  }
+  wr_dat_stop();
+}
+
+
+/*******************************************************************************
+* Display graphical bmp file image at position x horizontally and y vertically *
+* (This function is optimized for 16 bits per pixel format, it has to be       *
+*  adapted for any other bits per pixel format)                                *
+*   Parameter:      x:        horizontal position                              *
+*                   y:        vertical position                                *
+*                   w:        width of bitmap                                  *
+*                   h:        height of bitmap                                 *
+*                   bmp:      address at which the bmp data resides            *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_Bmp (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bmp) {
+  unsigned int    i, j;
+  unsigned short *bitmap_ptr = (unsigned short *)bmp;
+
+#if (HORIZONTAL == 1)
+  x = WIDTH-x-w;
+  GLCD_SetWindow(y, x, h, w);
+#else
+  GLCD_SetWindow(x, y, w, h);
+#endif
+  wr_cmd(0x22);
+  wr_dat_start();
+#if (HORIZONTAL == 1)
+  bitmap_ptr += (h*w)-1;
+  for (j = 0; j < h; j++) {
+    for (i = 0; i < w; i++) {
+      wr_dat_only(*bitmap_ptr--);
+    }
+  }
+#else
+  bitmap_ptr += ((h-1)*w);
+  for (j = 0; j < h; j++) {
+    for (i = 0; i < w; i++) {
+      wr_dat_only(*bitmap_ptr++);
+    }
+    bitmap_ptr -= 2*w;
+  }
+#endif
+  wr_dat_stop();
+}
+
+
+/*******************************************************************************
+* Scroll content of the whole display for dy pixels vertically                 *
+*   Parameter:      dy:       number of pixels for vertical scroll             *
+*   Return:                                                                    *
+*******************************************************************************/
+
+void GLCD_ScrollVertical (unsigned int dy) {
+#if (HORIZONTAL == 0)
+  static unsigned int y = 0;
+
+  y = y + dy;
+  while (y >= HEIGHT) 
+    y -= HEIGHT;
+
+  wr_reg(0x6A, y);
+  wr_reg(0x61, 3);
+#endif
+}
+
+/******************************************************************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GLCD_MCB1700.h	Wed Feb 29 10:11:54 2012 +0000
@@ -0,0 +1,68 @@
+/******************************************************************************/
+/* GLCD.h: Graphic LCD function prototypes and defines                        */
+/******************************************************************************/
+/* This file is part of the uVision/ARM development tools.                    */
+/* Copyright (c) 2005-2009 Keil Software. All rights reserved.                */
+/* This software may only be used under the terms of a valid, current,        */
+/* end user licence from KEIL for a compatible version of KEIL software       */
+/* development tools. Nothing else gives you the right to use this software.  */
+/******************************************************************************/
+
+#ifndef _GLCD_H
+#define _GLCD_H
+
+/*------------------------------------------------------------------------------
+  Color coding
+  GLCD is coded:   15..11 red, 10..5 green, 4..0 blue  (unsigned short)  GLCD_R5, GLCD_G6, GLCD_B5   
+  original coding: 17..12 red, 11..6 green, 5..0 blue                    ORG_R6,  ORG_G6,  ORG_B6
+
+  ORG_R1..5 = GLCD_R0..4,  ORG_R0 = GLCD_R4
+  ORG_G0..5 = GLCD_G0..5,
+  ORG_B1..5 = GLCD_B0..4,  ORG_B0 = GLCD_B4
+ *----------------------------------------------------------------------------*/
+                            
+/* GLCD RGB color definitions                                                 */
+#define Black           0x0000      /*   0,   0,   0 */
+#define Navy            0x000F      /*   0,   0, 128 */
+#define DarkGreen       0x03E0      /*   0, 128,   0 */
+#define DarkCyan        0x03EF      /*   0, 128, 128 */
+#define Maroon          0x7800      /* 128,   0,   0 */
+#define Purple          0x780F      /* 128,   0, 128 */
+#define Olive           0x7BE0      /* 128, 128,   0 */
+#define LightGrey       0xC618      /* 192, 192, 192 */
+#define DarkGrey        0x7BEF      /* 128, 128, 128 */
+#define Blue            0x001F      /*   0,   0, 255 */
+#define Green           0x07E0      /*   0, 255,   0 */
+#define Cyan            0x07FF      /*   0, 255, 255 */
+#define Red             0xF800      /* 255,   0,   0 */
+#define Magenta         0xF81F      /* 255,   0, 255 */
+#define Yellow          0xFFE0      /* 255, 255, 0   */
+#define White           0xFFFF      /* 255, 255, 255 */
+
+#define Line0           ( 0*24)
+#define Line1           ( 1*24)
+#define Line2           ( 2*24)
+#define Line3           ( 3*24)
+#define Line4           ( 4*24)
+#define Line5           ( 5*24)
+#define Line6           ( 6*24)
+#define Line7           ( 7*24)
+#define Line8           ( 8*24)
+#define Line9           ( 9*24)
+
+extern void GLCD_Init           (void);
+extern void GLCD_WindowMax      (void);
+extern void GLCD_PutPixel       (unsigned int x, unsigned int y);
+extern void GLCD_SetTextColor   (unsigned short color);
+extern void GLCD_SetBackColor   (unsigned short color);
+extern void GLCD_Clear          (unsigned short color);
+extern void GLCD_DrawChar       (unsigned int x, unsigned int y, unsigned short *c);
+extern void GLCD_DisplayChar    (unsigned int ln, unsigned int col, unsigned char fi, unsigned char  c);
+extern void GLCD_DisplayString  (unsigned int ln, unsigned int col, unsigned char fi, unsigned char *s);
+extern void GLCD_ClearLn        (unsigned int ln, unsigned char fi);
+extern void GLCD_Bargraph       (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned int val);
+extern void GLCD_Bitmap         (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bitmap);
+extern void GLCD_Bmp            (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bmp);
+extern void GLCD_ScrollVertical (unsigned int dy);
+
+#endif /* _GLCD_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/font_16x24_h.h	Wed Feb 29 10:11:54 2012 +0000
@@ -0,0 +1,472 @@
+/*----------------------------------------------------------------------------
+ * Name:    Font_16x24_h.h
+ * Purpose: ASCII font characters (width 16 pixels, height 24 pixels, 
+ *          horizontal pixel packing)
+ *----------------------------------------------------------------------------
+ * This file is part of the uVision/ARM development tools.
+ * This software may only be used under the terms of a valid, current,
+ * end user licence from KEIL for a compatible version of KEIL software
+ * development tools. Nothing else gives you the right to use this software.
+ *
+ * This software is supplied "AS IS" without warranties of any kind.
+ *
+ * Copyright (c) 2010 Keil - An ARM Company. All rights reserved.
+ *----------------------------------------------------------------------------*/
+
+#ifndef __FONT_16x24_H_H
+#define __FONT_16x24_H_H
+
+const unsigned short Font_16x24_h[] = {
+  /* 0x20: Space ' ' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x21: '!' */
+  0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000, 0x0000,
+  0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x22: '"' */
+  0x0000, 0x0000, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x23: '#' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C60, 0x0C60,
+  0x0C60, 0x0630, 0x0630, 0x1FFE, 0x1FFE, 0x0630, 0x0738, 0x0318,
+  0x1FFE, 0x1FFE, 0x0318, 0x0318, 0x018C, 0x018C, 0x018C, 0x0000,
+  /* 0x24: '$' */
+  0x0000, 0x0080, 0x03E0, 0x0FF8, 0x0E9C, 0x1C8C, 0x188C, 0x008C,
+  0x0098, 0x01F8, 0x07E0, 0x0E80, 0x1C80, 0x188C, 0x188C, 0x189C,
+  0x0CB8, 0x0FF0, 0x03E0, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000,
+  /* 0x25: '%' */
+  0x0000, 0x0000, 0x0000, 0x180E, 0x0C1B, 0x0C11, 0x0611, 0x0611,
+  0x0311, 0x0311, 0x019B, 0x018E, 0x38C0, 0x6CC0, 0x4460, 0x4460,
+  0x4430, 0x4430, 0x4418, 0x6C18, 0x380C, 0x0000, 0x0000, 0x0000,
+  /* 0x26: '&' */
+  0x0000, 0x01E0, 0x03F0, 0x0738, 0x0618, 0x0618, 0x0330, 0x01F0,
+  0x00F0, 0x00F8, 0x319C, 0x330E, 0x1E06, 0x1C06, 0x1C06, 0x3F06,
+  0x73FC, 0x21F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x27: ''' */
+  0x0000, 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x28: '(' */
+  0x0000, 0x0200, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x0060, 0x0060,
+  0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+  0x0060, 0x0060, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0200, 0x0000,
+  /* 0x29: ')' */
+  0x0000, 0x0020, 0x0060, 0x00C0, 0x0180, 0x0180, 0x0300, 0x0300,
+  0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,
+  0x0300, 0x0300, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0020, 0x0000,
+  /* 0x2A: '*' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
+  0x06D8, 0x07F8, 0x01E0, 0x0330, 0x0738, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x2B: '+' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0180, 0x3FFC, 0x3FFC, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x2C: ',' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000,
+  /* 0x2D: '-' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x07E0, 0x07E0, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x2E: '.' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x2F: '/' */
+  0x0000, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300,
+  0x0300, 0x0380, 0x0180, 0x0180, 0x0180, 0x00C0, 0x00C0, 0x00C0,
+  0x0060, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x30: '0' */
+  0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x180C, 0x180C, 0x180C,
+  0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C18, 0x0E38,
+  0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x31: '1' */
+  0x0000, 0x0100, 0x0180, 0x01C0, 0x01F0, 0x0198, 0x0188, 0x0180,
+  0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x32: '2' */
+  0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x1800,
+  0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,
+  0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x33: '3' */
+  0x0000, 0x01E0, 0x07F8, 0x0E18, 0x0C0C, 0x0C0C, 0x0C00, 0x0600,
+  0x03C0, 0x07C0, 0x0C00, 0x1800, 0x1800, 0x180C, 0x180C, 0x0C18,
+  0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x34: '4' */
+  0x0000, 0x0C00, 0x0E00, 0x0F00, 0x0F00, 0x0D80, 0x0CC0, 0x0C60,
+  0x0C60, 0x0C30, 0x0C18, 0x0C0C, 0x3FFC, 0x3FFC, 0x0C00, 0x0C00,
+  0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x35: '5' */
+  0x0000, 0x0FF8, 0x0FF8, 0x0018, 0x0018, 0x000C, 0x03EC, 0x07FC,
+  0x0E1C, 0x1C00, 0x1800, 0x1800, 0x1800, 0x180C, 0x0C1C, 0x0E18,
+  0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x36: '6' */
+  0x0000, 0x07C0, 0x0FF0, 0x1C38, 0x1818, 0x0018, 0x000C, 0x03CC,
+  0x0FEC, 0x0E3C, 0x1C1C, 0x180C, 0x180C, 0x180C, 0x1C18, 0x0E38,
+  0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x37: '7' */
+  0x0000, 0x1FFC, 0x1FFC, 0x0C00, 0x0600, 0x0600, 0x0300, 0x0380,
+  0x0180, 0x01C0, 0x00C0, 0x00E0, 0x0060, 0x0060, 0x0070, 0x0030,
+  0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x38: '8' */
+  0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x0C18, 0x0C18, 0x0638,
+  0x07F0, 0x07F0, 0x0C18, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C38,
+  0x0FF8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x39: '9' */
+  0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C1C, 0x180C, 0x180C, 0x180C,
+  0x1C1C, 0x1E38, 0x1BF8, 0x19E0, 0x1800, 0x0C00, 0x0C00, 0x0E1C,
+  0x07F8, 0x01F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x3A: ':' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x3B: ';' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000,
+  /* 0x3C: '<' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x1000, 0x1C00, 0x0F80, 0x03E0, 0x00F8, 0x0018, 0x00F8, 0x03E0,
+  0x0F80, 0x1C00, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x3D: '=' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x1FF8, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x3E: '>' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0008, 0x0038, 0x01F0, 0x07C0, 0x1F00, 0x1800, 0x1F00, 0x07C0,
+  0x01F0, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x3F: '?' */
+  0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x0C00,
+  0x0600, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x0000, 0x0000,
+  0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x40: '@' */
+  0x0000, 0x0000, 0x07E0, 0x1818, 0x2004, 0x29C2, 0x4A22, 0x4411,
+  0x4409, 0x4409, 0x4409, 0x2209, 0x1311, 0x0CE2, 0x4002, 0x2004,
+  0x1818, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x41: 'A' */
+  0x0000, 0x0380, 0x0380, 0x06C0, 0x06C0, 0x06C0, 0x0C60, 0x0C60,
+  0x1830, 0x1830, 0x1830, 0x3FF8, 0x3FF8, 0x701C, 0x600C, 0x600C,
+  0xC006, 0xC006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x42: 'B' */
+  0x0000, 0x03FC, 0x0FFC, 0x0C0C, 0x180C, 0x180C, 0x180C, 0x0C0C,
+  0x07FC, 0x0FFC, 0x180C, 0x300C, 0x300C, 0x300C, 0x300C, 0x180C,
+  0x1FFC, 0x07FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x43: 'C' */
+  0x0000, 0x07C0, 0x1FF0, 0x3838, 0x301C, 0x700C, 0x6006, 0x0006,
+  0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x6006, 0x700C, 0x301C,
+  0x1FF0, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x44: 'D' */
+  0x0000, 0x03FE, 0x0FFE, 0x0E06, 0x1806, 0x1806, 0x3006, 0x3006,
+  0x3006, 0x3006, 0x3006, 0x3006, 0x3006, 0x1806, 0x1806, 0x0E06,
+  0x0FFE, 0x03FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x45: 'E' */
+  0x0000, 0x3FFC, 0x3FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
+  0x1FFC, 0x1FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
+  0x3FFC, 0x3FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x46: 'F' */
+  0x0000, 0x3FF8, 0x3FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
+  0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
+  0x0018, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x47: 'G' */
+  0x0000, 0x0FE0, 0x3FF8, 0x783C, 0x600E, 0xE006, 0xC007, 0x0003,
+  0x0003, 0xFE03, 0xFE03, 0xC003, 0xC007, 0xC006, 0xC00E, 0xF03C,
+  0x3FF8, 0x0FE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x48: 'H' */
+  0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
+  0x3FFC, 0x3FFC, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
+  0x300C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x49: 'I' */
+  0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x4A: 'J' */
+  0x0000, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,
+  0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0618, 0x0618, 0x0738,
+  0x03F0, 0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x4B: 'K' */
+  0x0000, 0x3006, 0x1806, 0x0C06, 0x0606, 0x0306, 0x0186, 0x00C6,
+  0x0066, 0x0076, 0x00DE, 0x018E, 0x0306, 0x0606, 0x0C06, 0x1806,
+  0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x4C: 'L' */
+  0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
+  0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
+  0x1FF8, 0x1FF8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x4D: 'M' */
+  0x0000, 0xE00E, 0xF01E, 0xF01E, 0xF01E, 0xD836, 0xD836, 0xD836,
+  0xD836, 0xCC66, 0xCC66, 0xCC66, 0xC6C6, 0xC6C6, 0xC6C6, 0xC6C6,
+  0xC386, 0xC386, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x4E: 'N' */
+  0x0000, 0x300C, 0x301C, 0x303C, 0x303C, 0x306C, 0x306C, 0x30CC,
+  0x30CC, 0x318C, 0x330C, 0x330C, 0x360C, 0x360C, 0x3C0C, 0x3C0C,
+  0x380C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x4F: 'O' */
+  0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xC003, 0xC003,
+  0xC003, 0xC003, 0xC003, 0xC003, 0xC003, 0x6006, 0x700E, 0x381C,
+  0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x50: 'P' */
+  0x0000, 0x0FFC, 0x1FFC, 0x380C, 0x300C, 0x300C, 0x300C, 0x300C,
+  0x180C, 0x1FFC, 0x07FC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
+  0x000C, 0x000C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x51: 'Q' */
+  0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xE003, 0xC003,
+  0xC003, 0xC003, 0xC003, 0xC003, 0xE007, 0x6306, 0x3F0E, 0x3C1C,
+  0x3FF8, 0xF7E0, 0xC000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x52: 'R' */
+  0x0000, 0x0FFE, 0x1FFE, 0x3806, 0x3006, 0x3006, 0x3006, 0x3806,
+  0x1FFE, 0x07FE, 0x0306, 0x0606, 0x0C06, 0x1806, 0x1806, 0x3006,
+  0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x53: 'S' */
+  0x0000, 0x03E0, 0x0FF8, 0x0C1C, 0x180C, 0x180C, 0x000C, 0x001C,
+  0x03F8, 0x0FE0, 0x1E00, 0x3800, 0x3006, 0x3006, 0x300E, 0x1C1C,
+  0x0FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x54: 'T' */
+  0x0000, 0x7FFE, 0x7FFE, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x55: 'U' */
+  0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
+  0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x1818,
+  0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x56: 'V' */
+  0x0000, 0x6003, 0x3006, 0x3006, 0x3006, 0x180C, 0x180C, 0x180C,
+  0x0C18, 0x0C18, 0x0E38, 0x0630, 0x0630, 0x0770, 0x0360, 0x0360,
+  0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x57: 'W' */
+  0x0000, 0x6003, 0x61C3, 0x61C3, 0x61C3, 0x3366, 0x3366, 0x3366,
+  0x3366, 0x3366, 0x3366, 0x1B6C, 0x1B6C, 0x1B6C, 0x1A2C, 0x1E3C,
+  0x0E38, 0x0E38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x58: 'X' */
+  0x0000, 0xE00F, 0x700C, 0x3018, 0x1830, 0x0C70, 0x0E60, 0x07C0,
+  0x0380, 0x0380, 0x03C0, 0x06E0, 0x0C70, 0x1C30, 0x1818, 0x300C,
+  0x600E, 0xE007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x59: 'Y' */
+  0x0000, 0xC003, 0x6006, 0x300C, 0x381C, 0x1838, 0x0C30, 0x0660,
+  0x07E0, 0x03C0, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x5A: 'Z' */
+  0x0000, 0x7FFC, 0x7FFC, 0x6000, 0x3000, 0x1800, 0x0C00, 0x0600,
+  0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018, 0x000C, 0x0006,
+  0x7FFE, 0x7FFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x5B: '[' */
+  0x0000, 0x03E0, 0x03E0, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,
+  0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,
+  0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x03E0, 0x03E0, 0x0000,
+  /* 0x5C: '\' */
+  0x0000, 0x0030, 0x0030, 0x0060, 0x0060, 0x0060, 0x00C0, 0x00C0,
+  0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0300, 0x0300, 0x0300,
+  0x0600, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x5D: ']' */
+  0x0000, 0x03E0, 0x03E0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+  0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
+  0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x03E0, 0x03E0, 0x0000,
+  /* 0x5E: '^' */
+  0x0000, 0x0000, 0x01C0, 0x01C0, 0x0360, 0x0360, 0x0360, 0x0630,
+  0x0630, 0x0C18, 0x0C18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x5F: '_' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x60: ''' */
+  0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x61: 'a' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03F0, 0x07F8,
+  0x0C1C, 0x0C0C, 0x0F00, 0x0FF0, 0x0CF8, 0x0C0C, 0x0C0C, 0x0F1C,
+  0x0FF8, 0x18F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x62: 'b' */
+  0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x03D8, 0x0FF8,
+  0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,
+  0x0FF8, 0x03D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x63: 'c' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x07F0,
+  0x0E30, 0x0C18, 0x0018, 0x0018, 0x0018, 0x0018, 0x0C18, 0x0E30,
+  0x07F0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x64: 'd' */
+  0x0000, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1BC0, 0x1FF0,
+  0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,
+  0x1FF0, 0x1BC0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x65: 'e' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,
+  0x0C30, 0x1818, 0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x1838, 0x1C30,
+  0x0FF0, 0x07C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x66: 'f' */
+  0x0000, 0x0F80, 0x0FC0, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,
+  0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
+  0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x67: 'g' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0DE0, 0x0FF8,
+  0x0E18, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0E18,
+  0x0FF8, 0x0DE0, 0x0C00, 0x0C0C, 0x061C, 0x07F8, 0x01F0, 0x0000,
+  /* 0x68: 'h' */
+  0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x07D8, 0x0FF8,
+  0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,
+  0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x69: 'i' */
+  0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
+  0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
+  0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x6A: 'j' */
+  0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
+  0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
+  0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00F8, 0x0078, 0x0000,
+  /* 0x6B: 'k' */
+  0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0C0C, 0x060C,
+  0x030C, 0x018C, 0x00CC, 0x006C, 0x00FC, 0x019C, 0x038C, 0x030C,
+  0x060C, 0x0C0C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x6C: 'l' */
+  0x0000, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
+  0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
+  0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x6D: 'm' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3C7C, 0x7EFF,
+  0xE3C7, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183,
+  0xC183, 0xC183, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x6E: 'n' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0798, 0x0FF8,
+  0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,
+  0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x6F: 'o' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,
+  0x0C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C30,
+  0x0FF0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x70: 'p' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D8, 0x0FF8,
+  0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,
+  0x0FF8, 0x03D8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0000,
+  /* 0x71: 'q' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1BC0, 0x1FF0,
+  0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,
+  0x1FF0, 0x1BC0, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x0000,
+  /* 0x72: 'r' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07B0, 0x03F0,
+  0x0070, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
+  0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x73: 's' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03E0, 0x03F0,
+  0x0E38, 0x0C18, 0x0038, 0x03F0, 0x07C0, 0x0C00, 0x0C18, 0x0E38,
+  0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x74: 't' */
+  0x0000, 0x0000, 0x0080, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,
+  0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
+  0x07C0, 0x0780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x75: 'u' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1818, 0x1818,
+  0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C38,
+  0x1FF0, 0x19E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x76: 'v' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x180C, 0x0C18,
+  0x0C18, 0x0C18, 0x0630, 0x0630, 0x0630, 0x0360, 0x0360, 0x0360,
+  0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x77: 'w' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0x41C1,
+  0x61C3, 0x6363, 0x6363, 0x6363, 0x3636, 0x3636, 0x3636, 0x1C1C,
+  0x1C1C, 0x1C1C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x78: 'x' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x381C, 0x1C38,
+  0x0C30, 0x0660, 0x03C0, 0x03C0, 0x03C0, 0x03C0, 0x0660, 0x0C30,
+  0x1C38, 0x381C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x79: 'y' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3018, 0x1830,
+  0x1830, 0x1870, 0x0C60, 0x0C60, 0x0CE0, 0x06C0, 0x06C0, 0x0380,
+  0x0380, 0x0380, 0x0180, 0x0180, 0x01C0, 0x00F0, 0x0070, 0x0000,
+  /* 0x7A: 'z' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FFC, 0x1FFC,
+  0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,
+  0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x7B: '{' */
+  0x0000, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
+  0x00C0, 0x0060, 0x0060, 0x0030, 0x0060, 0x0040, 0x00C0, 0x00C0,
+  0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0000, 0x0000,
+  /* 0x7C: '|' */
+  0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000,
+  /* 0x7D: '}' */
+  0x0000, 0x0060, 0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0180,
+  0x0180, 0x0300, 0x0300, 0x0600, 0x0300, 0x0100, 0x0180, 0x0180,
+  0x0180, 0x0180, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0000, 0x0000,
+  /* 0x7E: '~' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x10F0, 0x1FF8, 0x0F08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x7F: ' ' */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+
+  /* Special Symbols  starting at character 0x80 */
+  /* 0x80: Circle - Empty */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0C30, 0x1008,
+  0x2004, 0x2004, 0x4002, 0x4002, 0x4002, 0x4002, 0x4002, 0x2004,
+  0x2004, 0x1008, 0x0C30, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x81: Circle - Full */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0, 0x1FF8,
+  0x3FFC, 0x3FFC, 0x7FFE, 0x7FFE, 0x7FFE, 0x7FFE, 0x7FFE, 0x3FFC,
+  0x3FFC, 0x1FF8, 0x0FF0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x82: Square - Empty */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07E0,
+  0x0FF0, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0FF0,
+  0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x83: Square - Full */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07E0,
+  0x0FF0, 0x1FF8, 0x1FF8, 0x1FF8, 0x1FF8, 0x1FF8, 0x1FF8, 0x0FF0,
+  0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x84: Up - Empty */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x03C0, 0x0660, 0x0C30,
+  0x1818, 0x1818, 0x1FF8, 0x1FF8, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x85: Up - Full */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x03C0, 0x07E0, 0x0FF0,
+  0x1FF8, 0x1FF8, 0x1FF8, 0x1FF8, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x86: Down - Empty */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x1FF8, 0x1818, 0x1818,
+  0x0C30, 0x0660, 0x03C0, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x87: Down - Full */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x1FF8, 0x1FF8, 0x1FF8,
+  0x0FF0, 0x07E0, 0x03C0, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000,
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x88: Left - Empty */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01E0,
+  0x01F0, 0x0198, 0x018C, 0x0186, 0x0186, 0x018C, 0x0198, 0x01F0,
+  0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x89: Left - Full */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01E0,
+  0x01F0, 0x01F8, 0x01FC, 0x01FE, 0x01FE, 0x01FC, 0x01F8, 0x01F0,
+  0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x8A: Right - Empty */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0780,
+  0x0F80, 0x1980, 0x3180, 0x6180, 0x6180, 0x3180, 0x1980, 0x0F80,
+  0x0780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x8B: Right - Full */
+  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0780,
+  0x0F80, 0x1F80, 0x3F80, 0x7F80, 0x7F80, 0x3F80, 0x1F80, 0x0F80,
+  0x0780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+  /* 0x8C: Wait - Empty */
+  0x0000, 0x01C0, 0x0220, 0x0220, 0x0140, 0x0630, 0x0808, 0x0808,
+  0x0808, 0x0808, 0x0808, 0x0808, 0x0808, 0x0220, 0x0220, 0x0220,
+  0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0000,
+  /* 0x8D: Wait - Full */
+  0x0000, 0x01C0, 0x03E0, 0x03E0, 0x01C0, 0x07F0, 0x0DD8, 0x0DD8,
+  0x0DD8, 0x0DD8, 0x0DD8, 0x0DD8, 0x0DD8, 0x0360, 0x0360, 0x0360,
+  0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0000,
+  /* 0x8E: Walk - Empty */
+  0x0000, 0x01C0, 0x0220, 0x0220, 0x0140, 0x0630, 0x0808, 0x0808,
+  0x0808, 0x1004, 0x2002, 0x2002, 0x0140, 0x0220, 0x0220, 0x0410,
+  0x0808, 0x0808, 0x1004, 0x1004, 0x2004, 0x4004, 0x0000, 0x0000,
+  /* 0x8F: Walk - Full */
+  0x0000, 0x01C0, 0x03E0, 0x03E0, 0x01C0, 0x07F0, 0x0DD8, 0x0DD8,
+  0x0DD8, 0x19CC, 0x31C6, 0x61C2, 0x01C0, 0x0360, 0x0360, 0x0670,
+  0x0C38, 0x0C18, 0x180C, 0x180C, 0x300C, 0x600C, 0x0000, 0x0000,
+};
+
+#endif /* __FONT_16x24_H_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/font_6x8_h.h	Wed Feb 29 10:11:54 2012 +0000
@@ -0,0 +1,248 @@
+/*----------------------------------------------------------------------------
+ * Name:    Font_6x8_h.h
+ * Purpose: ASCII font characters (width 6 pixels, height 8 pixels, 
+ *          horizontal pixel packing)
+ *----------------------------------------------------------------------------
+ * This file is part of the uVision/ARM development tools.
+ * This software may only be used under the terms of a valid, current,
+ * end user licence from KEIL for a compatible version of KEIL software
+ * development tools. Nothing else gives you the right to use this software.
+ *
+ * This software is supplied "AS IS" without warranties of any kind.
+ *
+ * Copyright (c) 2010 Keil - An ARM Company. All rights reserved.
+ *----------------------------------------------------------------------------*/
+
+#ifndef __FONT_6x8_H_H
+#define __FONT_6x8_H_H
+
+const unsigned char Font_6x8_h[] = {
+  /* 0x20: Space ' ' */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  /* 0x21: '!' */
+  0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x00,
+  /* 0x22: '"' */
+  0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
+  /* 0x23: '#' */
+  0x0A, 0x0A, 0x1F, 0x0A, 0x1F, 0x0A, 0x0A, 0x00,
+  /* 0x24: '$' */
+  0x04, 0x1E, 0x05, 0x0E, 0x14, 0x0F, 0x04, 0x00,
+  /* 0x25: '%' */
+  0x03, 0x13, 0x08, 0x04, 0x02, 0x19, 0x18, 0x00,
+  /* 0x26: '&' */
+  0x02, 0x05, 0x05, 0x02, 0x15, 0x09, 0x16, 0x00,
+  /* 0x27: ''' */
+  0x0C, 0x0C, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00,
+  /* 0x28: '(' */
+  0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08, 0x00,
+  /* 0x29: ')' */
+  0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x02, 0x00,
+  /* 0x2A: '*' */
+  0x00, 0x04, 0x15, 0x0E, 0x0E, 0x15, 0x04, 0x00,
+  /* 0x2B: '+' */
+  0x00, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x00, 0x00,
+  /* 0x2C: ',' */
+  0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x04, 0x02,
+  /* 0x2D: '-' */
+  0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00,
+  /* 0x2E: '.' */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00,
+  /* 0x2F: '/' */
+  0x00, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00,
+  /* 0x30: '0' */
+  0x0E, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0E, 0x00,
+  /* 0x31: '1' */
+  0x04, 0x06, 0x04, 0x04, 0x04, 0x04, 0x0E, 0x00,
+  /* 0x32: '2' */
+  0x0E, 0x11, 0x10, 0x0E, 0x01, 0x01, 0x1F, 0x00,
+  /* 0x33: '3' */
+  0x1F, 0x10, 0x08, 0x0C, 0x10, 0x11, 0x0E, 0x00,
+  /* 0x34: '4' */
+  0x08, 0x0C, 0x0A, 0x09, 0x1F, 0x08, 0x08, 0x00,
+  /* 0x35: '5' */
+  0x1F, 0x01, 0x0F, 0x10, 0x10, 0x11, 0x0E, 0x00,
+  /* 0x36: '6' */
+  0x1C, 0x02, 0x01, 0x0F, 0x11, 0x11, 0x0E, 0x00,
+  /* 0x37: '7' */
+  0x1F, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00,
+  /* 0x38: '8' */
+  0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x0E, 0x00,
+  /* 0x39: '9' */
+  0x0E, 0x11, 0x11, 0x1E, 0x10, 0x08, 0x07, 0x00,
+  /* 0x3A: ':' */
+  0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00,
+  /* 0x3B: ';' */
+  0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x02, 0x00,
+  /* 0x3C: '<' */
+  0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00,
+  /* 0x3D: '=' */
+  0x00, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00,
+  /* 0x3E: '>' */
+  0x02, 0x04, 0x08, 0x10, 0x08, 0x04, 0x02, 0x00,
+  /* 0x3F: '?' */
+  0x0E, 0x11, 0x10, 0x0C, 0x04, 0x00, 0x04, 0x00,
+  /* 0x40: '@' */
+  0x0E, 0x11, 0x15, 0x1D, 0x0D, 0x01, 0x1E, 0x00,
+  /* 0x41: 'A' */
+  0x04, 0x0A, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x00,
+  /* 0x42: 'B' */
+  0x0F, 0x11, 0x11, 0x0F, 0x11, 0x11, 0x0F, 0x00,
+  /* 0x43: 'C' */
+  0x0E, 0x11, 0x01, 0x01, 0x01, 0x11, 0x0E, 0x00,
+  /* 0x44: 'D' */
+  0x0F, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0F, 0x00,
+  /* 0x45: 'E' */
+  0x1F, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x1F, 0x00,
+  /* 0x46: 'F' */
+  0x1F, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x00,
+  /* 0x47: 'G' */
+  0x1E, 0x11, 0x01, 0x01, 0x19, 0x11, 0x1E, 0x00,
+  /* 0x48: 'H' */
+  0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11, 0x00,
+  /* 0x49: 'I' */
+  0x0E, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0E, 0x00,
+  /* 0x4A: 'J' */
+  0x1C, 0x08, 0x08, 0x08, 0x08, 0x09, 0x06, 0x00,
+  /* 0x4B: 'K' */
+  0x11, 0x09, 0x05, 0x03, 0x05, 0x09, 0x11, 0x00,
+  /* 0x4C: 'L' */
+  0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1F, 0x00,
+  /* 0x4D: 'M' */
+  0x11, 0x1B, 0x15, 0x15, 0x15, 0x11, 0x11, 0x00,
+  /* 0x4E: 'N' */
+  0x11, 0x11, 0x13, 0x15, 0x19, 0x11, 0x11, 0x00,
+  /* 0x4F: 'O' */
+  0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00,
+  /* 0x50: 'P' */
+  0x0F, 0x11, 0x11, 0x0F, 0x01, 0x01, 0x01, 0x00,
+  /* 0x51: 'Q' */
+  0x0E, 0x11, 0x11, 0x11, 0x15, 0x09, 0x16, 0x00,
+  /* 0x52: 'R' */
+  0x0F, 0x11, 0x11, 0x0F, 0x05, 0x09, 0x11, 0x00,
+  /* 0x53: 'S' */
+  0x0E, 0x11, 0x01, 0x0E, 0x10, 0x11, 0x0E, 0x00,
+  /* 0x54: 'T' */
+  0x1F, 0x15, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00,
+  /* 0x55: 'U' */
+  0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00,
+  /* 0x56: 'V' */
+  0x11, 0x11, 0x11, 0x11, 0x11, 0x0A, 0x04, 0x00,
+  /* 0x57: 'W' */
+  0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x0A, 0x00,
+  /* 0x58: 'X' */
+  0x11, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x11, 0x00,
+  /* 0x59: 'Y' */
+  0x11, 0x11, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x00,
+  /* 0x5A: 'Z' */
+  0x1F, 0x10, 0x08, 0x0E, 0x02, 0x01, 0x1F, 0x00,
+  /* 0x5B: '[' */
+  0x1E, 0x02, 0x02, 0x02, 0x02, 0x02, 0x1E, 0x00,
+  /* 0x5C: '\' */
+  0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
+  /* 0x5D: ']' */
+  0x1E, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1E, 0x00,
+  /* 0x5E: '^' */
+  0x04, 0x0A, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+  /* 0x5F: '_' */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00,
+  /* 0x60: ''' */
+  0x06, 0x06, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00,
+  /* 0x61: 'a' */
+  0x00, 0x00, 0x06, 0x08, 0x0E, 0x09, 0x1E, 0x00,
+  /* 0x62: 'b' */
+  0x01, 0x01, 0x0D, 0x13, 0x11, 0x13, 0x0D, 0x00,
+  /* 0x63: 'c' */
+  0x00, 0x00, 0x0E, 0x11, 0x01, 0x11, 0x0E, 0x00,
+  /* 0x64: 'd' */
+  0x10, 0x10, 0x16, 0x19, 0x11, 0x19, 0x16, 0x00,
+  /* 0x65: 'e' */
+  0x00, 0x00, 0x0E, 0x11, 0x1F, 0x01, 0x0E, 0x00,
+  /* 0x66: 'f' */
+  0x08, 0x14, 0x04, 0x0E, 0x04, 0x04, 0x04, 0x00,
+  /* 0x67: 'g' */
+  0x00, 0x00, 0x0E, 0x19, 0x19, 0x16, 0x10, 0x0E,
+  /* 0x68: 'h' */
+  0x01, 0x01, 0x0D, 0x13, 0x11, 0x11, 0x11, 0x00,
+  /* 0x69: 'i' */
+  0x04, 0x00, 0x06, 0x04, 0x04, 0x04, 0x0E, 0x00,
+  /* 0x6A: 'j' */
+  0x08, 0x00, 0x08, 0x08, 0x08, 0x09, 0x06, 0x00,
+  /* 0x6B: 'k' */
+  0x01, 0x01, 0x09, 0x05, 0x03, 0x05, 0x09, 0x00,
+  /* 0x6C: 'l' */
+  0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0E, 0x00,
+  /* 0x6D: 'm' */
+  0x00, 0x00, 0x0B, 0x15, 0x15, 0x15, 0x15, 0x00,
+  /* 0x6E: 'n' */
+  0x00, 0x00, 0x0D, 0x13, 0x11, 0x11, 0x11, 0x00,
+  /* 0x6F: 'o' */
+  0x00, 0x00, 0x0E, 0x11, 0x11, 0x11, 0x0E, 0x00,
+  /* 0x70: 'p' */
+  0x00, 0x00, 0x0D, 0x13, 0x13, 0x0D, 0x01, 0x01,
+  /* 0x71: 'q' */
+  0x00, 0x00, 0x16, 0x19, 0x19, 0x16, 0x10, 0x10,
+  /* 0x72: 'r' */
+  0x00, 0x00, 0x0D, 0x13, 0x01, 0x01, 0x01, 0x00,
+  /* 0x73: 's' */
+  0x00, 0x00, 0x1E, 0x01, 0x0E, 0x10, 0x0F, 0x00,
+  /* 0x74: 't' */
+  0x04, 0x04, 0x1F, 0x04, 0x04, 0x14, 0x08, 0x00,
+  /* 0x75: 'u' */
+  0x00, 0x00, 0x11, 0x11, 0x11, 0x19, 0x16, 0x00,
+  /* 0x76: 'v' */
+  0x00, 0x00, 0x11, 0x11, 0x11, 0x0A, 0x04, 0x00,
+  /* 0x77: 'w' */
+  0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0A, 0x00,
+  /* 0x78: 'x' */
+  0x00, 0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x00,
+  /* 0x79: 'y' */
+  0x00, 0x00, 0x11, 0x11, 0x1E, 0x10, 0x11, 0x0E,
+  /* 0x7A: 'z' */
+  0x00, 0x00, 0x1F, 0x08, 0x04, 0x02, 0x1F, 0x00,
+  /* 0x7B: '{' */
+  0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x08, 0x00,
+  /* 0x7C: '|' */
+  0x04, 0x04, 0x04, 0x00, 0x04, 0x04, 0x04, 0x00,
+  /* 0x7D: '}' */
+  0x02, 0x04, 0x04, 0x08, 0x04, 0x04, 0x02, 0x00,
+  /* 0x7E: '~' */
+  0x02, 0x15, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+  /* 0x7F: ' ' */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+  /* Special Symbols  starting at character 0x80 */
+  /* 0x80: Circle - Empty */
+  0x00, 0x00, 0x0C, 0x12, 0x12, 0x0C, 0x00, 0x00,
+  /* 0x81: Circle - Full */
+  0x00, 0x00, 0x0C, 0x1E, 0x1E, 0x0C, 0x00, 0x00,
+  /* 0x82: Square - Empty */
+  0x00, 0x00, 0x1E, 0x12, 0x12, 0x1E, 0x00, 0x00,
+  /* 0x83: Square - Full */
+  0x00, 0x00, 0x1E, 0x1E, 0x1E, 0x1E, 0x00, 0x00,
+  /* 0x84: Up - Empty */
+  0x00, 0x00, 0x0C, 0x0C, 0x12, 0x1E, 0x00, 0x00,
+  /* 0x85: Up - Full */
+  0x00, 0x00, 0x0C, 0x0C, 0x1E, 0x1E, 0x00, 0x00,
+  /* 0x86: Down - Empty */
+  0x00, 0x00, 0x1E, 0x12, 0x0C, 0x0C, 0x00, 0x00,
+  /* 0x87: Down - Full */
+  0x00, 0x00, 0x1E, 0x1E, 0x0C, 0x0C, 0x00, 0x00,
+  /* 0x88: Left - Empty */
+  0x00, 0x00, 0x18, 0x16, 0x16, 0x18, 0x00, 0x00,
+  /* 0x89: Left - Full */
+  0x00, 0x00, 0x18, 0x1E, 0x1E, 0x18, 0x00, 0x00,
+  /* 0x8A: Right - Empty */
+  0x00, 0x00, 0x06, 0x1A, 0x1A, 0x06, 0x00, 0x00,
+  /* 0x8B: Right - Full */
+  0x00, 0x00, 0x06, 0x1E, 0x1E, 0x06, 0x00, 0x00,
+  /* 0x8C: Wait - Empty */
+  0x00, 0x00, 0x0C, 0x12, 0x12, 0x0C, 0x00, 0x00,
+  /* 0x8D: Wait - Full */
+  0x00, 0x00, 0x0C, 0x1E, 0x1E, 0x0C, 0x00, 0x00,
+  /* 0x8E: Walk - Empty */
+  0x00, 0x00, 0x1E, 0x12, 0x12, 0x1E, 0x00, 0x00,
+  /* 0x8F: Walk - Full */
+  0x00, 0x00, 0x1E, 0x1E, 0x1E, 0x1E, 0x00, 0x00,
+};
+
+#endif /* __FONT_6x8_H_H */