Jump to content
43oh

Nokia 5110 lcd with mspgcc


Recommended Posts

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

 

post-7895-135135531471_thumb.jpg

 

nokiatest.c

#include 
#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
DCOCTL = CALDCO_1MHZ;

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
{
}
}

 

lcdfont.h

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:

CC=msp430-gcc
CFLAGS= -Wall -g -mmcu=msp430x2012

OBJS=nokiatest.o


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

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

clean:
rm -fr nokiatest.elf $(OBJS)

 

(Change lcdfont.c to lcdfont.h)

nokiatest.c

lcdfont.c

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.

Guest
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...