help me - PIC16F877A with nokia 3310 LCD interface..

Status
Not open for further replies.

mame101

Newbie level 3
Joined
Nov 6, 2007
Messages
3
Helped
5
Reputation
10
Reaction score
4
Trophy points
1,283
Activity points
1,314
nokia 3310 lcd interfacing

here is working code .all in one font,picture,and term-clock.see for picture its work
 

nokia 3310 lcd interface

mame101 said:
here is workıng kode .all in one font,picture,and term-clock.see for picture its work


 
3310 lcd pic

wow,thanx dude.it really help me
 

    V

    Points: 2
    Helpful Answer Positive Rating
nokia 3310 lcd sce

hello..
i am working on a project that involves use of a nokia 3315 lcd. i have written the program in mikroC. i am using PIC18F452 as controller.

but when i assembled the circuit and applied +5 volts to it, noting appeared on the screen.

please look at the code and comment.


I have used the schematic similar to the pic with difference of processor.

Added after 2 minutes:

the code is:





Code:
					// Connections between PIC and LCD.

#define D_C  PORTD.F5
#define SCE  PORTD.F4
#define RES  PORTD.F3
#define SCK  PORTD.F7
#define SDI  PORTD.F6

#define pi 3.14159					// Constant pi.
#define num_of_points 64			// Number of points to plot in a graph.

void initlcd(void);					// Initializes the LCD.
void sendcmd(char);				// Writes a command.
void senddata(char);				// Writes data to DDRAM to illuminate the pixels.
void cleanram(void);				// Erase the DDRAM contents.
void gotoxy(char,char);			// Position cursor to x,y.
void sendchar(char);					// Write one character.
void sendstr(const char *);			// Writes a string of characters.
void sendpack(char);      


