Jump to content

Nokia 5110 lcd with mspgcc

Recommended Posts

Just a simple test of the Nokia 5110 lcd with mspgcc :)





#include 						//Include font file

const int sclk = BIT0;						//LCD clock line (clocked on falling edge)
const int sda = BIT1;						//LCD data line (MSB first)
const int dc = BIT2;						//LCD mode select (low for instruction and high for data)
const int cs = BIT3;						//LCD chip select (low for select)
const int rst = BIT4;						//LCD reset (low for reset)

const int draw = 1;							//Used to select data mode
const int inst = 0;							//Used to select instruction mode

void init_lcd(void);						//Initialise LCD
void shift_out(unsigned int, unsigned char);//SPI
void delay(unsigned int);

void main(void)
WDTCTL = WDTPW + WDTHOLD;				//Put watchdog timer on hold

BCSCTL1 = CALBC1_1MHZ;					//Set frequency to 16MHZ

P1DIR = sclk | sda | dc | cs | rst;		//Initialise output pins

init_lcd();								//Initialise LCD

shift_out(inst, 128);					//Move cursor to start
shift_out(inst, 64);					//of first line

unsigned int i;
for(i = 0; i < 455; ++i)				//Shift out all characters
	shift_out(draw, font[i]);

while(1)								//Do nothing in a loop


void init_lcd(void)
P1OUT &= ~(sclk | sda | dc | cs | rst);	//Set all outputs low
delay(50000);							//Wait for LCD to reset
P1OUT |= rst;							//Deactivate reset
P1OUT &= ~cs;							//Set chip select low to select LCD
shift_out(inst, 0b00100000);			//function set: chip is active, horizontal addressing, use basic instruction set
shift_out(inst, 0b00001100);			//Display control: normal mode
unsigned int i;
for(i = 0; i < 504; ++i)				//Shift out zeros to whole screen to clear
	shift_out(draw, 0x00);
P1OUT |= cs;							//Set chip select high to deselect LCD

void shift_out(unsigned int ints_draw, unsigned char data_byte)
if(ints_draw == inst)					//Set dc (mode) line low if inst is used
	P1OUT &= ~dc;
else if(ints_draw == draw)				//Set dc (mode) line high if draw is used
	P1OUT |= dc;

P1OUT &= ~cs;							//Set chip select low to select LCD

unsigned char i;
for(i = 0; i <= 7; i++)
	P1OUT &= ~sclk;						//Set clock line low
	if(data_byte > 127)					//If most significant bit is 1 set data line high
		P1OUT |= sda;
	else if(data_byte < 128)			//If most significant bit is 0 set data line low
		P1OUT &= ~sda;

	P1OUT |= sclk;						//Bring clock line high to shift out bit

	data_byte = data_byte << 1;			//shift bits in data_byte left

	P1OUT |= cs;						//Set chip select high to deselect LCD

void delay(unsigned int time)
unsigned int i;
for(i = 0; i < time; i++)				//Waste time



const unsigned char font[] = { 0x00, 0x00, 0x00, 0x00, 0x00, // sp
0x00, 0x00, 0x2f, 0x00, 0x00, // !
0x00, 0x07, 0x00, 0x07, 0x00, // "
0x14, 0x7f, 0x14, 0x7f, 0x14, // #
0x24, 0x2a, 0x7f, 0x2a, 0x12, // $
0xc4, 0xc8, 0x10, 0x26, 0x46, // %
0x36, 0x49, 0x55, 0x22, 0x50, // &
0x00, 0x05, 0x03, 0x00, 0x00, // '
0x00, 0x1c, 0x22, 0x41, 0x00, // (
0x00, 0x41, 0x22, 0x1c, 0x00, // )
0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x00, 0x50, 0x30, 0x00, // ,
0x10, 0x10, 0x10, 0x10, 0x10, // -
0x00, 0x60, 0x60, 0x00, 0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02, // /
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x00, 0x42, 0x7F, 0x40, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x21, 0x41, 0x45, 0x4B, 0x31, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3C, 0x4A, 0x49, 0x49, 0x30, // 6
0x01, 0x71, 0x09, 0x05, 0x03, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x06, 0x49, 0x49, 0x29, 0x1E, // 9
0x00, 0x36, 0x36, 0x00, 0x00, // :
0x00, 0x56, 0x36, 0x00, 0x00, // ;
0x08, 0x14, 0x22, 0x41, 0x00, // <
0x14, 0x14, 0x14, 0x14, 0x14, // =
0x00, 0x41, 0x22, 0x14, 0x08, // >
0x02, 0x01, 0x51, 0x09, 0x06, // ?
0x32, 0x49, 0x59, 0x51, 0x3E, // @
0x7E, 0x11, 0x11, 0x11, 0x7E, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x22, 0x1C, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x49, 0x49, 0x7A, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x20, 0x40, 0x41, 0x3F, 0x01, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x7F, 0x04, 0x08, 0x10, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x3E, 0x41, 0x51, 0x21, 0x5E, // Q
0x7F, 0x09, 0x19, 0x29, 0x46, // R
0x46, 0x49, 0x49, 0x49, 0x31, // S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x3F, 0x40, 0x38, 0x40, 0x3F, // W
0x63, 0x14, 0x08, 0x14, 0x63, // X
0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x61, 0x51, 0x49, 0x45, 0x43, // Z
0x00, 0x7F, 0x41, 0x41, 0x00, // [
0x55, 0x2A, 0x55, 0x2A, 0x55, // 55
0x00, 0x41, 0x41, 0x7F, 0x00, // ]
0x04, 0x02, 0x01, 0x02, 0x04, // ^
0x40, 0x40, 0x40, 0x40, 0x40, // _
0x00, 0x01, 0x02, 0x04, 0x00, // '
0x20, 0x54, 0x54, 0x54, 0x78, // a
0x7F, 0x48, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x20, // c
0x38, 0x44, 0x44, 0x48, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x08, 0x7E, 0x09, 0x01, 0x02, // f
0x0C, 0x52, 0x52, 0x52, 0x3E, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x18, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x18, 0x7C, // q
0x7C, 0x08, 0x04, 0x04, 0x08, // r
0x48, 0x54, 0x54, 0x54, 0x20, // s
0x04, 0x3F, 0x44, 0x40, 0x20, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x0C, 0x50, 0x50, 0x50, 0x3C, // y
0x44, 0x64, 0x54, 0x4C, 0x44 }; // z

The Font was found here: http://homepage.ntlworld.com/c.lewis19/nokia.htm


The Make file:

CFLAGS= -Wall -g -mmcu=msp430x2012


all: $(OBJS)
$(CC) $(CFLAGS) -o nokiatest.elf $(OBJS)

%.o: %.c
$(CC) $(CFLAGS) -c $<

rm -fr nokiatest.elf $(OBJS)


(Change lcdfont.c to lcdfont.h)



Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...