I did something similar for a chicken coop door and originally had problems with the ldr as well.

I countered this and shadows etc by flipping a counter. Single microswitch and a small 12v model motor.

This code worked well.
Code:
'###############################################
'#                                             #
'#  Automatic chicken coop sliding door.       #
'#                                             #
'#  12 Volt Battery powered.                   # 
'#  Open when light, close when dark.          #
'#  Sleep 4 hours between to conserve power    #
'#  and to prevent retriggering.               #
'#                                             #
'#  Uses single microswitch as feed back.      #
'#                                             #
'#  Pic 16f818 --- Rob Lane - Dec 2011         #
'#                                             #
'###############################################

OSCCON=$60                  'set 4mhz internal oscillator
                            '(Set INT_OSC in programmer fuses)
                            
' Define ADCIN parameters
Define	ADC_BITS	10  	'Set number of bits in result
Define	ADC_SAMPLEUS	50	'Set sampling time in uS

Photo   	var	word	   	'Create 'photo' to store result of ldr input   
Counter1    var byte        'flip flop counter variable

   'PIN ASSIGNMENTS
LDR         var porta.0

MotorUp     var portb.4      
MotorDown   var portb.5
Switch      var portb.6 

     Counter1=1         'Set counter for power up, door must 
                        'be closed in daylight for startup.
     pause 5000
     TRISA=%00000001	' Set PORTA 
     TRISB=%01000000    ' Set PORTB     
     input switch
     
     
'#########################################################     
     
Main:	          
        ADCIN ldr, photo                 'read ldr adc value
        IF Photo <15000 Then checkup     'daylight
        IF Photo >30000 Then checkdown   'darkness 
		'sleep 300             'about 5 minutes low power
	    goto Main 
	    
'##########################################################
	    
checkup:
        if counter1=1 then up
        goto main	    
		
up:		
        High MotorUp           'start motor up
   		pause 1000             'wait 1 sec so micro switch opens
stopup:
   		if switch = 1 then pressedup 'check microswitch state
        goto stopup                  'check again till true
        
pressedup: 
        low motorup           'stop motor
   		Counter1=2            'flip flop counter for up/down of door
   		sleep 150
   		'sleep 14400          'sleep 4 hours
   		goto main

'##########################################################

checkdown:
        if counter1=2 then down
        goto main    		
down:		
	    high MotorDown                   'start motor down
   		pause 1000
stopdown:
   		if switch = 1 then presseddown   'check again
        goto stopdown
   		
presseddown:
        low MotorDown
   		Counter1=1
   		sleep 150
   		'sleep 14400
   		goto main
		
end