const char table[480] = {	0x00,0x00,0x00,0x00,0x00,	// 20 space		ASCII table for NOKIA LCD: 96 rows * 5 bytes= 480 bytes
							0x00,0x00,0x5f,0x00,0x00,	// 21 !			Note that this is the same set of codes for character you
							0x00,0x07,0x00,0x07,0x00,	// 22 "			would find on a HD44780 based character LCD. :)
							0x14,0x7f,0x14,0x7f,0x14,	// 23 #			Also, given the size of the LCD (84 pixels by 48 pixels),
							0x24,0x2a,0x7f,0x2a,0x12,	// 24 $			the maximum number of characters per row is only 14. :)
							0x23,0x13,0x08,0x64,0x62,	// 25 %
							0x36,0x49,0x55,0x22,0x50,	// 26 &
							0x00,0x05,0x03,0x00,0x00,	// 27 '
							0x00,0x1c,0x22,0x41,0x00,	// 28 (
							0x00,0x41,0x22,0x1c,0x00,	// 29 )
							0x14,0x08,0x3e,0x08,0x14,	// 2a *
							0x08,0x08,0x3e,0x08,0x08,	// 2b +
							0x00,0x50,0x30,0x00,0x00,	// 2c ,
							0x08,0x08,0x08,0x08,0x08,	// 2d -
							0x00,0x60,0x60,0x00,0x00,	// 2e .
							0x20,0x10,0x08,0x04,0x02,	// 2f /
							0x3e,0x51,0x49,0x45,0x3e,	// 30 0
							0x00,0x42,0x7f,0x40,0x00,	// 31 1
							0x42,0x61,0x51,0x49,0x46,	// 32 2
							0x21,0x41,0x45,0x4b,0x31,	// 33 3
							0x18,0x14,0x12,0x7f,0x10,	// 34 4
							0x27,0x45,0x45,0x45,0x39,	// 35 5
							0x3c,0x4a,0x49,0x49,0x30,	// 36 6
							0x01,0x71,0x09,0x05,0x03,	// 37 7
							0x36,0x49,0x49,0x49,0x36,	// 38 8
							0x06,0x49,0x49,0x29,0x1e,	// 39 9
							0x00,0x36,0x36,0x00,0x00,	// 3a :
							0x00,0x56,0x36,0x00,0x00,	// 3b ;
							0x08,0x14,0x22,0x41,0x00,	// 3c <
							0x14,0x14,0x14,0x14,0x14,	// 3d =
							0x00,0x41,0x22,0x14,0x08,	// 3e >
							0x02,0x01,0x51,0x09,0x06,	// 3f ?
							0x32,0x49,0x79,0x41,0x3e,	// 40 @
							0x7e,0x11,0x11,0x11,0x7e,	// 41 A
							0x7f,0x49,0x49,0x49,0x36,	// 42 B
							0x3e,0x41,0x41,0x41,0x22,	// 43 C
							0x7f,0x41,0x41,0x22,0x1c,	// 44 D
							0x7f,0x49,0x49,0x49,0x41,	// 45 E
							0x7f,0x09,0x09,0x09,0x01,	// 46 F
							0x3e,0x41,0x49,0x49,0x7a,	// 47 G
							0x7f,0x08,0x08,0x08,0x7f,	// 48 H
							0x00,0x41,0x7f,0x41,0x00,	// 49 I
							0x20,0x40,0x41,0x3f,0x01,	// 4a J
							0x7f,0x08,0x14,0x22,0x41,	// 4b K
							0x7f,0x40,0x40,0x40,0x40,	// 4c L
							0x7f,0x02,0x0c,0x02,0x7f,	// 4d M
							0x7f,0x04,0x08,0x10,0x7f,	// 4e N
							0x3e,0x41,0x41,0x41,0x3e,	// 4f O
							0x7f,0x09,0x09,0x09,0x06,	// 50 P
							0x3e,0x41,0x51,0x21,0x5e,	// 51 Q
							0x7f,0x09,0x19,0x29,0x46,	// 52 R
							0x46,0x49,0x49,0x49,0x31,	// 53 S
							0x01,0x01,0x7f,0x01,0x01,	// 54 T
							0x3f,0x40,0x40,0x40,0x3f,	// 55 U
							0x1f,0x20,0x40,0x20,0x1f,	// 56 V
							0x3f,0x40,0x38,0x40,0x3f,	// 57 W
							0x63,0x14,0x08,0x14,0x63,	// 58 X
							0x07,0x08,0x70,0x08,0x07,	// 59 Y
							0x61,0x51,0x49,0x45,0x43,	// 5a Z
							0x00,0x7f,0x41,0x41,0x00,	// 5b [
							0x02,0x04,0x08,0x10,0x20,	// 5c Yen Currency Sign
							0x00,0x41,0x41,0x7f,0x00,	// 5d ]
							0x04,0x02,0x01,0x02,0x04,	// 5e ^
							0x40,0x40,0x40,0x40,0x40,	// 5f _
							0x00,0x01,0x02,0x04,0x00,	// 60 `
							0x20,0x54,0x54,0x54,0x78,	// 61 a
							0x7f,0x48,0x44,0x44,0x38,	// 62 b
							0x38,0x44,0x44,0x44,0x20,	// 63 c
							0x38,0x44,0x44,0x48,0x7f,	// 64 d
							0x38,0x54,0x54,0x54,0x18,	// 65 e
							0x08,0x7e,0x09,0x01,0x02,	// 66 f
							0x0c,0x52,0x52,0x52,0x3e,	// 67 g
							0x7f,0x08,0x04,0x04,0x78,	// 68 h
							0x00,0x44,0x7d,0x40,0x00,	// 69 i
							0x20,0x40,0x44,0x3d,0x00,	// 6a j
							0x7f,0x10,0x28,0x44,0x00,	// 6b k
							0x00,0x41,0x7f,0x40,0x00,	// 6c l
							0x7c,0x04,0x18,0x04,0x78,	// 6d m
							0x7c,0x08,0x04,0x04,0x78,	// 6e n
							0x38,0x44,0x44,0x44,0x38,	// 6f o
							0x7c,0x14,0x14,0x14,0x08,	// 70 p
							0x08,0x14,0x14,0x18,0x7c,	// 71 q
							0x7c,0x08,0x04,0x04,0x08,	// 72 r
							0x48,0x54,0x54,0x54,0x20,	// 73 s
							0x04,0x3f,0x44,0x40,0x20,	// 74 t
							0x3c,0x40,0x40,0x20,0x7c,	// 75 u
							0x1c,0x20,0x40,0x20,0x1c,	// 76 v
							0x3c,0x40,0x30,0x40,0x3c,	// 77 w
							0x44,0x28,0x10,0x28,0x44,	// 78 x
							0x0c,0x50,0x50,0x50,0x3c,	// 79 y
							0x44,0x64,0x54,0x4c,0x44,	// 7a z
							0x00,0x08,0x36,0x41,0x00,	// 7b <
							0x00,0x00,0x7f,0x00,0x00,	// 7c |
							0x00,0x41,0x36,0x08,0x00,	// 7d >
							0x10,0x08,0x08,0x10,0x08,	// 7e Right Arrow 	->
							0x78,0x46,0x41,0x46,0x78};	// 7f Left Arrow	<-

   void main()
   { int i;
     char a;
     
   TRISD=0x00;
   TRISB=0x00;
   PORTB.F7=0;
   PORTD=0x00;
   initlcd();
   
   while(1)
   {gotoxy(12,15);
    sendstr("Kamal");
    if(PORTB.F7==0)
    PORTB.F7=1;
    else PORTB.F7=0;
    Delay_ms(1000);
    }



   //  gotoxy(0,0);
//     for(i=0;i<480;i++)
//     {a=table[i];
//      senddata(a);}
      

   
   }
   
   void initlcd()
       {
        RES =1;
        SCE =1;
        RES =0;
        Delay_ms(100);
        RES=1;            /// come out of lcd state
        
        sendcmd(0x21);
        sendcmd(0xC2);
        sendcmd(0x13);
        sendcmd(0x20);
        sendcmd(0x09);

        if (PORTB.F6==1)
        PORTB.F6=0;
        else
        PORTB.F6=1;
        cleanram();
        PORTB.F5=1;
        sendcmd(0x08);
        sendcmd(0x0C);
        gotoxy(0,0);
       }
       
   void sendcmd(char x)
     {
       D_C= 0;
       SCE=0;
       sendpack(x);
       SCE=1;               //deselect the display
       return;
       }
       
     void senddata(char x)
     {
       D_C= 1;
       SCE=0;
       sendpack(x);
       SCE=1;               //deselect the display
       }


  void cleanram()
   {int i;
     gotoxy(0,0);
     for(i=504;i>0;i--)
     senddata(0x00);
   }
   
   void gotoxy( char x, char y)
     { sendcmd(0x40|(y&0x07));
       sendcmd(0x80|(x&0x7f));
     }
     
   void sendchar(char x)
    { int a,b;
      char c;
      if((x<0x20)||(x>0x7f))
         return;
      a=((5*x)-160);
      for(b=5;b>0;b--)
       { c=table[a];
         senddata(c);
         a++;
       }
      senddata(0x00);
   }

  void sendstr(const char *s)
   {
     while(*s)
      sendchar(*s++);
   }
   
  void sendpack(char x)
  { int i;
    for(i=0;i<8;i++)
     { SCK=0;
       if ((x&0x80)==0x80)                                                  0
         SDI=1;
       else
         SDI=0;
       SCK=1;
       x=x<<1; }
     }

