Discussion in "PIC Microcontroller Discussion" started by    rearthur2003    Mar 12, 2010.
Fri Mar 12 2010, 05:12 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, 02:12 PM
#2
I will add this to PIC library section.
is it a confirmed working code?
Sun Mar 14 2010, 10:34 PM
#3
yes
Tue Mar 16 2010, 04:32 PM
#4
ok great.. thanks for contributing..
Wed Nov 03 2010, 11:58 PM
#5
is this really works? Any complete tutorial with this?
Thu Nov 04 2010, 04:15 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, 06:43 AM
#7
Where Can I Get The core for AVR?
Or It's Just the same?
Wed Oct 15 2014, 05:23 PM
#8
@BRV64, yes code will remain same. you only need to IO level changes.

Get Social

Information

Powered by e107 Forum System

Conversation

Sun Oct 13 2019, 02:02 AM
Aline Hutchinson
Hey there,
ExperimenterUK
Sat Oct 12 2019, 10:23 PM
Log in.. then post your code in the 8051 forum
Sat Oct 12 2019, 10:18 AM
Bhadra Sajikumar
i am doing a countdown timer with 8051 for my project, unfortunately our professor had to take a leave of absence before he could teach us most of it.. can someone explain the .asm code of it for me?
Mon Sep 23 2019, 07:37 AM
Nathaniel
I am doing a project for my schools wireless security system with cameras,sensors and spot lights using 8051 micro controller, could you help me out with the design and its source code.
Wed Sep 18 2019, 08:48 PM
Caryn Kover
Thank you for your time,
ExperimenterUK
Mon Aug 05 2019, 07:09 PM
@Ismail ..post in forum, give details
Mon Aug 05 2019, 04:33 PM
Ismail balghmi
Hello. Please I won't download
ExperimenterUK
Wed Jul 24 2019, 12:47 AM
@BUSTER123 Please post in the forum
Tue Jul 23 2019, 06:13 PM
BUSTER123
hello! newbie here. i am kind of a guy who hates using ready - made existing libraries, so this helped a lot as i was trying to control and write to a character lcd display. however, i can't figure out how to set the cursor position. for example, i want to set it to the 5th column in the first row, so position 5. so according to the table, i am sending 10000101 on the 8 data lines of the lcd (register select pulled low). the cursor does not move there however. and i cant move the cursor left or right too. is it something wrong that i am doing? thank you.
ExperimenterUK
Thu Jul 11 2019, 07:55 PM
@ramos https://www.theengineeringprojects.com/2017/09/l298-motor-driver-library-proteus.html

Downloads

Comments

ilylily07
Tue Oct 15 2019, 04:32 PM
hientran123
Tue Oct 15 2019, 02:27 AM
Sat Oct 05 2019, 02:38 PM
zexalo
Thu Oct 03 2019, 09:53 AM
thanhle12345
Thu Oct 03 2019, 07:37 AM
ramon_vsc
Fri Sep 20 2019, 04:53 PM
youssoufba
Thu Sep 19 2019, 11:57 AM
Taiphan000
Tue Sep 17 2019, 04:21 AM

Online

Guests: 45, Members: 0 ...

most ever online: 182184
(Members: , Guests: 182184) on 06 Aug 2010: 05:37 AM

Members: 38097
Newest member: ilylily07
Forum Activity
s_dinesh40@yahoo.com Avatar
Posted By [email protected]
Sun Oct 20 2019, 03:09 PM
s_dinesh40@yahoo.com Avatar
Posted By [email protected]
Sun Oct 20 2019, 03:02 PM
sir, when i on display ,sometime 3rd display is no...
s_dinesh40@yahoo.com Avatar
Posted By [email protected]
Sun Oct 20 2019, 02:53 PM
sir, when i on display ,sometime 3rd display is no...
ExperimenterUK Avatar
Posted By ExperimenterUK
Sun Oct 20 2019, 12:21 AM
Your code seems okay on my simulationTry my code o...
ExperimenterUK Avatar
Posted By ExperimenterUK
Sun Oct 20 2019, 12:21 AM
Your code seems okay on my simulationTry my code o...
s_dinesh40@yahoo.com Avatar
Posted By [email protected]
Sat Oct 19 2019, 07:13 PM
please find video attachment. 3rd & 4th displa...
s_dinesh40@yahoo.com Avatar
Posted By [email protected]
Sat Oct 19 2019, 07:05 PM
sir, 3rd and 4th dot matrix display flickering, ...
ExperimenterUK Avatar
Posted By ExperimenterUK
Fri Oct 18 2019, 09:18 PM
Hopefully you understand some of the program.Which...
s_dinesh40@yahoo.com Avatar
Posted By [email protected]
Thu Oct 17 2019, 09:38 PM
ExperimenterUK Avatar
Posted By ExperimenterUK
Thu Oct 17 2019, 08:35 PM
Do you understand how this code works?If so, addin...