Class library for a Topway LM6029ACW graphics LCD.

LM6029ACW.cpp

Committer:
grantphillips
Date:
2016-02-08
Revision:
0:79ef6ebe51ae

File content as of revision 0:79ef6ebe51ae:

#include "LM6029ACW.h"
#include "mbed.h"
 

/* ***************************************** Public Functions ***************************************** */

LM6029ACW::LM6029ACW(PinName CS1, PinName RES, PinName RS, PinName WR, PinName RD, PinName DB7, PinName DB6, PinName DB5, PinName DB4, PinName DB3, PinName DB2, PinName DB1, PinName DB0) 
: CS1pin(CS1), RESpin(RES), RSpin(RS), WRpin(WR), RDpin(RD), DATApins(DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7) {
    character_x = 0;
    character_y = 0;
    Init();
}


void LM6029ACW::ClrScr(unsigned char color)
{
    unsigned char i, j, x=0;

    CS1pin = 0;
    for(i=0; i<8; i++)
    {
        x=0;
        SetColumn(0);
        SetPage(i);
        for(j=0; j<128; j++)
            if(color==0)
            {
                WriteData(0x00);
                DisplayRAM[x][i] = 0x00;
                x++;
            }
            else
            {
                WriteData(0xff);
                DisplayRAM[x][i] = 0xff;
                x++;
            }
    }
    CS1pin = 1;
}


void LM6029ACW::PowerSave(void)
{
    CS1pin = 0;
    WriteCommand(0xae);
    WriteCommand(0xa5);
    CS1pin = 1;
}


void LM6029ACW::PowerActive(void)
{
    CS1pin = 0;
    WriteCommand(0xa4);
    WriteCommand(0xaf);
    CS1pin = 1;
}


void LM6029ACW::DrawPixel(unsigned char x, unsigned char y, unsigned char color)
{
    unsigned char page, temp1, temp2;

    page = y >> 3;
    y = y & 0x07;
    temp1 = DisplayRAM[x][page];
    temp2 = 1 << y;
    switch(color)
    {
        case 0: temp1 = temp1 & ~temp2;
                break;
        case 1: temp1 = temp1 | temp2;
                break;
        case 2: temp1 = temp1 ^ temp2;
                break;
    }
    DisplayRAM[x][page] = temp1;
    CS1pin = 0;
    SetColumn(x);
    SetPage(page);
    WriteData((unsigned char)(temp1));
    CS1pin = 1;
}


void LM6029ACW::DrawLine(int x1, int y1, int x2, int y2, unsigned int color)
{
   int        dy, dx;
   signed char  addx=1, addy=1;
   signed int P, diff;

   int i=0;
   dx = abs((signed int)(x2 - x1));
   dy = abs((signed int)(y2 - y1));

   if(x1 > x2)
      addx = -1;
   if(y1 > y2)
      addy = -1;

   if(dx >= dy)
   {
      dy *= 2;
      P = dy - dx;
      diff = P - dx;

      for(; i<=dx; ++i)
      {
         DrawPixel(x1, y1, color);

         if(P < 0)
         {
            P  += dy;
            x1 += addx;
         }
         else
         {
            P  += diff;
            x1 += addx;
            y1 += addy;
         }
      }
   }
   else
   {
      dx *= 2;
      P = dx - dy;
      diff = P - dy;

      for(; i<=dy; ++i)
      {
          DrawPixel(x1, y1, color);

         if(P < 0)
         {
            P  += dx;
            y1 += addy;
         }
         else
         {
            P  += diff;
            x1 += addx;
            y1 += addy;
         }
      }
   }
}


void LM6029ACW::DrawCircle(unsigned char x, unsigned char y, unsigned char radius, unsigned char fill, unsigned char color)
{
   signed char a, b, P;

   a = 0;
   b = radius;
   P = 1 - radius;

   do
   {
      if(fill)
      {
         DrawLine(x-a, y+b, x+a, y+b, color);
         DrawLine(x-a, y-b, x+a, y-b, color);
         DrawLine(x-b, y+a, x+b, y+a, color);
         DrawLine(x-b, y-a, x+b, y-a, color);
      }
      else
      {
         DrawPixel(a+x, b+y, color);
         DrawPixel(b+x, a+y, color);
         DrawPixel(x-a, b+y, color);
         DrawPixel(x-b, a+y, color);
         DrawPixel(b+x, y-a, color);
         DrawPixel(a+x, y-b, color);
         DrawPixel(x-a, y-b, color);
         DrawPixel(x-b, y-a, color);
      }

      if(P < 0)
         P += 3 + 2 * a++;
      else
         P += 5 + 2 * (a++ - b--);
    } while(a <= b);
}