Added after 5 minutes:

one more thng i have used three LEDs in order to debug the program at PB7,PB6 and PB5. they glow at different instant in the program.

these leds were wworking fine as per program. so my guess is that Program is working iside the chip..Also through PRoteus i have checked the SPI communication.it is also as expected.

i heve checked each annd every connection many times.
so i think either the LCD is faulty or i have done something wrong in initialisation routine....



please help..
thx in advance

Added after 24 minutes:



Added after 28 minutes:

wait a min...
when i used inverse mode (sending 0D istead of 0C in init routine) i am getting routine, i can see a very light output in the screen.


now the only question is how to increase the contrast of the display????

any idea???
 
Last edited by a moderator:

nokia 3310 proteus

hey I am new to PIC programming but I have few 16f877 and also old 3310. Can someone tell me how to use those files?? There are lot of files in son.rar. Which compiler to use?? Any mikroC files there?? plz help me
 

interfacing nokia 3310 lcd

Any PICBASIC code for 16f877 pls

help me
 

nokia 3310 lcd pic

wow
gr8

Thank you
 
Reactions: bumpy

    bumpy

    Points: 2
    Helpful Answer Positive Rating
    V

    Points: 2
    Helpful Answer Positive Rating
nokia 3315 lcd interfacing

hi! may i ask what langauaqge did you guys use for this interfacing? i can't get convert it to MikroC thanks guys!
 

proteus nokia 3310

Can anyone explain me the following table??

