Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

help me - PIC16F877A with nokia 3310 LCD interface..

Status
Not open for further replies.
Hi Mame101, how are you?
I would like to do this project, can you help me and send me files?
 

Hi everyone,

I was able make the nokia 3310 lcd work using the examples given in this forum. I use pic16f877a and mikroc.

My problem now is how to invert the text (White text on Black background) of only 1 row. I was able to do invert but the whole screen using 0x0D. (normal mode is 0x0C).

My final objective is to make a scroll UP/DOWN using 2 buttons.

Attach is my code for those who want to do this project.
Hope somebody will reply.
Thanks
 

Attachments

  • PROGRAM.zip
    40.5 KB · Views: 114

Re: 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???

https://vol-alchevsk.ucoz.net/index/pic16f873a_rabochaja_versija/0-116 pic16f873A.jpg
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top