void LM6029ACW::GotoXY(unsigned char x, unsigned char y)
{
  if(x<=20)
    character_x = x;
  else
    character_x = 0;

  if(y<=7)
    character_y = y;
  else
    character_y = 0;
}


void LM6029ACW::PutStr(char *str, unsigned char color)
{
    unsigned int i=0;

    do
    {
        PutChar(str[i], color);
        i++;
    }while(str[i]!='\0');
}


void LM6029ACW::PutChar(unsigned char c, unsigned char color)
{
    unsigned char x, page;

    x = character_x * 6 + 1;
    page = character_y;

    DrawChar(c, x, page, color);
    if(character_x == 20)
    {
        character_x=0;
        if(character_y==7)
            character_y=0;
        else
            character_y++;
    }
    else
        character_x++;
}












/* ***************************************** Private Functions ***************************************** */

void LM6029ACW::Delay(unsigned int del)
{
    unsigned int i=0;

    while(i<del)
        i++;
}


void LM6029ACW::WriteCommand(unsigned char cmd)
{
    RSpin = 0;

    DATApins = cmd; 
    wait(lcd_delayx);
    WRpin = 0;  
    wait(lcd_delayx);
    WRpin = 1;
}


void LM6029ACW::WriteData(unsigned char dat)
{
    RSpin = 1;

    DATApins = dat;
    wait(lcd_delayx);
    WRpin = 0;  
    wait(lcd_delayx);
    WRpin = 1;
}
 

void LM6029ACW::SetPage(unsigned char Page)
{
    Page = Page & 0x0f;
    Page = Page | 0xb0;
    WriteCommand(Page);
}


void LM6029ACW::SetColumn(unsigned char Col)
{
    unsigned char temp;

    temp = Col;
    Col = Col & 0x0f;
    Col = Col | 0x00;
    WriteCommand(Col);
    temp = temp >> 4;
    Col = temp & 0x0f;
    Col = Col | 0x10;
    WriteCommand(Col);
}

 
void LM6029ACW::Init(void)
{
    unsigned char i,j;
    
    RDpin = 1;
    CS1pin = 0;
    RESpin = 0;
    wait(lcd_init_delay);
    RESpin = 1;

    WriteCommand(0xa0);    //ADC=0 Normal
    WriteCommand(0xc8);    //SHL=1 flipped in y-direction
    WriteCommand(0xa2);    //Bias=0; 1/9 Bias
    WriteCommand(0x2f);    //Power Control VF, VR, VC
    WriteCommand(0xae);    //Display OFF
    WriteCommand(0x81);    //Set voltage reference mode
    WriteCommand(0x29);    //Power Control VF
    WriteCommand(0x40);    //Set display start line
    WriteCommand(0xaf);    //Display ON

    for(i=0;i<128;i++)
        for(j=0;j<8;j++)
            DisplayRAM[i][j]=0x00;

    CS1pin = 1;
    
    ClrScr(0);
}


void LM6029ACW::WriteCharCol(unsigned char v, unsigned char x, unsigned char page, unsigned char color)
{
    if(color==0)
    {
        WriteData(~v);
        DisplayRAM[x][page] = ~v;
    }
    else
    {
        WriteData(v);
        DisplayRAM[x][page] = v;
    }
}



