N3310LCD library demo

Dependencies:   N3310LCD mbed

Fork of N3310LCD by Petras Saduikis

Files at this revision

API Documentation at this revision

Comitter:
SomeRandomBloke
Date:
Sun Mar 10 18:29:43 2013 +0000
Parent:
0:36fb749b83c7
Commit message:
Initial commit

Changed in this revision

Joystick.cpp Show diff for this revision Revisions of this file
Joystick.h Show diff for this revision Revisions of this file
N3310Fonts.h Show diff for this revision Revisions of this file
N3310LCD.cpp Show diff for this revision Revisions of this file
N3310LCD.h Show diff for this revision Revisions of this file
N3310LCD.lib Show annotated file Show diff for this revision Revisions of this file
N3310LCDDefs.h Show diff for this revision Revisions of this file
N3310SPIConfig.h Show diff for this revision Revisions of this file
bitmap.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
mbed_bmp.h Show annotated file Show diff for this revision Revisions of this file
pacman.h Show annotated file Show diff for this revision Revisions of this file
--- a/Joystick.cpp	Mon Dec 07 17:24:52 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-/*
-* N3310LCD. A program to interface mbed with the nuelectronics
-* Nokia 3310 LCD shield from www.nuelectronics.com. Ported from
-* the nuelectronics Arduino code.
-*
-* Copyright (C) <2009> Petras Saduikis <petras@petras.co.uk>
-*
-* This file is part of N3310LCD.
-*
-* N3310LCD is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-* 
-* N3310LCD is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with N3310LCD.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <mbed.h>
-#include "Joystick.h"
-
-//keypad debounce parameter
-#define DEBOUNCE_MAX 15
-#define DEBOUNCE_ON  10
-#define DEBOUNCE_OFF 3
-
-// values correspond to use of a 3.3V supply for the LCD shield.
-const int Joystick::adcKeyVal[NUM_KEYS] = {50,     // LEFT
-                                           200,    // CENTER DEPRESSED
-                                           400,    // DOWN 
-                                           600,    // UP
-                                           800     // RIGHT
-                                           // 1024 CENTER NOT DEPRESSED
-                                           };
-                                           
-Joystick::Joystick(PinName jstick) : joystick(jstick)
-{
-    // reset button arrays
-    for (int i = 0; i < NUM_KEYS; i++)
-    {
-        buttonCount[i] = 0;
-        buttonStatus[i] = 0;
-        buttonFlag[i] = 0;
-    }
-}
-
-int Joystick::getKeyState(int i)
-{
-    int retval = 0;
-    
-    if (i < NUM_KEYS)
-    {
-        retval = buttonFlag[i];
-    }
-    
-    return retval;
-}
-
-void Joystick::resetKeyState(int i)
-{
-    if (i < NUM_KEYS)
-    {
-        buttonFlag[i] = 0;
-    }
-}
-
-void Joystick::updateADCKey()
-{
-    // NOTE: the mbed analog in is 0 - 3.3V, represented as 0.0 - 1.0. It is important 
-    // that the LCD shield is powered from a 3.3V supply in order for the 'right' joystick
-    // key to function correctly.
-    
-    int adcKeyIn = joystick * 1024;    // scale this up so we can use int
-    int keyIn = getKey(adcKeyIn);
-    
-    for (int i = 0; i < NUM_KEYS; i++)
-    {
-        if (keyIn == i)  //one key is pressed 
-        { 
-            if (buttonCount[i] < DEBOUNCE_MAX)
-            {
-                buttonCount[i]++;
-                if (buttonCount[i] > DEBOUNCE_ON)
-                {
-                    if (buttonStatus[i] == 0)
-                    {
-                        buttonFlag[i] = 1;
-                        buttonStatus[i] = 1; //button debounced to 'pressed' status
-                    }
-                }
-            }
-        }
-        else // no button pressed
-        {
-            if (buttonCount[i] > 0)
-            {  
-                buttonFlag[i] = 0;    
-                buttonCount[i]--;
-                if (buttonCount[i] < DEBOUNCE_OFF)
-                {
-                    buttonStatus[i] = 0;   //button debounced to 'released' status
-                }
-            }
-        }
-    }
-}
-  
-// Convert ADC value to key number
-int Joystick::getKey(int input)
-{
-    int k;
-    
-    for (k = 0; k < NUM_KEYS; k++)
-    {
-        if (input < adcKeyVal[k]) return k;
-    }
-    
-    if (k >= NUM_KEYS) k = -1;     // No valid key pressed
-    
-    return k;
-}
--- a/Joystick.h	Mon Dec 07 17:24:52 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/*
-* N3310LCD. A program to interface mbed with the nuelectronics
-* Nokia 3310 LCD shield from www.nuelectronics.com. Ported from
-* the nuelectronics Arduino code.
-*
-* Copyright (C) <2009> Petras Saduikis <petras@petras.co.uk>
-*
-* This file is part of N3310LCD.
-*
-* N3310LCD is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-* 
-* N3310LCD is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with N3310LCD.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef SNATCH59_JOYSTICK_H
-#define SNATCH59_JOYSTICK_H
-
-#define NUM_KEYS    5
-
-enum eJoystickKey {LEFT_KEY, CENTER_KEY, DOWN_KEY, UP_KEY, RIGHT_KEY};
-
-class Joystick
-{
-public:
-    Joystick(PinName jstick);
-    
-    int getKeyState(int i);
-    void resetKeyState(int i);
-    void updateADCKey();        // call this to initiate joystick read
-    
-private:
-    // data
-    int buttonCount[NUM_KEYS];    // debounce counters
-    int buttonStatus[NUM_KEYS];   // button status - pressed/released
-    int buttonFlag[NUM_KEYS];     // button on flags for user program
-    
-    static const int adcKeyVal[NUM_KEYS];
-    
-    // I/O
-    AnalogIn    joystick;
-    
-    // functions
-    int getKey(int input);
-};
-
-#endif
\ No newline at end of file
--- a/N3310Fonts.h	Mon Dec 07 17:24:52 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,264 +0,0 @@
-/*
-* N3310LCD. A program to interface mbed with the nuelectronics
-* Nokia 3310 LCD shield from www.nuelectronics.com. Ported from
-* the nuelectronics Arduino code.
-*
-* Copyright (C) <2009> Petras Saduikis <petras@petras.co.uk>
-*
-* This file is part of N3310LCD.
-*
-* N3310LCD is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-* 
-* N3310LCD is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with N3310LCD.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef SNATCH59_N3310FONTS_H
-#define SNATCH59_N3310FONTS_H
-
-// 6 x 8 font
-// 1 pixel space at left and bottom
-// index = ASCII - 32
-
-unsigned char font6_8[][6] =
-{
-    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
-    { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
-    { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
-    { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
-    { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
-    { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
-    { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
-    { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
-    { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
-    { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
-    { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
-    { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
-    { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
-    { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
-    { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
-    { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
-    { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
-    { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
-    { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
-    { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
-    { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
-    { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
-    { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
-    { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
-    { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
-    { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
-    { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
-    { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
-    { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
-    { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
-    { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
-    { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
-    { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
-    { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
-    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
-    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
-    { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
-    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
-    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
-    { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
-    { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
-    { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
-    { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
-    { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
-    { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
-    { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
-    { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
-    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
-    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
-    { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
-    { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
-    { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
-    { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
-    { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
-    { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
-    { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
-    { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
-    { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
-    { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
-    { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
-    { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
-    { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
-    { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
-    { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
-    { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
-    { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
-    { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
-    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
-    { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
-    { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
-    { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
-    { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g
-    { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
-    { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
-    { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j
-    { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
-    { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
-    { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
-    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
-    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
-    { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p
-    { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q
-    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
-    { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
-    { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
-    { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
-    { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
-    { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
-    { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
-    { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y
-    { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
-    { 0x00,0x00, 0x06, 0x09, 0x09, 0x06 }    // horiz lines
-};
-
-
-//******* VERY LARGE FONTS ********** 
-//used here for displaying numbers 0 - 9 and '+', '-', '.'
-
-unsigned char   big_number[13][3][16]  = 
-{
-    0,128,192,224,224,96,224,224,  //'0'
-    192,128,0,0,0,0,0,0
-    ,
-    112,255,255,1,0,0,0,0,
-    255,255,254,0,0,0,0,0
-    ,
-    0,15,31,60,56,48,56,56,
-    31,15,3,0,0,0,0,0
-    ,
-
-    0,0,0,0,128,224,224,0,            //'1'
-    0,0,0,0,0,0,0,0
-    ,
-    0,0,3,3,3,255,255,0,
-    0,0,0,0,0,0,0,0
-    ,
-    0,0,56,56,56,63,63,56,
-    56,56,0,0,0,0,0,0
-    ,
-
-    0,192,192,224,96,96,224,224,   //'2'
-    192,128,0,0,0,0,0,0
-    ,
-    0,1,0,0,128,192,224,249,
-    63,31,0,0,0,0,0,0
-    ,
-    0,60,62,63,63,59,57,56,
-    56,56,56,0,0,0,0,0
-    ,
-
-    0,192,224,224,96,96,224,224,   //'3'
-    192,192,0,0,0,0,0,0
-    ,
-    0,1,0,0,48,48,56,125,
-    239,207,0,0,0,0,0,0
-    ,
-    0,28,56,56,48,48,56,60,
-    31,15,1,0,0,0,0,0
-    ,
-
-    0,0,0,0,0,128,192,224,            //'4'
-    224,0,0,0,0,0,0,0
-    ,
-    224,240,248,222,207,199,193,255,
-    255,192,192,0,0,0,0,0
-    ,
-    0,0,0,0,0,0,0,63,
-    63,0,0,0,0,0,0,0
-    ,
-
-    0,224,224,224,224,224,224,224,    //'5'
-    224,224,224,0,0,0,0,0
-    ,
-    0,63,63,63,56,56,48,112,
-    240,224,0,0,0,0,0,0
-    ,
-    0,28,56,56,48,48,56,60,
-    31,15,1,0,0,0,0,0
-    ,
-
-    0,0,128,192,192,224,96,96,        //'6'
-    224,224,0,0,0,0,0,0
-    ,
-    224,254,255,55,57,24,24,56,
-    240,240,192,0,0,0,0,0
-    ,
-    0,15,31,28,56,48,48,56,
-    31,15,7,0,0,0,0,0
-    ,
-
-    0,224,224,224,224,224,224,224,         //'7'
-    224,224,224,0,0,0,0,0
-    ,
-    0,0,0,0,128,224,248,126,
-    31,7,1,0,0,0,0,0
-    ,
-    0,0,56,62,31,7,1,0,
-    0,0,0,0,0,0,0,0
-    ,
-
-    0,128,192,224,224,96,96,224,         //'8'
-    192,192,0,0,0,0,0,0
-    ,
-    0,207,255,127,56,48,112,112,
-    255,239,199,0,0,0,0,0
-    ,
-    3,15,31,60,56,48,48,56,
-    31,31,15,0,0,0,0,0
-    ,
-
-    0,128,192,224,224,96,224,224,         //'9'
-    192,128,0,0,0,0,0,0
-    ,
-    12,63,127,241,224,192,192,225,
-    255,255,254,0,0,0,0,0
-    ,
-    0,0,56,48,48,56,56,30,
-    15,7,0,0,0,0,0,0
-    ,
-
-
-    0,0,0,0,0,0,0,0,                         //'.'
-    0,0,0,0,0,0,0,0
-    ,
-    0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0
-    ,
-    60,60,60,0,0,0,0,0,
-    0,0,0,0,0,0,0,0
-    ,
-
-    0,0,0,0,0,0,0,0,                        //'+'
-    0,0,0,0,0,0,0,0
-    ,
-    0,0,64,64,64,64,64,254,
-    254,64,64,64,64,64,0,0
-    ,
-    0,0,0,0,0,0,0,15,
-    15,0,0,0,0,0,0,0
-    ,
-
-    0,0,0,0,0,0,0,0,                         //'-'
-    0,0,0,0,0,0,0,0
-    ,
-    0,64,64,64,64,64,64,0,
-    0,0,0,0,0,0,0,0
-    ,
-    0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0
-};
-
-#endif
--- a/N3310LCD.cpp	Mon Dec 07 17:24:52 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-/*
-* N3310LCD. A program to interface mbed with the nuelectronics
-* Nokia 3310 LCD shield from www.nuelectronics.com. Ported from
-* the nuelectronics Arduino code.
-*
-* Copyright (C) <2009> Petras Saduikis <petras@petras.co.uk>
-*
-* This file is part of N3310LCD.
-*
-* N3310LCD is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-* 
-* N3310LCD is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with N3310LCD.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "N3310LCD.h"
-#include "N3310Fonts.h"
-
-N3310LCD::N3310LCD (PinName mosi, PinName miso, PinName sck, 
-                    PinName ce, PinName dat_cmd, PinName lcd_rst, PinName bl_on) : 
-                    lcdPort(mosi, miso, sck),
-                    ceWire(ce), dcWire(dat_cmd), rstWire(lcd_rst), blWire(bl_on)
-{
-}
-
-void N3310LCD::init()
-{
-    // use default SPI format
-    lcdPort.format(8,0);
-    lcdPort.frequency(1000000);
-    
-    // lcd reset
-    wait_ms(1);
-    rstWire = 0;
-    wait_ms(1);
-    rstWire = 1;
-    
-    write(0x21, CMD);    
-    write(0xc8, CMD);    
-    write(0x06, CMD);    
-    write(0x13, CMD);    
-    write(0x20, CMD);    
-    cls();            
-    write(0x0c, CMD);
-}
-
-void N3310LCD::cls()
-{
-    write(0x0c, CMD);            
-    write(0x80, CMD);            
-
-    for (int i = 0; i < 504; i++)
-    {
-        write(0, DATA);
-    }
-}
-
-void N3310LCD::backlight(eBacklight state)
-{
-    // switch off/on back light
-    blWire = state;
-}
-
-void N3310LCD::write(BYTE data, eRequestType req_type)
-{
-    // bring CS low for write
-    ceWire = 0;
-    
-    if (CMD == req_type)
-        dcWire = 0;
-    else // DATA
-        dcWire = 1;
-        
-    lcdPort.write(data);
-    
-    // write finished
-    ceWire = 1;
-}
-
-void N3310LCD::locate(BYTE xPos, BYTE yPos)
-{
-    write(0x40 | yPos, CMD);      // column
-    write(0x80 | xPos, CMD);      // row    
-}
-
-void N3310LCD::drawBitmap(BYTE xPos, BYTE yPos, BYTE* bitmap, BYTE bmpXSize, BYTE bmpYSize)
-{
-    BYTE row;
-    
-    if (0 == bmpYSize % 8)
-        row = bmpYSize/8;  
-    else
-        row = bmpYSize/8 + 1;
-    
-    for (BYTE n = 0; n < row; n++)
-    {
-        locate(xPos, yPos);
-        for(BYTE i = 0; i < bmpXSize; i++)
-        {
-            write(bitmap[i + (n * bmpXSize)], DATA);
-        }
-        yPos++;                       
-    }
-}
-
-void N3310LCD::writeString(BYTE xPos, BYTE yPos, char* string, eDisplayMode mode)
-{
-    locate(xPos, yPos);
-    
-    while (*string) 
-    {
-        writeChar(*string++, mode);
-    }
-}
-                  
-void N3310LCD::writeStringBig(BYTE xPos, BYTE yPos, char* string, eDisplayMode mode)
-{
-    while (*string)
-    {     
-        writeCharBig(xPos, yPos, *string , mode);
-        
-        if('.' == *string++)
-            xPos += 5;
-        else
-            xPos += 12;
-    }
-}
-
-void N3310LCD::writeChar(BYTE ch, eDisplayMode mode)
-{
-    BYTE sendByte;
-    
-    unsigned char* pFont = (unsigned char*)font6_8;
-    ch -= 32;
-
-    for (BYTE line = 0; line < 6; line++)
-    {
-        sendByte = *(pFont + ch*6 + line);
-        write((mode == NORMAL)? sendByte: (sendByte ^ 0xff) , DATA);
-    }
-}
-
-void N3310LCD::writeCharBig(BYTE xPos, BYTE yPos, BYTE ch, eDisplayMode mode)
-{
-    BYTE sendByte;
-   
-    unsigned char* pFont = (unsigned char *) big_number;
-   
-    if('.' == ch)
-        ch = 10;
-    else if ('+' == ch)
-        ch = 11;
-    else if ('-' == ch)
-        ch = 12;
-    else
-        ch = ch & 0x0f;
-    
-    for(BYTE i = 0; i < 3; i++)
-    {    
-        locate(xPos, yPos + i);
- 
-        for(BYTE j = 0; j < 16; j++)
-        {
-            sendByte =  *(pFont + ch*48 + i*16 + j);
-            write((mode == NORMAL)? sendByte : (sendByte^0xff), DATA);
-        }
-    }
-}
--- a/N3310LCD.h	Mon Dec 07 17:24:52 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
-* N3310LCD. A program to interface mbed with the nuelectronics
-* Nokia 3310 LCD shield from www.nuelectronics.com. Ported from
-* the nuelectronics Arduino code.
-*
-* Copyright (C) <2009> Petras Saduikis <petras@petras.co.uk>
-*
-* This file is part of N3310LCD.
-*
-* N3310LCD is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-* 
-* N3310LCD is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with N3310LCD.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef SNATCH59_N3310LCD_H
-#define SNATCH59_N3310LCD_H
-
-#include <mbed.h>
-#include "N3310LCDDefs.h"
-
-class N3310LCD
-{
-public:
-    N3310LCD(PinName mosi, PinName miso, PinName sck, 
-             PinName ce, PinName dat_cmd, PinName lcd_rst, PinName bl_on);
-    
-    void init();
-    void cls();
-    void backlight(eBacklight state);
-    void write(BYTE data, eRequestType req_type);   
-    void locate(BYTE xPos, BYTE yPos);
-    
-    void drawBitmap(BYTE xPos, BYTE yPos, BYTE* bitmap, BYTE bmpXSize, BYTE bmpYSize);
-    void writeString(BYTE xPos, BYTE yPos, char* string, eDisplayMode mode);                  
-    void writeStringBig(BYTE xPos, BYTE yPos, char* string, eDisplayMode mode);
-    void writeChar(BYTE ch, eDisplayMode mode);
-    void writeCharBig(BYTE xPos, BYTE yPos, BYTE ch, eDisplayMode mode);
-    
-private:
-    // I/O
-    SPI lcdPort;            // does SPI MOSI, MISO and SCK
-    DigitalOut ceWire;      // does SPI CE
-    DigitalOut dcWire;      // does 3310 DAT_CMD
-    DigitalOut rstWire;     // does 3310 LCD_RST
-    DigitalOut blWire;      // does 3310 BL_ON (backlight)    
-};
-
-#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/N3310LCD.lib	Sun Mar 10 18:29:43 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/SomeRandomBloke/code/N3310LCD/#51961974fe55
--- a/N3310LCDDefs.h	Mon Dec 07 17:24:52 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
-* N3310LCD. A program to interface mbed with the nuelectronics
-* Nokia 3310 LCD shield from www.nuelectronics.com. Ported from
-* the nuelectronics Arduino code.
-*
-* Copyright (C) <2009> Petras Saduikis <petras@petras.co.uk>
-*
-* This file is part of N3310LCD.
-*
-* N3310LCD is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-* 
-* N3310LCD is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with N3310LCD.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef SNATCH59_N3310LCDDEFS_H
-#define SNATCH59_N3310LCDDEFS_H
-
-enum eDisplayMode {NORMAL, HIGHLIGHT};
-enum eRequestType {CMD, DATA};
-enum eBacklight {OFF, ON};
-
-typedef unsigned char BYTE;
-
-#endif
\ No newline at end of file
--- a/N3310SPIConfig.h	Mon Dec 07 17:24:52 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
-* N3310LCD. A program to interface mbed with the nuelectronics
-* Nokia 3310 LCD shield from www.nuelectronics.com. Ported from
-* the nuelectronics Arduino code.
-*
-* Copyright (C) <2009> Petras Saduikis <petras@petras.co.uk>
-*
-* This file is part of N3310LCD.
-*
-* N3310LCD is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-* 
-* N3310LCD is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with N3310LCD.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef SNATCH59_N3310SPICONFIG_H
-#define SNATCH59_N3310SPICONFIG_H
-
-#include <mbed.h>
-
-class N3310SPIPort
-{
-public:
-    static const PinName MOSI;       // Master Out Slave In
-    static const PinName MISO;       // Master In Slave Out
-    static const PinName SCK;        // SPI clock
-    static const PinName CE;         // Chip Enable (aka Chip Select)
-    static const PinName LCD_RST;    // LCD reset
-    static const PinName DAT_CMD;    // indicates if the SPI write is command or date
-    static const PinName BL_ON;      // Back Light On
-    
-    static const PinName AD0;   // analog in for joystick
-};
-
-// NOTE pins have been chosen not to conflict with any I2C usage. 
-// MOSI = p5, MISO = p6, SCK = p7 is also an option
-const PinName N3310SPIPort::MOSI = p11;
-const PinName N3310SPIPort::MISO = p12;   // not used for 3310
-const PinName N3310SPIPort::SCK = p13;
-
-const PinName N3310SPIPort::CE = p21;
-const PinName N3310SPIPort::LCD_RST = p22;
-const PinName N3310SPIPort::DAT_CMD = p23;
-const PinName N3310SPIPort::BL_ON = p24;
-
-const PinName N3310SPIPort::AD0 = p20;    // joystick analog
-
-/************************************************
-*
-* Nokia 3310 LCD Shield Pins
-* NOTE: the LCD shield must be powered from a 3.3V supply in order
-* for the joystick to be read correctly by the mbed analog in
-* (which operates on a range of 0 - 3.3V).
-*
-* Connector J3:
-* p13: SCK
-* p12: MISO (not used)
-* p11: MOSI
-* p10: CE
-* p9: LCD_RST
-* p8: DAT_CMD
-* 
-* Connector J1:
-* p7: BL_ON
-*
-* Connector J2:
-* p1 : AD0
-*
-**************************************************/
-
-#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmap.h	Sun Mar 10 18:29:43 2013 +0000
@@ -0,0 +1,40 @@
+//------------------------------------------------------------------------------
+// File generated by LCD Assistant
+// http://en.radzio.dxp.pl/bitmap_converter/
+//------------------------------------------------------------------------------
+
+unsigned char fy1 [] = {
+    0x00, 0x00, 0x00, 0x00, 0x0C, 0x08, 0xE8, 0xF8, 0xF8, 0xF8, 0x18, 0x08, 0xC8, 0xE8, 0xE8, 0xE8,
+    0xFC, 0xFC, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
+    0x04, 0x3C, 0xFC, 0xFC, 0xFE, 0xFE, 0x06, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF4, 0x84,
+    0x04, 0x1C, 0x1D, 0x01, 0x01, 0x01, 0x00, 0x00, 0xE1, 0xF9, 0xFD, 0xFF, 0xFF, 0x0F, 0x03, 0x81,
+    0xE0, 0xFF, 0xFF, 0xFF, 0x81, 0x81, 0x31, 0xFE, 0xFF, 0xFF, 0xFF, 0x81, 0x00, 0x06, 0x0E, 0x0F,
+    0x8F, 0x8F, 0x0F, 0x06, 0x00, 0xC0, 0xDF, 0xFF, 0xFF, 0xF8, 0x9C, 0x16, 0x13, 0x35, 0x3E, 0xEF,
+    0xEF, 0xCF, 0x87, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x03,
+    0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03,
+    0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03,
+    0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+    0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x10, 0xB0, 0xE0, 0xE0, 0x60, 0x20, 0x20, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0xF0, 0xF0,
+    0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x10, 0x10, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+    0x40, 0xC0, 0xE0, 0xE0, 0xE0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x3F, 0x38, 0x30, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+    0x38, 0x38, 0x3E, 0x1F, 0x1F, 0x06, 0x20, 0xF8, 0xFC, 0xFC, 0xFA, 0x12, 0x12, 0x92, 0x92, 0x96,
+    0xBE, 0x3C, 0x3C, 0x00, 0x80, 0xF0, 0xFC, 0x3E, 0x1E, 0x1E, 0x1E, 0x1C, 0x1C, 0x9C, 0xFC, 0xFC,
+    0xFC, 0xFE, 0x06, 0x04, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xC0, 0x70, 0x38, 0x3C, 0xFE, 0xFE,
+    0xFE, 0x30, 0x00, 0x00, 0x00, 0x0F, 0x7F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x07,
+    0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x0C,
+    0x0B, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07,
+    0x07, 0x03, 0x0F, 0x07, 0x07, 0x07, 0x06, 0x06, 0x00, 0x0C, 0x0C, 0x0F, 0x0F, 0x0F, 0x08, 0x00,
+    0x00, 0x08, 0x0F, 0x0F, 0x1F, 0x10, 0x10, 0x00, 0x04, 0x0E, 0x0E, 0x0E, 0x0E, 0x06, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
--- a/main.cpp	Mon Dec 07 17:24:52 2009 +0000
+++ b/main.cpp	Sun Mar 10 18:29:43 2013 +0000
@@ -5,13 +5,15 @@
 *
 * Copyright (C) <2009> Petras Saduikis <petras@petras.co.uk>
 *
+* Converted to a mbed library by Andrew D. Lindsay
+*
 * This file is part of N3310LCD.
 *
 * N3310LCD is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
-* 
+*
 * N3310LCD is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
@@ -25,69 +27,84 @@
 #include "N3310LCD.h"
 #include "Joystick.h"
 #include "mbed_bmp.h"
+#include "pacman.h"
+#include "bitmap.h"
 
 // demo for nuelectronics Nokia 3310 LCD shield (www.nuelectronics.com)
-// 
+//
 
 // menu starting points
 #define MENU_X    10        // 0-83
-#define MENU_Y    1        // 0-5
+#define MENU_Y    0        // 0-5
+
+#define DEMO_ITEMS 5
 
-#define DEMO_ITEMS 4
+void temperature(N3310LCD* lcd, Joystick* jstick);
+void charmap(N3310LCD* lcd, Joystick* jstick);
+void bitmap(N3310LCD* lcd, Joystick* jstick);
+void about(N3310LCD* lcd, Joystick* jstick);
+void graphics(N3310LCD* lcd, Joystick* jstick);
 
 // menu definition
-char menu_items[DEMO_ITEMS][12] =
-{
+char menu_items[DEMO_ITEMS][12] = {
     "TEMPERATURE",
     "CHAR MAP",
     "BITMAP",
-    "ABOUT"    
+    "GRAPHICS",
+    "ABOUT"
 };
 
-void temperature(N3310LCD* lcd)
+void (*menu_funcs[DEMO_ITEMS])(N3310LCD*,Joystick*) = {
+    temperature,
+    charmap,
+    bitmap,
+    graphics,
+    about
+};
+
+void temperature(N3310LCD* lcd, Joystick* jstick)
 {
     lcd->writeStringBig(5, 1, "+21.12", NORMAL);
     lcd->writeString(73, 2, "C", NORMAL);
 }
 
-void charmap(N3310LCD* lcd)
+void charmap(N3310LCD* lcd, Joystick* jstick)
 {
-    for(int i = 0; i < 5; i++)
-    {
-        for(int j = 0; j < 14; j++)
-        {
-          lcd->locate(j*6, i);
-          lcd->writeChar(i*14 + j + 32, NORMAL);
+    for(int i = 0; i < 5; i++) {
+        for(int j = 0; j < 14; j++) {
+            lcd->locate(j*6, i);
+            lcd->writeChar(i*14 + j + 32, NORMAL);
         }
     }
 }
 
-void bitmap(N3310LCD* lcd)
+void bitmap(N3310LCD* lcd, Joystick* jstick)
 {
+    for( int i=0; i<10; i++ ) {
+        lcd->drawBitmap(20, 1, mbed_bmp, 48, 24);
+        wait(1);
+        lcd->clearBitmap(20, 1, 48, 24);
+        lcd->drawBitmap(0, 0, fy1, 84, 48);
+        wait(1);
+        lcd->clearBitmap(0, 0, 84, 48);
+    }
     lcd->drawBitmap(20, 1, mbed_bmp, 48, 24);
 }
 
-void about(N3310LCD* lcd)
+void about(N3310LCD* lcd, Joystick* jstick)
 {
     lcd->writeString(0, 1, "Nokia 3310 LCD", NORMAL);
     lcd->writeString(15, 2, "driven by", NORMAL);
-    lcd->writeString(30, 3, "mbed", NORMAL);
+    lcd->writeString(10, 3, "KL25Z mbed", NORMAL);
 }
 
-void (*menu_funcs[DEMO_ITEMS])(N3310LCD*) = 
-{
-    temperature,
-    charmap,
-    bitmap,
-    about
-};
+
 
 void initMenu(N3310LCD* lcd)
 {
     lcd->writeString(MENU_X, MENU_Y, menu_items[0], HIGHLIGHT );
-    
-    for (int i = 1; i < DEMO_ITEMS; i++)
-    {
+
+    for (int i = 1; i < DEMO_ITEMS; i++) {
         lcd->writeString(MENU_X, MENU_Y + i, menu_items[i], NORMAL);
     }
 }
@@ -97,12 +114,9 @@
     lcd->writeString(38, 5, "OK", HIGHLIGHT );
 
     int key = 0xFF;
-    while (key != CENTER_KEY)
-    {
-        for (int i = 0; i < NUM_KEYS; i++)
-        {
-            if (jstick->getKeyState(i) !=0)
-            {
+    while (key != CENTER_KEY) {
+        for (int i = 0; i < NUM_KEYS; i++) {
+            if (jstick->getKeyState(i) !=0) {
                 jstick->resetKeyState(i);  // reset
                 if (CENTER_KEY == i) key = CENTER_KEY;
             }
@@ -110,6 +124,21 @@
     }
 }
 
+// Check if joystick is moved or pressed
+uint8_t checkKeypressed( Joystick* jstick)
+{
+    uint8_t key = 0xFF;
+
+    for(int i=0; i<NUM_KEYS; i++) {
+        if (jstick->getKeyState(i) !=0) {
+            jstick->resetKeyState(i);  // reset
+            if (CENTER_KEY == i) key = CENTER_KEY;
+        }
+    }
+    return key;
+}
+
+/*
 void autoDemo(N3310LCD* lcd)
 {
     while (true)
@@ -119,18 +148,119 @@
             lcd->cls();
             lcd->backlight(ON);
             wait(1);
-                
+
             (*menu_funcs[i])(lcd);
-        
+
             wait(3);
-        
+
             lcd->backlight(OFF);
             wait(3);
         }
     }
 }
+*/
 
-int main() 
+// Display the simple graphics demo
+void graphics(N3310LCD* lcd, Joystick* jstick)
+{
+    lcd->writeString( 0, 1, "Text Demo", NORMAL);
+    lcd->writeString(24, 5, "START", HIGHLIGHT );
+    checkKeypressed(jstick);
+    lcd->cls();
+
+    lcd->writeStringBig( 0, 0, "123456", NORMAL );
+    lcd->writeStringBig( 0, 3, "7890+-.", NORMAL );
+    wait(2);
+
+    lcd->writeStringBig( 0, 0, "123456", HIGHLIGHT );
+    lcd->writeStringBig( 0, 3, "7890+-.", HIGHLIGHT );
+    wait(2);
+
+    lcd->cls();
+
+    lcd->writeString( 0, 1, "Graphic Demo", NORMAL);
+    lcd->writeString(24, 5, "START", HIGHLIGHT );
+    checkKeypressed(jstick);
+    lcd->cls();
+    // Draw some circles pulsing in and out
+    for(int a=0; a< 4; a++) {
+        for( int r = 1; r < 49; r+=1 ) {
+            lcd->drawCircle(42, 24, r, PIXEL_ON );
+            wait(0.010);
+        }
+        wait(0.010);
+        for( int r = 48; r >0; r-=1 ) {
+            wait(0.010);
+            lcd->drawCircle(42, 24, r, PIXEL_OFF );
+        }
+    }
+
+    // More circles
+    for( int xc = 10; xc < 85; xc+=15 ) {
+        lcd->drawCircle(xc, 24, 20, PIXEL_ON );
+    }
+    wait( 2 );
+
+    // Draw diagonal lines using XOR colour
+    lcd->drawLine(0,0,83,47, PIXEL_XOR);
+    lcd->drawLine(0,43,83,0, PIXEL_XOR);
+
+    wait( 2 );
+
+    // Draw a rectangle
+    lcd->drawRectangle(5,5,78,42, PIXEL_ON);
+
+    wait( 2 );
+
+    // Draw 2 filled rectangles
+    lcd->drawFilledRectangle(5,3,78,20, PIXEL_ON);
+    lcd->drawFilledRectangle(5,25,78,42, PIXEL_ON);
+
+    wait( 2 );
+
+    // Draw bitmap image
+    lcd->drawBitmap( 0,0, fy1,84,48);
+    wait(5);
+
+    // Pacman animation
+    lcd->cls();
+    int px = 0;
+    int py = 1;
+    float pause=0.060;
+    for( int p=0; p <9; p++) {
+        lcd->drawBitmap( px,py, pacman1,32,32);
+        wait( pause );
+        lcd->clearBitmap( px++,py, 32,32);
+        lcd->drawBitmap( px,py, pacman2,32,32);
+        wait( pause );
+        lcd->clearBitmap( px++,py, 32,32);
+        lcd->drawBitmap( px,py, pacman3,32,32);
+        wait( pause );
+        lcd->clearBitmap( px++,py, 32,32);
+        lcd->drawBitmap( px,py, pacman4,32,32);
+        wait( pause );
+        lcd->clearBitmap( px++,py, 32,32);
+        lcd->drawBitmap( px,py, pacman3,32,32);
+        wait( pause );
+        lcd->clearBitmap( px++,py, 32,32);
+        lcd->drawBitmap( px,py, pacman2,32,32);
+        wait( pause );
+        lcd->clearBitmap( px++,py, 32,32);
+    }
+    lcd->drawBitmap( px,py, pacman1,32,32);
+
+    wait( 5 );
+
+    lcd->cls();
+
+    lcd->writeString( 0, 1, "Graphic Demo", NORMAL);
+    lcd->writeString( 0, 3, "The End!!", NORMAL);
+//  lcd->writeString(38, 5, "OK", HIGHLIGHT );
+    waitforOKKey(lcd,jstick);
+}
+
+
+int main()
 {
     Joystick jstick(N3310SPIPort::AD0);
     N3310LCD lcd(N3310SPIPort::MOSI, N3310SPIPort::MISO, N3310SPIPort::SCK,
@@ -139,60 +269,56 @@
     lcd.init();
     lcd.cls();
     lcd.backlight(ON);
-    
+
     // demo stuff
     // autoDemo(&lcd);
-    
+
     initMenu(&lcd);
     int currentMenuItem = 0;
     Ticker jstickPoll;
     jstickPoll.attach(&jstick, &Joystick::updateADCKey, 0.01);    // check ever 10ms
-    
-    
-    while (true)
-    {
-    for (int i = 0; i < NUM_KEYS; i++)
-    {
-        if (jstick.getKeyState(i) != 0)
-        {    
-            jstick.resetKeyState(i);  // reset button flag
-            switch(i)
-            {
-                case UP_KEY:
-                    // current item to normal display
-                    lcd.writeString(MENU_X, MENU_Y + currentMenuItem, menu_items[currentMenuItem], NORMAL);
-                    currentMenuItem -=1;
-                    if (currentMenuItem <0)  currentMenuItem = DEMO_ITEMS -1;
-                    // next item to highlight display
-                    lcd.writeString(MENU_X, MENU_Y + currentMenuItem, menu_items[currentMenuItem], HIGHLIGHT);
-                    break;
-                    
-                case DOWN_KEY:
-                    // current item to normal display
-                    lcd.writeString(MENU_X, MENU_Y + currentMenuItem, menu_items[currentMenuItem], NORMAL);
-                    currentMenuItem +=1;
-                    if(currentMenuItem >(DEMO_ITEMS - 1))  currentMenuItem = 0;
-                    // next item to highlight display
-                    lcd.writeString(MENU_X, MENU_Y + currentMenuItem, menu_items[currentMenuItem], HIGHLIGHT);
-                    break;
-                    
-                case LEFT_KEY:
-                    initMenu(&lcd);
-                    currentMenuItem = 0;
-                    break;
-                    
-                case RIGHT_KEY:
-                    lcd.cls();
-                    (*menu_funcs[currentMenuItem])(&lcd);
-                    waitforOKKey(&lcd, &jstick);
-                    lcd.cls();
-                    initMenu(&lcd);
-                    currentMenuItem = 0;
-                    break;    
-            }        
+
+
+    while (true) {
+        for (int i = 0; i < NUM_KEYS; i++) {
+            if (jstick.getKeyState(i) != 0) {
+                jstick.resetKeyState(i);  // reset button flag
+                switch(i) {
+                    case UP_KEY:
+                        // current item to normal display
+                        lcd.writeString(MENU_X, MENU_Y + currentMenuItem, menu_items[currentMenuItem], NORMAL);
+                        currentMenuItem -=1;
+                        if (currentMenuItem <0)  currentMenuItem = DEMO_ITEMS -1;
+                        // next item to highlight display
+                        lcd.writeString(MENU_X, MENU_Y + currentMenuItem, menu_items[currentMenuItem], HIGHLIGHT);
+                        break;
+
+                    case DOWN_KEY:
+                        // current item to normal display
+                        lcd.writeString(MENU_X, MENU_Y + currentMenuItem, menu_items[currentMenuItem], NORMAL);
+                        currentMenuItem +=1;
+                        if(currentMenuItem >(DEMO_ITEMS - 1))  currentMenuItem = 0;
+                        // next item to highlight display
+                        lcd.writeString(MENU_X, MENU_Y + currentMenuItem, menu_items[currentMenuItem], HIGHLIGHT);
+                        break;
+
+                    case LEFT_KEY:
+                        initMenu(&lcd);
+                        currentMenuItem = 0;
+                        break;
+
+                    case RIGHT_KEY:
+                        lcd.cls();
+                        (*menu_funcs[currentMenuItem])(&lcd, &jstick);
+                        waitforOKKey(&lcd, &jstick);
+                        lcd.cls();
+                        initMenu(&lcd);
+                        currentMenuItem = 0;
+                        break;
+                }
+            }
         }
     }
-    }    
-         
-    return EXIT_SUCCESS;
+
+
 }
--- a/mbed.bld	Mon Dec 07 17:24:52 2009 +0000
+++ b/mbed.bld	Sun Mar 10 18:29:43 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/49a220cc26e0
+http://mbed.org/users/mbed_official/code/mbed/builds/5e5da4a5990b
\ No newline at end of file
--- a/mbed_bmp.h	Mon Dec 07 17:24:52 2009 +0000
+++ b/mbed_bmp.h	Sun Mar 10 18:29:43 2013 +0000
@@ -11,7 +11,7 @@
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
-* 
+*
 * N3310LCD is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
@@ -23,27 +23,25 @@
 
 /*------------------------------------------------------------------------------
 ; mbed bitmap - size 48x24 pixels, black/white image
-------------------------------------------------------------------------------*/ 
-
-unsigned char mbed_bmp[]=
-{
+------------------------------------------------------------------------------*/
 
-0x00,0x80,0x80,0x80,0x00,0x80,0x80,0x80,
-0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,
-0xF8,0xF8,0xF8,0x00,0x80,0x80,0x80,0x00,
-0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
-0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
-0x80,0x80,0x00,0xF8,0xF8,0xF8,0x00,0x00,
-0x00,0xFF,0xFF,0xFF,0x01,0x01,0xFF,0xFF,
-0xFF,0x01,0x01,0xFF,0xFF,0xFF,0x00,0x00,
-0xFF,0xFF,0xFF,0x83,0x01,0x83,0xFF,0xFF,
-0xFE,0x00,0x00,0x7C,0xFF,0xFF,0x19,0x19,
-0xDF,0xDF,0xDC,0x00,0x00,0xFE,0xFF,0xFF,
-0x83,0x01,0x83,0xFF,0xFF,0xFF,0x00,0x00,
-0x00,0x03,0x03,0x03,0x00,0x00,0x03,0x03,
-0x03,0x00,0x00,0x03,0x03,0x03,0x00,0x00,
-0x03,0x03,0x03,0x01,0x03,0x03,0x03,0x01,
-0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,
-0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x03,
-0x03,0x03,0x01,0x03,0x03,0x03,0x00,0x00
+unsigned char mbed_bmp[]= {
+    0x00,0x80,0x80,0x80,0x00,0x80,0x80,0x80,
+    0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,
+    0xF8,0xF8,0xF8,0x00,0x80,0x80,0x80,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
+    0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+    0x80,0x80,0x00,0xF8,0xF8,0xF8,0x00,0x00,
+    0x00,0xFF,0xFF,0xFF,0x01,0x01,0xFF,0xFF,
+    0xFF,0x01,0x01,0xFF,0xFF,0xFF,0x00,0x00,
+    0xFF,0xFF,0xFF,0x83,0x01,0x83,0xFF,0xFF,
+    0xFE,0x00,0x00,0x7C,0xFF,0xFF,0x19,0x19,
+    0xDF,0xDF,0xDC,0x00,0x00,0xFE,0xFF,0xFF,
+    0x83,0x01,0x83,0xFF,0xFF,0xFF,0x00,0x00,
+    0x00,0x03,0x03,0x03,0x00,0x00,0x03,0x03,
+    0x03,0x00,0x00,0x03,0x03,0x03,0x00,0x00,
+    0x03,0x03,0x03,0x01,0x03,0x03,0x03,0x01,
+    0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,
+    0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x03,
+    0x03,0x03,0x01,0x03,0x03,0x03,0x00,0x00
 };
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pacman.h	Sun Mar 10 18:29:43 2013 +0000
@@ -0,0 +1,78 @@
+/* Data generated with bitmap2LCD */
+/* 18/09/2009 23:21:39 */
+
+unsigned char  pacman1 [] = {
+    0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF0, 0xF8,
+    0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFE, 0xFE, 0x7E, 0x7E, 0xFC, 0xFC,
+    0xF8, 0xF0, 0xF0, 0xE0, 0x80, 0x00, 0x00, 0x00,
+    0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0x7F, 0x7F, 0x3F, 0x3C, 0x38, 0x18, 0x1C, 0x0F,
+    0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x00, 0x00,
+    0x07, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFE, 0xFC, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0,
+    0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x0F, 0x1F,
+    0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF,
+    0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F,
+    0x1F, 0x0F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00
+};
+
+unsigned char  pacman2 [] = {
+    0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF0, 0xF8,
+    0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFE, 0xFE, 0x7E, 0x7E, 0xFC, 0xFC,
+    0xF8, 0xF0, 0xF0, 0xE0, 0x80, 0x00, 0x00, 0x00,
+    0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0x7C, 0x78, 0x78, 0x7C, 0x7F,
+    0x7F, 0x3F, 0x3F, 0x1F, 0x1F, 0x1F, 0x00, 0x00,
+    0x07, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFE, 0xFE, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+    0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x0F, 0x1F,
+    0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF,
+    0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F,
+    0x1F, 0x0F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00
+};
+
+unsigned char  pacman3 [] = {
+    0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF0, 0xF8,
+    0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFE, 0xFE, 0x7E, 0x7E, 0xFC, 0xFC,
+    0xF8, 0xF0, 0xF0, 0xE0, 0x80, 0x00, 0x00, 0x00,
+    0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xF8, 0xFC, 0xFF,
+    0xFF, 0x7F, 0x7F, 0x3F, 0x3F, 0x3F, 0x3C, 0x00,
+    0x07, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+    0xFE, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0x38, 0x00,
+    0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x0F, 0x1F,
+    0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF,
+    0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F,
+    0x1F, 0x0F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00
+};
+
+unsigned char  pacman4 [] = {
+    0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF0, 0xF8,
+    0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFE, 0xFE, 0x7E, 0x7E, 0xFC, 0xFC,
+    0xF8, 0xF0, 0xF0, 0xE0, 0x80, 0x00, 0x00, 0x00,
+    0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xF8, 0xFC, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xC0,
+    0x07, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x07,
+    0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x0F, 0x1F,
+    0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF,
+    0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F,
+    0x1F, 0x0F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00
+};