		 	;Program for Nokia 3310 LCD PCD8544 48x84 pixcel
		 

		 	SCK		BIT	P1.7
		 	SDIN		BIT	P1.6
		 	D_C		BIT	P1.5	
		 	SCE		BIT	P1.4	
		 	RES		BIT	P1.3
		   
		 	
		 	ORG 0000H   		
			AJMP MAIN			
			ORG 0030H  
	MAIN:  	

			MOV SP,#60H 			
			MOV P1,#00H          
			CLR C
			CALL RESET     		
			CALL LCD_INIT  		
		HERE:	
			CALL CLEAR_RAM
			MOV DPTR,#MESSAGE
			CALL LCD_STRING
			CALL DELAYS
			CALL CLEAR_RAM
			MOV DPTR,#IMAGE
			CALL DISPLAY 
			CALL DELAYS
  		   	AJMP HERE
	
		DELAYS:	       	 ;1s DELAY
			MOV R5,#10
		D1:
			CALL DELAY
			DJNZ R5,D1
			RET
				
		DELAY:            	;100ms DELAY
			SETB PSW.4
			MOV R7,#200
		HDH:								
			MOV R6,#100
		HD:	NOP
			NOP
			NOP
			DJNZ R6,HD
			DJNZ R7,HDH	
			CLR PSW.4	
			RET

				
		RESET:          	 ; RESET 
			SETB SCE
			SETB RES
			CLR  RES
			CALL DELAY
			SETB RES
			RET
			
		LCD_INIT:             			;INITALIZE LCD
			MOV DPTR,#LCDCODE1
			CALL LCD_IN	
		   	CALL CLEAR_RAM
		   	MOV R1,#00H   	;Y
		   	MOV R2,#00H    	;X
			CALL CURSOR
			RET
			
	LCD_IN:	            
			MOV A,#00H
			MOV R6,#00H
	LOOP3:
			INC R6
			MOVC A,@A+DPTR
			CJNE A,#2FH,NEXT3 	
			RET
	NEXT3:
			CALL LCD_COM
			MOV A,R6
			AJMP LOOP3
				
		DISPLAY:            			 ;DISPLAY IMAGE
				MOV R7,#06H
			DO:	PUSH DPL
				PUSH DPH
				MOV R6,#84
			BACK:
				MOV A,#00H
				MOVC A,@A+DPTR
				CALL ROTATE
				CALL LCD_DATA
				CALL IN_DP
				DJNZ R6,BACK
				POP DPH
				POP DPL
				INC DPTR
            				DJNZ R7,DO
				RET
				
				
			IN_DP:
				MOV R5,#06H
	  		GO1:	INC DPTR
				DJNZ R5,GO1
				RET	

			ROTATE:
				CLR C	 
				MOV R3,#8H       
			ROT:
				RLC A
				MOV 53H,A
				PUSH 53H
				MOV A,R1
				RRC A
				MOV R1,A          
				POP 53H
				MOV A,53H
				DJNZ R3,ROT
				MOV A,R1
            				RET
            
			LCD_COM:            		 ;ROUTINE TO SEND LCD COMMAND
				CLR D_C
				CLR SCE
				NOP
				CALL CLOCK_DATA
				SETB SCE
				NOP
				RET
				
			LCD_DATA:      		;ROUTINE TO SEND LCD DATA
				SETB D_C
				CLR SCE
				NOP
				CALL CLOCK_DATA
				NOP
				SETB SCE
				RET
				
			CLOCK_DATA:         		 ;ROUTINE FOR SPI
			 	CLR C
				MOV R5,#08
			HERE1:
				CLR SCK
				RLC A
				MOV SDIN,C
				SETB SCK
				DJNZ R5,HERE1
				RET
			
			CURSOR:           		 ;SET DISPLAY CURSOR
				MOV A,R1   	  ;Y POINTER
				ANL A,#07H
				ORL A,#40H
				CALL LCD_COM
				MOV A,R2     	 ;X POINTER
				ANL A,#7FH
				ORL A,#80H
				CALL LCD_COM
				RET
				
		CLEAR_RAM: 			  ;CLEAR RAM
				MOV R1,#00H
				MOV R2,#00H
				CALL CURSOR
				CLR C
				MOV R6,#06
			LOOP:
			   	MOV R7,#84
			LOOP1:
				MOV A,#00H
				CALL LCD_DATA
				DJNZ R7,LOOP1	
			   	DJNZ R6,LOOP
			  	 RET
			   
		LCD_STRING:       			  ;ROUTINE TO DISPLAY MESSAGE
				MOV A,#0H
				MOV 50H,#0H
			NEXT:
				INC 50H
				MOVC A,@A+DPTR
				CJNE A,#2FH,NEXT1
				RET
			NEXT1:
				CALL TABLE_PTR
				MOV A,#00H
				CALL LCD_DATA
				MOV A,50H
				AJMP NEXT
				
			TABLE_PTR: 
							
				PUSH DPL 
				PUSH DPH
				
				MOV DPTR,#TABLE
				MOV B,#05H
				MUL AB
				SUBB A,#0A0H
				JNC HERE2
				DEC B
			HERE2:
			  	MOV R4,A
			  	CJNE R4,#00H,L1
			  	AJMP L3		   	
			  L1:	INC DPTR
				DJNZ R4,L1
			  L3:		
				CLR C
				MOV R4,B
			      	CJNE R4,#00H,L2
			      	AJMP L4
				L2:INC DPH
				DJNZ R4,L2	   			
			L4:
				MOV R6,#00H
				MOV A,#00H
			NEXT2:
				INC R6
				MOVC A,@A+DPTR
				CALL LCD_DATA
				MOV A,R6
				CJNE R6,#05H,NEXT2
				POP DPH
				POP DPL
				RET				   
														
			LCDCODE1:
				DB 21H  
			  	DB 90H		
				DB 07H   
				DB 13H   
				DB 20H   
				DB 09H   
				DB 08H   
			   	DB 0CH   
         				DB 2FH   
 
 	 