const char table[480] = { 0x00,0x00,0x00,0x00,0x00, // 20 space ASCII table for NOKIA LCD: 96 rows * 5 bytes= 480 bytes
0x00,0x00,0x5f,0x00,0x00, // 21 ! Note that this is the same set of codes for character you
0x00,0x07,0x00,0x07,0x00, // 22 " would find on a HD44780 based character LCD. Smile
0x14,0x7f,0x14,0x7f,0x14, // 23 # Also, given the size of the LCD (84 pixels by 48 pixels),
0x24,0x2a,0x7f,0x2a,0x12, // 24 $ the maximum number of characters per row is only 14. Smile
0x23,0x13,0x08,0x64,0x62, // 25 %
0x36,0x49,0x55,0x22,0x50, // 26 &
0x00,0x05,0x03,0x00,0x00, // 27 '
0x00,0x1c,0x22,0x41,0x00, // 28 (
0x00,0x41,0x22,0x1c,0x00, // 29 )
0x14,0x08,0x3e,0x08,0x14, // 2a *
0x08,0x08,0x3e,0x08,0x08, // 2b +
0x00,0x50,0x30,0x00,0x00, // 2c ,
0x08,0x08,0x08,0x08,0x08, // 2d -
0x00,0x60,0x60,0x00,0x00, // 2e .
0x20,0x10,0x08,0x04,0x02, // 2f /
0x3e,0x51,0x49,0x45,0x3e, // 30 0
0x00,0x42,0x7f,0x40,0x00, // 31 1
0x42,0x61,0x51,0x49,0x46, // 32 2
0x21,0x41,0x45,0x4b,0x31, // 33 3
0x18,0x14,0x12,0x7f,0x10, // 34 4
0x27,0x45,0x45,0x45,0x39, // 35 5
0x3c,0x4a,0x49,0x49,0x30, // 36 6
0x01,0x71,0x09,0x05,0x03, // 37 7
0x36,0x49,0x49,0x49,0x36, // 38 8
0x06,0x49,0x49,0x29,0x1e, // 39 9
0x00,0x36,0x36,0x00,0x00, // 3a :
0x00,0x56,0x36,0x00,0x00, // 3b ;
0x08,0x14,0x22,0x41,0x00, // 3c <
0x14,0x14,0x14,0x14,0x14, // 3d =
0x00,0x41,0x22,0x14,0x08, // 3e >
0x02,0x01,0x51,0x09,0x06, // 3f ?
0x32,0x49,0x79,0x41,0x3e, // 40 @
0x7e,0x11,0x11,0x11,0x7e, // 41 A
0x7f,0x49,0x49,0x49,0x36, // 42 B
0x3e,0x41,0x41,0x41,0x22, // 43 C
0x7f,0x41,0x41,0x22,0x1c, // 44 D
0x7f,0x49,0x49,0x49,0x41, // 45 E
0x7f,0x09,0x09,0x09,0x01, // 46 F
0x3e,0x41,0x49,0x49,0x7a, // 47 G
0x7f,0x08,0x08,0x08,0x7f, // 48 H
0x00,0x41,0x7f,0x41,0x00, // 49 I
0x20,0x40,0x41,0x3f,0x01, // 4a J
0x7f,0x08,0x14,0x22,0x41, // 4b K
0x7f,0x40,0x40,0x40,0x40, // 4c L
0x7f,0x02,0x0c,0x02,0x7f, // 4d M
0x7f,0x04,0x08,0x10,0x7f, // 4e N
0x3e,0x41,0x41,0x41,0x3e, // 4f O
0x7f,0x09,0x09,0x09,0x06, // 50 P
0x3e,0x41,0x51,0x21,0x5e, // 51 Q
0x7f,0x09,0x19,0x29,0x46, // 52 R
0x46,0x49,0x49,0x49,0x31, // 53 S
0x01,0x01,0x7f,0x01,0x01, // 54 T
0x3f,0x40,0x40,0x40,0x3f, // 55 U
0x1f,0x20,0x40,0x20,0x1f, // 56 V
0x3f,0x40,0x38,0x40,0x3f, // 57 W
0x63,0x14,0x08,0x14,0x63, // 58 X
0x07,0x08,0x70,0x08,0x07, // 59 Y
0x61,0x51,0x49,0x45,0x43, // 5a Z
0x00,0x7f,0x41,0x41,0x00, // 5b [
0x02,0x04,0x08,0x10,0x20, // 5c Yen Currency Sign
0x00,0x41,0x41,0x7f,0x00, // 5d ]
0x04,0x02,0x01,0x02,0x04, // 5e ^
0x40,0x40,0x40,0x40,0x40, // 5f _
0x00,0x01,0x02,0x04,0x00, // 60 `
0x20,0x54,0x54,0x54,0x78, // 61 a
0x7f,0x48,0x44,0x44,0x38, // 62 b
0x38,0x44,0x44,0x44,0x20, // 63 c
0x38,0x44,0x44,0x48,0x7f, // 64 d
0x38,0x54,0x54,0x54,0x18, // 65 e
0x08,0x7e,0x09,0x01,0x02, // 66 f
0x0c,0x52,0x52,0x52,0x3e, // 67 g
0x7f,0x08,0x04,0x04,0x78, // 68 h
0x00,0x44,0x7d,0x40,0x00, // 69 i
0x20,0x40,0x44,0x3d,0x00, // 6a j
0x7f,0x10,0x28,0x44,0x00, // 6b k
0x00,0x41,0x7f,0x40,0x00, // 6c l
0x7c,0x04,0x18,0x04,0x78, // 6d m
0x7c,0x08,0x04,0x04,0x78, // 6e n
0x38,0x44,0x44,0x44,0x38, // 6f o
0x7c,0x14,0x14,0x14,0x08, // 70 p
0x08,0x14,0x14,0x18,0x7c, // 71 q
0x7c,0x08,0x04,0x04,0x08, // 72 r
0x48,0x54,0x54,0x54,0x20, // 73 s
0x04,0x3f,0x44,0x40,0x20, // 74 t
0x3c,0x40,0x40,0x20,0x7c, // 75 u
0x1c,0x20,0x40,0x20,0x1c, // 76 v
0x3c,0x40,0x30,0x40,0x3c, // 77 w
0x44,0x28,0x10,0x28,0x44, // 78 x
0x0c,0x50,0x50,0x50,0x3c, // 79 y
0x44,0x64,0x54,0x4c,0x44, // 7a z
0x00,0x08,0x36,0x41,0x00, // 7b <
0x00,0x00,0x7f,0x00,0x00, // 7c |
0x00,0x41,0x36,0x08,0x00, // 7d >
0x10,0x08,0x08,0x10,0x08, // 7e Right Arrow ->
0x78,0x46,0x41,0x46,0x78}; // 7f Left Arrow <-
 

