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

Wed Jun 03 2020, 05:21 AM
Katherine Hoag
No cost advertising for your website here: https://bit.ly/freeadsubmission
scena
Tue May 19 2020, 06:29 PM
Does anyone have microcontroller programming software for STC15F104W (core 8051, 4 k, 128 byte, 6 I/O pin, UART ... DIL8), that works?
Sat May 02 2020, 03:38 PM
Tamu Gurung
Hi I am looking for a assembly language program for a digital decimal counter. Time counts max limit of 2 mins starting from 2.00 mins and ending at 0.00. time is to be displayed on 4 7-segment LED displays. Edsim51 simulator to be used. Thanks
Wed Mar 25 2020, 09:39 AM
Tajammul
Sir kindly send the code file i2c for 8051
ExperimenterUK
Fri Mar 13 2020, 06:36 PM
@ Rohitnani,ABEBE..which project ?
Fri Mar 13 2020, 08:55 AM
ABEBE
how can get hadwere of this project
Rohitnani
Sat Mar 07 2020, 12:11 PM
Sir, Could you please send me the zip file input password....
Wed Feb 26 2020, 11:58 AM
Peter Parker
Is it possible to send multiple messages using only 1 GSM module?
Sat Feb 01 2020, 05:12 AM
Pearl Olin
Hello,
Wed Jan 22 2020, 01:16 PM
MINU CHAUDHARY
I m getting errors while simulation process during interfacing socket output and lcd... Can i get the report of ur project which is same as us.

Downloads

Comments

Davidthils
Thu May 21 2020, 08:44 AM
Jakeror
Wed May 20 2020, 09:28 PM
motorCar
Wed May 20 2020, 03:05 PM
Vordrync
Wed May 20 2020, 07:52 AM
JadenjiT
Wed May 20 2020, 03:15 AM
scena
Tue May 19 2020, 06:08 PM
CodySiz
Tue May 19 2020, 02:22 PM
ClaireSat
Mon May 18 2020, 09:50 PM

Online

Guests: 40, Members: 0 ...

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

Members: 38211
Newest member: Davidthils
Forum Activity
xrxx Avatar
Posted By xrxx
Thu Apr 30 2020, 06:59 AM
BCD MULTIPLICATIONAssume that you have to 2 BCD nu...
liqian Avatar
Posted By liqian
Tue Apr 28 2020, 05:26 AM
I happened to see your post and I got many useful ...
ExperimenterUK Avatar
Posted By ExperimenterUK
Tue Apr 28 2020, 04:21 AM
The code is hard to read.Please zip it and attach ...
rogermado Avatar
Posted By rogermado
Sun Apr 26 2020, 01:53 AM
@ExperimenterUK, thanks for your reply. You'll fin...
ExperimenterUK Avatar
Posted By ExperimenterUK
Sat Apr 25 2020, 05:42 PM
Some simulators handle displays better than others...
rogermado Avatar
Posted By rogermado
Sat Apr 25 2020, 03:59 PM
Hello everyone, sorry in advance if i'm not in the...
PHANTOM28 Avatar
Posted By PHANTOM28
Fri Feb 28 2020, 10:25 AM
Hi.I hope you all can help me. I am relatively ne...
ExperimenterUK Avatar
Posted By ExperimenterUK
Fri Feb 21 2020, 05:05 PM
ajay_bhargav Avatar
Posted By ajay_bhargav
Fri Feb 21 2020, 04:45 AM
Yes you can do that.1. Create a channel @Thingspea...
ananyagupta Avatar
Posted By ananyagupta
Thu Feb 20 2020, 03:58 AM
With regards to the particular characters sent to ...