MESSAGE: DB "  GOOD DAY !/" 

	  


TABLE:        ;HEX ARRAY TO DISPLAY CHARACTERS 
DB		000H,000H,000H,000H,000H,	; 20 space		
DB		000H,000H,05fH,000H,000H,	; 21 !			
DB		000H,007H,000H,007H,000H,	; 22 "			
DB		014H,07fH,014H,07fH,014H,	; 23 #			
DB		024H,02aH,07fH,02aH,012H,	; 24 $			
DB		023H,013H,008H,064H,062H,	; 25 %
DB		036H,049H,055H,022H,050H,	; 26 &
DB		000H,005H,003H,000H,000H,	; 27 '
DB		000H,01cH,022H,041H,000H,	; 28 (
DB		000H,041H,022H,01cH,000H,	; 29 )
DB		014H,008H,03eH,008H,014H,	; 2a *
DB		008H,008H,03eH,008H,008H,	; 2b +
DB		000H,050H,030H,000H,000H,	; 2c ,
DB		008H,008H,008H,008H,008H,	; 2d -
DB		000H,060H,060H,000H,000H,	; 2e .
DB		020H,010H,008H,004H,002H,	; 2f /
DB		03eH,051H,049H,045H,03eH,	; 30 0
DB		000H,042H,07fH,040H,000H,	; 31 1
DB		042H,061H,051H,049H,046H,	; 32 2
DB		021H,041H,045H,04bH,031H,	; 33 3
DB		018H,014H,012H,07fH,010H,	; 34 4
DB		027H,045H,045H,045H,039H,	; 35 5
DB		03cH,04aH,049H,049H,030H,	; 36 6
DB		001H,071H,009H,005H,003H,	; 37 7
DB		036H,049H,049H,049H,036H,	; 38 8
DB		006H,049H,049H,029H,01eH,	; 39 9
DB		000H,036H,036H,000H,000H,	; 3a :
DB		000H,056H,036H,000H,000H,	; 3b ;
DB		008H,014H,022H,041H,000H,	; 3c <
DB		014H,014H,014H,014H,014H,	; 3d =
DB		000H,041H,022H,014H,008H,	; 3e >
DB		002H,001H,051H,009H,006H,	; 3f ?
DB		032H,049H,079H,041H,03eH,	; 40 @
DB		07eH,011H,011H,011H,07eH,	; 41 A
DB		07fH,049H,049H,049H,036H,	; 42 B
DB		03eH,041H,041H,041H,022H,	; 43 C
DB		07fH,041H,041H,022H,01cH,	; 44 D
DB		07fH,049H,049H,049H,041H,	; 45 E
DB		07fH,009H,009H,009H,001H,	; 46 F
DB		03eH,041H,049H,049H,07aH,	; 47 G
DB		07fH,008H,008H,008H,07fH,	; 48 H
DB		000H,041H,07fH,041H,000H,	; 49 I
DB		020H,040H,041H,03fH,001H,	; 4a J
DB		07fH,008H,014H,022H,041H,	; 4b K
DB		07fH,040H,040H,040H,040H,	; 4c L
DB		07fH,002H,00cH,002H,07fH,	; 4d M
DB		07fH,004H,008H,010H,07fH,	; 4e N
DB		03eH,041H,041H,041H,03eH,	; 4f O
DB		07fH,009H,009H,009H,006H,	; 50 P
DB		03eH,041H,051H,021H,05eH,	; 51 Q
DB		07fH,009H,019H,029H,046H,	; 52 R
DB		046H,049H,049H,049H,031H,	; 53 S
DB		001H,001H,07fH,001H,001H,	; 54 T
DB		03fH,040H,040H,040H,03fH,	; 55 U
DB		01fH,020H,040H,020H,01fH,	; 56 V
DB		03fH,040H,038H,040H,03fH,	; 57 W
DB		063H,014H,008H,014H,063H,	; 58 X
DB		007H,008H,070H,008H,007H,	; 59 Y
DB		061H,051H,049H,045H,043H,	; 5a Z
DB		000H,07fH,041H,041H,000H,	; 5b [
DB		002H,004H,008H,010H,020H,	; 5c Yen Currency Sign
DB		000H,041H,041H,07fH,000H,	; 5d ]
DB		004H,002H,001H,002H,004H,	; 5e ^
DB		040H,040H,040H,040H,040H,	; 5f _
DB		000H,001H,002H,004H,000H,	; 60 `
DB		020H,054H,054H,054H,078H,	; 61 a
DB		07fH,048H,044H,044H,038H,	; 62 b
DB		038H,044H,044H,044H,020H,	; 63 c
DB		038H,044H,044H,048H,07fH,	; 64 d
DB		038H,054H,054H,054H,018H,	; 65 e
DB		008H,07eH,009H,001H,002H,	; 66 f
DB		00cH,052H,052H,052H,03eH,	; 67 g
DB		07fH,008H,004H,004H,078H,	; 68 h
DB		000H,044H,07dH,040H,000H,	; 69 i
DB		020H,040H,044H,03dH,000H,	; 6a j 
DB		07fH,010H,028H,044H,000H,	; 6b k
DB		000H,041H,07fH,040H,000H,	; 6c l
DB		07cH,004H,018H,004H,078H,	; 6d m
DB		07cH,008H,004H,004H,078H,	; 6e n
DB		038H,044H,044H,044H,038H,	; 6f o
DB		07cH,014H,014H,014H,008H,	; 70 p
DB		008H,014H,014H,018H,07cH,	; 71 q
DB		07cH,008H,004H,004H,008H,	; 72 r
DB		048H,054H,054H,054H,020H,	; 73 s
DB		004H,03fH,044H,040H,020H,	; 74 t
DB		03cH,040H,040H,020H,07cH,	; 75 u
DB		01cH,020H,040H,020H,01cH,	; 76 v
DB		03cH,040H,030H,040H,03cH,	; 77 w
DB		044H,028H,010H,028H,044H,	; 78 x
DB		00cH,050H,050H,050H,03cH,	; 79 y
DB		044H,064H,054H,04cH,044H,	; 7a z
DB		000H,008H,036H,041H,000H,	; 7b <
DB		000H,000H,07fH,000H,000H,	; 7c |
DB		000H,041H,036H,008H,000H,	; 7d >
DB		010H,008H,008H,010H,008H,	; 7e Right Arrow 	->
DB		078H,046H,041H,046H,078H	; 7f Left Arrow	<-
					
IMAGE:       ;HEX ARRAY FOR IMAGE

DB 000H,000H,0fdH,000H,000H,080H,
DB 000H,007H,0ffH,000H,001H,000H,
DB 000H,00fH,0ffH,086H,002H,000H,
DB 000H,01fH,0ffH,0f9H,004H,000H,
DB 000H,03fH,0ffH,0fcH,084H,000H,
DB 000H,03fH,0ffH,0fcH,0c4H,000H,
DB 000H,07fH,0ffH,0feH,03cH,001H,
DB 000H,07fH,0ffH,0feH,014H,002H,
DB 000H,07fH,0ffH,0feH,00bH,006H,
DB 000H,07fH,0ffH,0ffH,008H,01aH,
DB 000H,07fH,0ffH,0feH,00cH,002H,
DB 000H,07fH,0ffH,0ffH,006H,004H,
DB 000H,07fH,0ffH,0feH,003H,0f8H,
DB 000H,07fH,0ffH,0feH,003H,0f8H,
DB 000H,03fH,0ffH,0feH,003H,0fcH,
DB 000H,03fH,0ffH,0fcH,003H,0f8H,
DB 000H,01fH,0ffH,0fcH,001H,0fcH,
DB 000H,00fH,0ffH,0f8H,001H,0fcH,
DB 000H,007H,0ffH,0f0H,001H,0fcH,
DB 000H,001H,0ffH,0e0H,001H,0fcH,
DB 0e0H,000H,0ffH,0fcH,001H,0fcH,
DB 0f0H,003H,0ffH,0efH,001H,0fcH,
DB 0f8H,007H,0ffH,081H,0c1H,0fcH,
DB 0fcH,00fH,0feH,000H,061H,0fcH,
DB 0feH,03fH,0fcH,000H,030H,0fcH,
DB 0feH,03fH,0fcH,000H,018H,0fcH,
DB 0ffH,07fH,0f8H,000H,00cH,0fcH,
DB 0ffH,0ffH,0f8H,000H,006H,0fcH,
DB 0ffH,0ffH,0f8H,000H,002H,0feH,
DB 0ffH,0ffH,0f8H,000H,003H,0feH,
DB 0ffH,0ffH,0f8H,000H,001H,0feH,
DB 0ffH,0ffH,0f8H,020H,007H,0feH,
DB 0ffH,0ffH,0f8H,020H,001H,0feH,
DB 0ffH,0ffH,0fcH,03cH,008H,07eH,
DB 0ffH,0ffH,0fcH,027H,0ffH,03eH,
DB 0ffH,0ffH,0feH,011H,0ffH,09eH,
DB 0ffH,0c0H,00fH,000H,07fH,0cfH,
DB 0ffH,080H,001H,080H,03fH,0efH,
DB 0ffH,000H,000H,080H,00fH,0cfH,
DB 0f6H,000H,000H,000H,00fH,0dfH,
DB 0c2H,000H,000H,000H,007H,09fH,
DB 002H,060H,000H,000H,003H,0bfH,
DB 003H,040H,0bfH,000H,001H,03fH,
DB 001H,081H,003H,0c0H,001H,07fH,
DB 001H,082H,007H,0e0H,001H,0ffH,
DB 001H,0c0H,003H,0e0H,000H,0ffH,
DB 000H,0f1H,080H,0c0H,000H,0ffH,
DB 000H,078H,03fH,000H,000H,0ffH,
DB 000H,07eH,000H,004H,000H,0ffH,
DB 000H,030H,000H,008H,000H,0feH,
DB 000H,018H,0dfH,0b0H,000H,0feH,
DB 000H,00cH,087H,0e0H,000H,0feH,
DB 000H,003H,023H,0e0H,001H,0feH,
DB 000H,000H,0faH,0c0H,001H,0feH,
DB 000H,000H,01fH,0c0H,003H,0feH,
DB 000H,000H,000H,040H,003H,0feH,
DB 000H,000H,007H,0f0H,007H,0feH,
DB 000H,000H,01eH,0f8H,00dH,0feH,
DB 000H,000H,018H,038H,01bH,0faH,
DB 000H,000H,019H,0f8H,063H,0f1H,
DB 000H,000H,01fH,0ffH,0c3H,0f0H,
DB 000H,000H,00fH,0e0H,003H,0f0H,
DB 000H,000H,002H,000H,003H,0f0H,
DB 000H,000H,000H,000H,003H,0f0H,
DB 000H,000H,000H,000H,003H,0f0H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 0feH,000H,07cH,0feH,0feH,0c0H,
DB 070H,000H,082H,010H,092H,020H,
DB 00eH,0feH,082H,020H,092H,01eH,
DB 070H,000H,082H,058H,092H,020H,
DB 0feH,000H,044H,086H,000H,0c0H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H,
DB 000H,000H,000H,000H,000H,000H

END

