Implement the design on Explorer 16 as Project 1. LED D10 will be used as the RUN LED indicator.

Write an application (in C) which does the following:
1. Make the RUN LED(D10) toggle at every 3.5 Seconds (exact) interval using one of the Timer (Timer 1) module of the Microcontroller.
2. The Knight Rider pattern now consists of 7 LEDs (D9-D3). If the switch (S3) is open, the pattern is from Left to Right direction. If the switch (S3) is closed, the pattern is from Right to Left direction.
3. Repeat the whole process in an infinite way.

Here's a possible implementation of the given requirements using Timer 1 module for toggling the RUN LED (D10) and controlling the Knight Rider pattern on LEDs (D9-D3):

```c
#include <xc.h>

#define _XTAL_FREQ 1000000 // Set the oscillator frequency used by __delay_ms() function

void main() {
// Configure I/O Ports
TRISD = 0b00000000; // Set PORTD pins as output
TRISC = 0b00001000; // Set RC3 (S3) as input
PORTD = 0b00000000; // Clear PORTD initially

// Configure Timer 1
T1CON = 0b00110000; // Set Timer 1 in 16-bit operation mode with 1:8 prescaler
TMR1L = 0x00; // Clear Timer 1 Low byte
TMR1H = 0x00; // Clear Timer 1 High byte

// Enable Timer 1 interrupt
PIE1bits.TMR1IE = 1; // Enable Timer 1 interrupt
INTCONbits.PEIE = 1; // Enable peripheral interrupts
INTCONbits.GIE = 1; // Enable global interrupts

// Start Timer 1
T1CONbits.TMR1ON = 1; // Start Timer 1

while (1) {
// Check the state of S3 switch
if (PORTCbits.RC3 == 0) {
// S3 switch is open, Left to Right direction
for (int i = 0; i < 5; i++) {
PORTD = 1 << i; // Shift '1' bit from left to right
__delay_ms(300); // Delay of 300ms
}
for (int i = 4; i > 0; i--) {
PORTD = 1 << i; // Shift '1' bit from right to left
__delay_ms(300); // Delay of 300ms
}
} else {
// S3 switch is closed, Right to Left direction
for (int i = 4; i > 0; i--) {
PORTD = 1 << i; // Shift '1' bit from right to left
__delay_ms(300); // Delay of 300ms
}
for (int i = 0; i < 5; i++) {
PORTD = 1 << i; // Shift '1' bit from left to right
__delay_ms(300); // Delay of 300ms
}
}
}
}

// Timer 1 interrupt service routine
void interrupt TimerISR() {
if (PIR1bits.TMR1IF) {
PIR1bits.TMR1IF = 0; // Clear Timer 1 interrupt flag
LATAbits.LA0 = ~LATAbits.LA0; // Toggle RUN LED (D10)
// Reload Timer 1 with 56786 to get an exact 3.5 second interval
TMR1L = 0xDB; // Load Timer 1 Low byte with 0xDB
TMR1H = 0xDE; // Load Timer 1 High byte with 0xDE
}
}
```

In this code, Timer 1 module is used to toggle the RUN LED (D10) at every 3.5 seconds interval. The Timer 1 interrupt is used to trigger the toggle and reload the Timer 1 with the appropriate value for 3.5 seconds interval.

The state of switch S3 is checked to determine the direction of the Knight Rider pattern on LEDs (D9-D3). When S3 is open, the pattern goes from left to right. When S3 is closed, the pattern goes from right to left. The pattern is achieved by shifting a '1' bit from left to right or right to left and waiting for 300ms delay between each shift.

The whole process is repeated infinitely using an infinite while loop.

Remember to set the oscillator frequency (_XTAL_FREQ) to match the actual oscillator frequency of your microcontroller for accurate timing.