void LM6029ACW::DrawChar(unsigned char c, unsigned char x, unsigned char page, unsigned char color)
{
    CS1pin = 0;
    SetColumn(x);
    SetPage(page);

    switch(c)
    {
        case 32:    // 'SPACE'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x00, x+1, page, color);
            WriteCharCol(0x00, x+2, page, color);
            WriteCharCol(0x00, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 33:    // '!'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x00, x+1, page, color);
            WriteCharCol(0x9e, x+2, page, color);
            WriteCharCol(0x00, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 34:    // '"'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x0e, x+1, page, color);
            WriteCharCol(0x00, x+2, page, color);
            WriteCharCol(0x0e, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 35:    // '#'
        {
            WriteCharCol(0x28, x, page, color);
            WriteCharCol(0xfe, x+1, page, color);
            WriteCharCol(0x28, x+2, page, color);
            WriteCharCol(0xfe, x+3, page, color);
            WriteCharCol(0x28, x+4, page, color);
        }break;

        case 36:    // '$'
        {
            WriteCharCol(0x48, x, page, color);
            WriteCharCol(0x54, x+1, page, color);
            WriteCharCol(0xfe, x+2, page, color);
            WriteCharCol(0x54, x+3, page, color);
            WriteCharCol(0x24, x+4, page, color);
        }break;

        case 37:    // '%'
        {
            WriteCharCol(0x46, x, page, color);
            WriteCharCol(0x26, x+1, page, color);
            WriteCharCol(0x10, x+2, page, color);
            WriteCharCol(0xc8, x+3, page, color);
            WriteCharCol(0xc4, x+4, page, color);
        }break;

        case 38:    // '&'
        {
            WriteCharCol(0x6c, x, page, color);
            WriteCharCol(0x92, x+1, page, color);
            WriteCharCol(0xaa, x+2, page, color);
            WriteCharCol(0x44, x+3, page, color);
            WriteCharCol(0xa0, x+4, page, color);
        }break;

        case 39:    // '''
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x0a, x+1, page, color);
            WriteCharCol(0x06, x+2, page, color);
            WriteCharCol(0x00, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 40:    // '('
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x38, x+1, page, color);
            WriteCharCol(0x44, x+2, page, color);
            WriteCharCol(0x82, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 41:    // ')'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0x44, x+2, page, color);
            WriteCharCol(0x38, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 42:    // '*'
        {
            WriteCharCol(0x28, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0x7c, x+2, page, color);
            WriteCharCol(0x10, x+3, page, color);
            WriteCharCol(0x28, x+4, page, color);
        }break;

        case 43:    // '+'
        {
            WriteCharCol(0x10, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0x7c, x+2, page, color);
            WriteCharCol(0x10, x+3, page, color);
            WriteCharCol(0x10, x+4, page, color);
        }break;

        case 44:    // ','
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0xa0, x+1, page, color);
            WriteCharCol(0x60, x+2, page, color);
            WriteCharCol(0x00, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 45:    // '-'
        {
            WriteCharCol(0x10, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0x10, x+2, page, color);
            WriteCharCol(0x10, x+3, page, color);
            WriteCharCol(0x10, x+4, page, color);
        }break;

        case 46:    // '.'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0xc0, x+1, page, color);
            WriteCharCol(0xc0, x+2, page, color);
            WriteCharCol(0x00, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 47:    // '/'
        {
            WriteCharCol(0x40, x, page, color);
            WriteCharCol(0x20, x+1, page, color);
            WriteCharCol(0x10, x+2, page, color);
            WriteCharCol(0x08, x+3, page, color);
            WriteCharCol(0x04, x+4, page, color);
        }break;

        case 48:    // '0'
        {
            WriteCharCol(0x7c, x, page, color);
            WriteCharCol(0xa2, x+1, page, color);
            WriteCharCol(0x92, x+2, page, color);
            WriteCharCol(0x8a, x+3, page, color);
            WriteCharCol(0x7c, x+4, page, color);
        }break;

        case 49:    // '1'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x84, x+1, page, color);
            WriteCharCol(0xfe, x+2, page, color);
            WriteCharCol(0x80, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 50:    // '2'
        {
            WriteCharCol(0x84, x, page, color);
            WriteCharCol(0xc2, x+1, page, color);
            WriteCharCol(0xa2, x+2, page, color);
            WriteCharCol(0x92, x+3, page, color);
            WriteCharCol(0x8c, x+4, page, color);
        }break;

        case 51:    // '3'
        {
            WriteCharCol(0x42, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0x8a, x+2, page, color);
            WriteCharCol(0x96, x+3, page, color);
            WriteCharCol(0x62, x+4, page, color);
        }break;

        case 52:    // '4'
        {
            WriteCharCol(0x30, x, page, color);
            WriteCharCol(0x28, x+1, page, color);
            WriteCharCol(0x24, x+2, page, color);
            WriteCharCol(0xfe, x+3, page, color);
            WriteCharCol(0x20, x+4, page, color);
        }break;

        case 53:    // '5'
        {
            WriteCharCol(0x4e, x, page, color);
            WriteCharCol(0x8a, x+1, page, color);
            WriteCharCol(0x8a, x+2, page, color);
            WriteCharCol(0x8a, x+3, page, color);
            WriteCharCol(0x72, x+4, page, color);
        }break;

        case 54:    // '6'
        {
            WriteCharCol(0x78, x, page, color);
            WriteCharCol(0x94, x+1, page, color);
            WriteCharCol(0x92, x+2, page, color);
            WriteCharCol(0x92, x+3, page, color);
            WriteCharCol(0x60, x+4, page, color);
        }break;

        case 55:    // '7'
        {
            WriteCharCol(0x02, x, page, color);
            WriteCharCol(0xe2, x+1, page, color);
            WriteCharCol(0x12, x+2, page, color);
            WriteCharCol(0x0a, x+3, page, color);
            WriteCharCol(0x06, x+4, page, color);
        }break;

        case 56:    // '8'
        {
            WriteCharCol(0x6c, x, page, color);
            WriteCharCol(0x92, x+1, page, color);
            WriteCharCol(0x92, x+2, page, color);
            WriteCharCol(0x92, x+3, page, color);
            WriteCharCol(0x6c, x+4, page, color);
        }break;

        case 57:    // '9'
        {
            WriteCharCol(0x0c, x, page, color);
            WriteCharCol(0x92, x+1, page, color);
            WriteCharCol(0x92, x+2, page, color);
            WriteCharCol(0x52, x+3, page, color);
            WriteCharCol(0x3c, x+4, page, color);
        }break;

        case 58:    // ':'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x6c, x+1, page, color);
            WriteCharCol(0x6c, x+2, page, color);
            WriteCharCol(0x00, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 59:    // ';'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0xac, x+1, page, color);
            WriteCharCol(0x6c, x+2, page, color);
            WriteCharCol(0x00, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 60:    // '<'
        {
            WriteCharCol(0x10, x, page, color);
            WriteCharCol(0x28, x+1, page, color);
            WriteCharCol(0x44, x+2, page, color);
            WriteCharCol(0x82, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 61:    // '='
        {
            WriteCharCol(0x28, x, page, color);
            WriteCharCol(0x28, x+1, page, color);
            WriteCharCol(0x28, x+2, page, color);
            WriteCharCol(0x28, x+3, page, color);
            WriteCharCol(0x28, x+4, page, color);
        }break;

        case 62:    // '>'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0x44, x+2, page, color);
            WriteCharCol(0x28, x+3, page, color);
            WriteCharCol(0x10, x+4, page, color);
        }break;

        case 63:    // '?'
        {
            WriteCharCol(0x04, x, page, color);
            WriteCharCol(0x02, x+1, page, color);
            WriteCharCol(0xa2, x+2, page, color);
            WriteCharCol(0x12, x+3, page, color);
            WriteCharCol(0x0c, x+4, page, color);
        }break;

        case 64:    // '@'
        {
            WriteCharCol(0x64, x, page, color);
            WriteCharCol(0x92, x+1, page, color);
            WriteCharCol(0xf2, x+2, page, color);
            WriteCharCol(0x82, x+3, page, color);
            WriteCharCol(0x7c, x+4, page, color);
        }break;

        case 65:    // 'A'
        {
            WriteCharCol(0xfc, x, page, color);
            WriteCharCol(0x22, x+1, page, color);
            WriteCharCol(0x22, x+2, page, color);
            WriteCharCol(0x22, x+3, page, color);
            WriteCharCol(0xfc, x+4, page, color);
        }break;

        case 66:    // 'B'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x92, x+1, page, color);
            WriteCharCol(0x92, x+2, page, color);
            WriteCharCol(0x92, x+3, page, color);
            WriteCharCol(0x6c, x+4, page, color);
        }break;

        case 67:    // 'C'
        {
            WriteCharCol(0x7c, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0x82, x+2, page, color);
            WriteCharCol(0x82, x+3, page, color);
            WriteCharCol(0x44, x+4, page, color);
        }break;

        case 68:    // 'D'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0x82, x+2, page, color);
            WriteCharCol(0x44, x+3, page, color);
            WriteCharCol(0x38, x+4, page, color);
        }break;

        case 69:    // 'E'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x92, x+1, page, color);
            WriteCharCol(0x92, x+2, page, color);
            WriteCharCol(0x92, x+3, page, color);
            WriteCharCol(0x82, x+4, page, color);
        }break;

        case 70:    // 'F'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x12, x+1, page, color);
            WriteCharCol(0x12, x+2, page, color);
            WriteCharCol(0x12, x+3, page, color);
            WriteCharCol(0x02, x+4, page, color);
        }break;

        case 71:    // 'G'
        {
            WriteCharCol(0x7c, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0x92, x+2, page, color);
            WriteCharCol(0x92, x+3, page, color);
            WriteCharCol(0xf4, x+4, page, color);
        }break;

        case 72:    // 'H'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0x10, x+2, page, color);
            WriteCharCol(0x10, x+3, page, color);
            WriteCharCol(0xfe, x+4, page, color);
        }break;

        case 73:    // 'I'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0xfe, x+2, page, color);
            WriteCharCol(0x82, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 74:    // 'J'
        {
            WriteCharCol(0x40, x, page, color);
            WriteCharCol(0x80, x+1, page, color);
            WriteCharCol(0x82, x+2, page, color);
            WriteCharCol(0x7e, x+3, page, color);
            WriteCharCol(0x02, x+4, page, color);
        }break;

        case 75:    // 'K'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0x28, x+2, page, color);
            WriteCharCol(0x44, x+3, page, color);
            WriteCharCol(0x82, x+4, page, color);
        }break;

        case 76:    // 'L'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x80, x+1, page, color);
            WriteCharCol(0x80, x+2, page, color);
            WriteCharCol(0x80, x+3, page, color);
            WriteCharCol(0x80, x+4, page, color);
        }break;

        case 77:    // 'M'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x04, x+1, page, color);
            WriteCharCol(0x18, x+2, page, color);
            WriteCharCol(0x04, x+3, page, color);
            WriteCharCol(0xfe, x+4, page, color);
        }break;

        case 78:    // 'N'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x08, x+1, page, color);
            WriteCharCol(0x10, x+2, page, color);
            WriteCharCol(0x20, x+3, page, color);
            WriteCharCol(0xfe, x+4, page, color);
        }break;

        case 79:    // 'O'
        {
            WriteCharCol(0x7c, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0x82, x+2, page, color);
            WriteCharCol(0x82, x+3, page, color);
            WriteCharCol(0x7c, x+4, page, color);
        }break;

        case 80:    // 'P'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x12, x+1, page, color);
            WriteCharCol(0x12, x+2, page, color);
            WriteCharCol(0x12, x+3, page, color);
            WriteCharCol(0x0c, x+4, page, color);
        }break;

        case 81:    // 'Q'
        {
            WriteCharCol(0x7c, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0xa2, x+2, page, color);
            WriteCharCol(0x42, x+3, page, color);
            WriteCharCol(0xbc, x+4, page, color);
        }break;

        case 82:    // 'R'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x12, x+1, page, color);
            WriteCharCol(0x32, x+2, page, color);
            WriteCharCol(0x52, x+3, page, color);
            WriteCharCol(0x8c, x+4, page, color);
        }break;

        case 83:    // 'S'
        {
            WriteCharCol(0x8c, x, page, color);
            WriteCharCol(0x92, x+1, page, color);
            WriteCharCol(0x92, x+2, page, color);
            WriteCharCol(0x92, x+3, page, color);
            WriteCharCol(0x62, x+4, page, color);
        }break;

        case 84:    // 'T'
        {
            WriteCharCol(0x02, x, page, color);
            WriteCharCol(0x02, x+1, page, color);
            WriteCharCol(0xfe, x+2, page, color);
            WriteCharCol(0x02, x+3, page, color);
            WriteCharCol(0x02, x+4, page, color);
        }break;

        case 85:    // 'U'
        {
            WriteCharCol(0x7e, x, page, color);
            WriteCharCol(0x80, x+1, page, color);
            WriteCharCol(0x80, x+2, page, color);
            WriteCharCol(0x80, x+3, page, color);
            WriteCharCol(0x7e, x+4, page, color);
        }break;

        case 86:    // 'V'
        {
            WriteCharCol(0x3e, x, page, color);
            WriteCharCol(0x40, x+1, page, color);
            WriteCharCol(0x80, x+2, page, color);
            WriteCharCol(0x40, x+3, page, color);
            WriteCharCol(0x3e, x+4, page, color);
        }break;

        case 87:    // 'W'
        {
            WriteCharCol(0x7e, x, page, color);
            WriteCharCol(0x80, x+1, page, color);
            WriteCharCol(0x70, x+2, page, color);
            WriteCharCol(0x80, x+3, page, color);
            WriteCharCol(0x7e, x+4, page, color);
        }break;

        case 88:    // 'X'
        {
            WriteCharCol(0xc6, x, page, color);
            WriteCharCol(0x28, x+1, page, color);
            WriteCharCol(0x10, x+2, page, color);
            WriteCharCol(0x28, x+3, page, color);
            WriteCharCol(0xc6, x+4, page, color);
        }break;

        case 89:    // 'Y'
        {
            WriteCharCol(0x0e, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0xe0, x+2, page, color);
            WriteCharCol(0x10, x+3, page, color);
            WriteCharCol(0x0e, x+4, page, color);
        }break;

        case 90:    // 'Z'
        {
            WriteCharCol(0xc2, x, page, color);
            WriteCharCol(0xa2, x+1, page, color);
            WriteCharCol(0x92, x+2, page, color);
            WriteCharCol(0x8a, x+3, page, color);
            WriteCharCol(0x86, x+4, page, color);
        }break;

        case 91:    // '['
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0xfe, x+1, page, color);
            WriteCharCol(0x82, x+2, page, color);
            WriteCharCol(0x82, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 92:    // '\'
        {
            WriteCharCol(0x04, x, page, color);
            WriteCharCol(0x08, x+1, page, color);
            WriteCharCol(0x10, x+2, page, color);
            WriteCharCol(0x20, x+3, page, color);
            WriteCharCol(0x40, x+4, page, color);
        }break;

        case 93:    // ']'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0x82, x+2, page, color);
            WriteCharCol(0xfe, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 94:    // '^'
        {
            WriteCharCol(0x08, x, page, color);
            WriteCharCol(0x04, x+1, page, color);
            WriteCharCol(0x02, x+2, page, color);
            WriteCharCol(0x04, x+3, page, color);
            WriteCharCol(0x08, x+4, page, color);
        }break;

        case 95:    // '_'
        {
            WriteCharCol(0x80, x, page, color);
            WriteCharCol(0x80, x+1, page, color);
            WriteCharCol(0x80, x+2, page, color);
            WriteCharCol(0x80, x+3, page, color);
            WriteCharCol(0x80, x+4, page, color);
        }break;

        case 96:    // '`'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x02, x+1, page, color);
            WriteCharCol(0x04, x+2, page, color);
            WriteCharCol(0x08, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 97:    // 'a'
        {
            WriteCharCol(0x40, x, page, color);
            WriteCharCol(0xa8, x+1, page, color);
            WriteCharCol(0xa8, x+2, page, color);
            WriteCharCol(0xa8, x+3, page, color);
            WriteCharCol(0xf0, x+4, page, color);
        }break;

        case 98:    // 'b'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x90, x+1, page, color);
            WriteCharCol(0x88, x+2, page, color);
            WriteCharCol(0x88, x+3, page, color);
            WriteCharCol(0x70, x+4, page, color);
        }break;

        case 99:    // 'c'
        {
            WriteCharCol(0x70, x, page, color);
            WriteCharCol(0x88, x+1, page, color);
            WriteCharCol(0x88, x+2, page, color);
            WriteCharCol(0x88, x+3, page, color);
            WriteCharCol(0x40, x+4, page, color);
        }break;

        case 100:   // 'd'
        {
            WriteCharCol(0x70, x, page, color);
            WriteCharCol(0x88, x+1, page, color);
            WriteCharCol(0x88, x+2, page, color);
            WriteCharCol(0x90, x+3, page, color);
            WriteCharCol(0xfe, x+4, page, color);
        }break;

        case 101:   // 'e'
        {
            WriteCharCol(0x70, x, page, color);
            WriteCharCol(0xa8, x+1, page, color);
            WriteCharCol(0xa8, x+2, page, color);
            WriteCharCol(0xa8, x+3, page, color);
            WriteCharCol(0x30, x+4, page, color);
        }break;

        case 102:   // 'f'
        {
            WriteCharCol(0x10, x, page, color);
            WriteCharCol(0xfc, x+1, page, color);
            WriteCharCol(0x12, x+2, page, color);
            WriteCharCol(0x02, x+3, page, color);
            WriteCharCol(0x04, x+4, page, color);
        }break;

        case 103:   // 'g'
        {
            WriteCharCol(0x18, x, page, color);
            WriteCharCol(0xa4, x+1, page, color);
            WriteCharCol(0xa4, x+2, page, color);
            WriteCharCol(0xa4, x+3, page, color);
            WriteCharCol(0x7c, x+4, page, color);
        }break;

        case 104:   // 'h'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0x08, x+2, page, color);
            WriteCharCol(0x08, x+3, page, color);
            WriteCharCol(0xf0, x+4, page, color);
        }break;

        case 105:   // 'i'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x88, x+1, page, color);
            WriteCharCol(0xfa, x+2, page, color);
            WriteCharCol(0x80, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 106:   // 'j'
        {
            WriteCharCol(0x40, x, page, color);
            WriteCharCol(0x80, x+1, page, color);
            WriteCharCol(0x88, x+2, page, color);
            WriteCharCol(0x7a, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 107:   // 'k'
        {
            WriteCharCol(0xfe, x, page, color);
            WriteCharCol(0x20, x+1, page, color);
            WriteCharCol(0x50, x+2, page, color);
            WriteCharCol(0x88, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 108:   // 'l'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0xfe, x+2, page, color);
            WriteCharCol(0x80, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 109:   // 'm'
        {
            WriteCharCol(0xf8, x, page, color);
            WriteCharCol(0x08, x+1, page, color);
            WriteCharCol(0x30, x+2, page, color);
            WriteCharCol(0x08, x+3, page, color);
            WriteCharCol(0xf0, x+4, page, color);
        }break;

        case 110:   // 'n'
        {
            WriteCharCol(0xf8, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0x08, x+2, page, color);
            WriteCharCol(0x08, x+3, page, color);
            WriteCharCol(0xf0, x+4, page, color);
        }break;

        case 111:   // 'o'
        {
            WriteCharCol(0x70, x, page, color);
            WriteCharCol(0x88, x+1, page, color);
            WriteCharCol(0x88, x+2, page, color);
            WriteCharCol(0x88, x+3, page, color);
            WriteCharCol(0x70, x+4, page, color);
        }break;

        case 112:   // 'p'
        {
            WriteCharCol(0xf8, x, page, color);
            WriteCharCol(0x28, x+1, page, color);
            WriteCharCol(0x28, x+2, page, color);
            WriteCharCol(0x28, x+3, page, color);
            WriteCharCol(0x10, x+4, page, color);
        }break;

        case 113:   // 'q'
        {
            WriteCharCol(0x10, x, page, color);
            WriteCharCol(0x28, x+1, page, color);
            WriteCharCol(0x28, x+2, page, color);
            WriteCharCol(0x30, x+3, page, color);
            WriteCharCol(0xf8, x+4, page, color);
        }break;

        case 114:   // 'r'
        {
            WriteCharCol(0xf8, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0x08, x+2, page, color);
            WriteCharCol(0x08, x+3, page, color);
            WriteCharCol(0x10, x+4, page, color);
        }break;

        case 115:   // 's'
        {
            WriteCharCol(0x90, x, page, color);
            WriteCharCol(0xa8, x+1, page, color);
            WriteCharCol(0xa8, x+2, page, color);
            WriteCharCol(0xa8, x+3, page, color);
            WriteCharCol(0x40, x+4, page, color);
        }break;

        case 116:   // 't'
        {
            WriteCharCol(0x08, x, page, color);
            WriteCharCol(0x7e, x+1, page, color);
            WriteCharCol(0x88, x+2, page, color);
            WriteCharCol(0x80, x+3, page, color);
            WriteCharCol(0x40, x+4, page, color);
        }break;

        case 117:   // 'u'
        {
            WriteCharCol(0x78, x, page, color);
            WriteCharCol(0x80, x+1, page, color);
            WriteCharCol(0x80, x+2, page, color);
            WriteCharCol(0x40, x+3, page, color);
            WriteCharCol(0xf8, x+4, page, color);
        }break;

        case 118:   // 'v'
        {
            WriteCharCol(0x38, x, page, color);
            WriteCharCol(0x40, x+1, page, color);
            WriteCharCol(0x80, x+2, page, color);
            WriteCharCol(0x40, x+3, page, color);
            WriteCharCol(0x38, x+4, page, color);
        }break;

        case 119:   // 'w'
        {
            WriteCharCol(0x78, x, page, color);
            WriteCharCol(0x80, x+1, page, color);
            WriteCharCol(0x60, x+2, page, color);
            WriteCharCol(0x80, x+3, page, color);
            WriteCharCol(0x78, x+4, page, color);
        }break;

        case 120:   // 'x'
        {
            WriteCharCol(0x88, x, page, color);
            WriteCharCol(0x50, x+1, page, color);
            WriteCharCol(0x20, x+2, page, color);
            WriteCharCol(0x50, x+3, page, color);
            WriteCharCol(0x88, x+4, page, color);
        }break;

        case 121:   // 'y'
        {
            WriteCharCol(0x18, x, page, color);
            WriteCharCol(0xa0, x+1, page, color);
            WriteCharCol(0xa0, x+2, page, color);
            WriteCharCol(0xa0, x+3, page, color);
            WriteCharCol(0x78, x+4, page, color);
        }break;

        case 122:   // 'z'
        {
            WriteCharCol(0x88, x, page, color);
            WriteCharCol(0xc8, x+1, page, color);
            WriteCharCol(0xa8, x+2, page, color);
            WriteCharCol(0x98, x+3, page, color);
            WriteCharCol(0x88, x+4, page, color);
        }break;

        case 123:   // '{'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0x6c, x+2, page, color);
            WriteCharCol(0x82, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 124:   // '|'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x00, x+1, page, color);
            WriteCharCol(0xfe, x+2, page, color);
            WriteCharCol(0x00, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 125:   // '}'
        {
            WriteCharCol(0x00, x, page, color);
            WriteCharCol(0x82, x+1, page, color);
            WriteCharCol(0x6c, x+2, page, color);
            WriteCharCol(0x10, x+3, page, color);
            WriteCharCol(0x00, x+4, page, color);
        }break;

        case 126:   // '~'
        {
            WriteCharCol(0x20, x, page, color);
            WriteCharCol(0x10, x+1, page, color);
            WriteCharCol(0x10, x+2, page, color);
            WriteCharCol(0x20, x+3, page, color);
            WriteCharCol(0x10, x+4, page, color);
        }break;
        /*

        case :  // ''
        {
            WriteCharCol(0x, x, page, color);
            WriteCharCol(0x, x+1, page, color);
            WriteCharCol(0x, x+2, page, color);
            WriteCharCol(0x, x+3, page, color);
            WriteCharCol(0x, x+4, page, color);
        }break;
        */

        default:    // not supported, print box
        {
            WriteData(0xfe);
            WriteData(0xfe);
            WriteData(0xfe);
            WriteData(0xfe);
            WriteData(0xfe);
        }
    }
    WriteCharCol(0x00, x+5, page, color); //default last blank column of 6 x 8 character

    CS1pin = 1;
}