I used the wiring above for pins D.1, D.2 and D.3 on a 16F877 and it didn't work as expected.

I get 3 LEDs blinking faintly instead of a single one. It seems as if the current loops over to the unused pin and comes back.

I'll have to check out your thread. I must be missing something.

Code:
' Blink 6 LEDs connected to Port D.1, D.2 and D.3 in charlie-plex manner

'   PIC             16F877      ext osc 20MHz
'   PBP             v2.60c
'   MPASM           v5.49
'   MCS+            v2.1.0.7
'   U2 programmer   v4.32

asm
 __config _HS_OSC & _WDT_OFF & _PWRTE_OFF & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF
endasm

DEFINE OSC 20
ADCON1 = 7                  ' Set Ports to digital
TRISA = %00000000           ' Set all Ports to output 
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %00000000
PORTA = %00000000           ' Set ports OFF
PORTB = %00000000
PORTC = %00000000
PORTD = %00000000
PORTE = %00000000
    pause 100
mainloop:
    TRISD = %11111001       ' Enable pins D.1 and 2
    PORTD = %00000100       ' Turn ON pin D.2 --> D.1
    pause 500
    PORTD = %00000010       ' Turn ON pin D.1 --> D.2
    pause 500

;    TRISD = %11110101       ' Enable pins D.1 and 3
;    PORTD = %00001000       ' Turn ON pin D.3 --> D.1
;    pause 500
;    PORTD = %00000010       ' Turn ON pin D.1 --> D.3
;    pause 500

;    TRISD = %11110011       ' Enable pins D.2 and 3
;    PORTD = %00000100       ' Turn ON pin D.2 --> D.3
;    pause 500
;    PORTD = %00001000       ' Turn ON pin D.3 --> D.2
;    pause 500

    TRISD = %11111111       ' All pins disabled
    pause 500
    goto mainloop
End
Robert