nokia 3310 lcd interfacing with pic using mikroc

Hi i am also trying to interface a nokia lcd to a PIC16F84A.
I am writing code in MikroC. The voltage level of the PIC is 5V from a 7805 chip. The voltage levels for LCD are brought down using a resister voltage divider.



But my LCD is not showing anything at all.
Can someone check out if my coding is right.........or is ther someother problem with my setup?

As of now i am just trying to print some arbitrary thing in the first column of the first bank.( X address 00 and Y address 00 and some arbitrary data)

Regarding the code....The PIC sends command data using function Command(); The arguement is the data in decimal form(not in HEX)

Any help will be appreciated..
 

programacao nokia 3310 proteus

lcd will work even on 5V supply. no need to use resistor.
hock
 

routine lcd 3310 mikroc

Thanks

That is fine but working the LCD at 3V shudnt affect its functioning.........can someone check if my code is right?
 
nokia 3310 contrast

your cellphone has a 3.7 v battery.
if you read the data sheet you will know it can work from 2.5 v to 5 volts.
hock
 

pic16f877 lcd 3310 interface

hi ! would like to ask if have the codes in assembly language instead of C? Thank You
 

Re: proteus nokia 3310


It's a 5x8 matrix of codes to send to the display. If you look at them in binary they make more sense, for example this is the code for "#"


00010100b // 23 #
01111111b
00010100b
01111111b
00010100b

See the pattern?

Why are people saying the LCD is OK at 5V? The data sheet says 3.3V.
 

lcd can work from 3 volts up to 7 volts.
hock
 
>lcd can work from 3 volts up to 7 volts.

FFS! Yes it can work up to 7V, but then a 12V light bulb will work at 15V; just not for very long.

If you want the device to behave reliably, stick to 3.3V as in the specification.
 

what does that mean when u asign RES as PORTD.F5? any explanation for us begginers to understand the flow of the code.
 

dindotiu said:
what does that mean when u asign RES as PORTD.F5? any explanation for us begginers to understand the flow of the code.

It would be helpful if you could quote the exact area to which your question refers.

Do you mean this bit of code? I've added comments.

Code:
#define D_C PORTD.F5 // LCD Data/Control 
#define SCE PORTD.F4 // LCD Serial Enable
#define RES PORTD.F3 // LCD Reset
#define SCK PORTD.F7 // LCD Clock
#define SDI PORTD.F6
// LCD Data

Here RES is defined as PORTD.F3 (not F5) but all this code is doing is giving meaningful names to the port connections to the Nokia LCD: D_C, SCE, RES, SCK and SDI are all shown in the data sheet.
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…