Discussion in "PIC Microcontroller Discussion" started by    rearthur2003    Mar 12, 2010.
Fri Mar 12 2010, 10:42 pm
#1
thanks to Ajay i made modification to the library meant for AT89XXX
/*****************************************************

    Plug n Play Library for Nokia 3310 LCD

    Author:  Ajay Bhargav
    Edited by Ronald Arthur to run on pic
    microcontrollers and within the
    mikroC environment
		Email :  [email protected]
		WWW   :  www.8051projects.net

		File  :  LCD.C
		Info  :  easy to use library function

*****************************************************/

void spisend(unsigned char);
void wrdata(unsigned char);
void wrcmd(unsigned char);
void pixelxy(unsigned char, unsigned char);
void cursorxy(unsigned char, unsigned char);
void clearram(void);
void initlcd(void);
void putchar(unsigned char);
void putstr (unsigned char*);

/* Modify it to fit your schematic */
#define SCK portb.f0
#define DAT portb.f1
#define DC portb.f2
#define CE portb.f3
#define RES portb.f4

/* Lookup Table for Nokia LCD */
unsigned char const FontLookup [][5] =
{
    { 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
};

/* Send single byte on SPI Bus (software) */
/* Input Arguments: x ->
 Byte to send     */

void spisend(unsigned char x)
{
	unsigned char i;
	for(i=8;i>
0;i--){
		SCK = 0;
		if((x&0x80)){
			DAT = 1;
		} else {
			DAT = 0;
		}
		SCK = 1;
		x <<= 1;
	}
}

/* Write Data Byte to Nokia LCD              */
/* Input Arguments: x->
 Data Byte to be sent */

void wrdata(unsigned char x)
{
	DC = 1;
	CE = 0;
	spisend(x);
	CE = 1;
}

/* Write Command Byte to Nokia LCD               */
/* Input Arguments: x ->
 Command Byte to be sent */
void wrcmd(unsigned char x)
{
	DC = 0;
	CE = 0;
	spisend(x);
	CE = 1;
}

/* Brings ram pointer to X,Y pixel position            */
/* Input Arguments: x->
 X cordinate range from 0 to 83 */
/* Input Arguments: y->
 Y cordinate range from 0 to 5  */
void pixelxy(unsigned char x, unsigned char y)
{
	wrcmd(0x40|(y&0x07));	// Y axis
	wrcmd(0x80|(x&0x7f));	// X axis
}

/* Clears the screen */
void clearram(void)
{
	int ddram;
	pixelxy(0,0);										// Cursor Home.
	for (ddram=504;ddram>
0;ddram--)	{wrdata(0x00);}		// 6*84 = 504 DDRAM addresses.
}

/* Nokia3310 LCD Initialization */
void initlcd(void)
{
	RES = 1;	// Set _RES HIGH.
	CE = 1;		// Disable Chip.
	RES = 0;		// Reset the LCD.
	delay_ms(240);	// Wait 100ms.
	RES = 1;		// Awake LCD from RESET state.

	wrcmd(0x21);		// Activate Chip and H=1.
	wrcmd(0xC2);		// Set LCD Voltage to about 7V.
	wrcmd(0x13);		// Adjust voltage bias.
	wrcmd(0x20);		// Horizontal addressing and H=0.
	wrcmd(0x09);		// Activate all segments.
	clearram();			// Erase all pixel on the DDRAM.
	wrcmd(0x08);		// Blank the Display.
	wrcmd(0x0C);		// Display Normal.
	pixelxy(0,0);		// Cursor Home.
}

/* Bring cursor to Line and character specified                     */
/* Input Arguments: row    ->
 Line number range from 1 to 6         */
/* Input Arguments: Column ->
 character position range from 1 to 14 */
/* You can have maximum of 6 lines of text on LCD and each line
   containing 14 characters. Address is auto increment              */

void cursorxy(unsigned char row, unsigned char col)
{
	if((row>
6) || (row<1) || (col<1) || (col>
14))
		return;
	pixelxy(((col-1)*6),(row-1));
}

/* Writes single character on LCD                   */
/* Input Arguments: ch ->
 Character to be displayed */
void putchar(unsigned char ch)
{
	unsigned char i, temp;
	if ( (ch < 0x20) || (ch >
 0x7b) ){
		ch = 92;
	}
	for(i=0;i<5;i++){
		temp = FontLookup[ch - 32][i] << 1;
		wrdata(temp);
	}
	wrdata(0x00);
}

/* Writes character string on LCD                            */
/* Input Arguments: str ->
 Pointer to string to be displayed */
void putstr (unsigned char *str)
{
	while(*str)
		putchar(*str++);
}


/*
  Main code by Ronald Arthur
  Accra - Ghana
  (c) 2010
*/
void main()
{
  cmcon = 0x07;  //convert all comparators to digital pins
  trisa = 0xff;  //set porta as input
  trisb = 0x00;  //set portb as output
	initlcd();
  while(1)
  {
  while(porta.f0==1)
  {
  cursorxy(1,1);
  putstr("FUSE 1 IS OK");
  }
  clearram();
  while(porta.f0==0)
  {
  cursorxy(1,1);
  putstr("FUSE 1 ALERT");
  clearram();
  delay_ms(1000);
  cursorxy(1,1);
  putstr("FUSE 1 ALERT");
  delay_ms(1000);
  }
  clearram();
  }
}

the main code is a code for a simple fuse monitor
Tags nokia 3310 lcd libraryMikroC nokia 3310 LCD librarynokia 3310 lcd for pic
Sun Mar 14 2010, 07:42 pm
#2
I will add this to PIC library section.
is it a confirmed working code?
Mon Mar 15 2010, 04:04 am
#3
yes
Tue Mar 16 2010, 10:02 pm
#4
ok great.. thanks for contributing..
Thu Nov 04 2010, 05:28 am
#5
is this really works? Any complete tutorial with this?
Thu Nov 04 2010, 09:45 am
#6
hi romel_emperado
u can check it it is the same library that is in download section u can check this code in proteus too
i use it in this thread see this
http://www.8051projects.net/forum-t38136.html
Mon Oct 13 2014, 12:13 pm
#7
Where Can I Get The core for AVR?
Or It's Just the same?
Wed Oct 15 2014, 10:53 pm
#8
@BRV64, yes code will remain same. you only need to IO level changes.

Get Social

Information

Powered by e107 Forum System

Downloads

Comments

Bobbyerilar
Thu Mar 28 2024, 08:08 am
pb58
Thu Mar 28 2024, 05:54 am
Clarazkafup
Thu Mar 28 2024, 02:24 am
Walterkic
Thu Mar 28 2024, 01:19 am
Davidusawn
Wed Mar 27 2024, 08:30 pm
Richardsop
Tue Mar 26 2024, 10:33 pm
Stevencog
Tue Mar 26 2024, 04:26 pm
Bernardwarge
Tue Mar 26 2024, 11:15 am