If it would be of help... I wrote a few different versions of code for a chap who was using the circuit below. I believe he used a '373/'573 latch driving the inputs.
Attachment:
Eric's 4477 IC.PNG [ 23.48 KiB | Viewed 5515 times ]
Code:
;
; // PIC psuedo C code program example
;
; char segdata [] = { 0b00111111, // "0" -|-|F|E|D|C|B|A
; 0b00000110, // "1" -|-|-|-|-|C|B|-
; 0b01011011, // "2" -|G|-|E|D|-|B|A
; 0b01001111, // "3" -|G|-|-|D|C|B|A
; 0b01100110, // "4" -|G|F|-|-|C|B|-
; 0b01101101, // "5" -|G|F|-|D|C|-|A
; 0b01111101, // "6" -|G|F|E|D|C|-|A
; 0b00000111, // "7" -|-|-|-|-|C|B|A
; 0b01111111, // "8" -|G|F|E|D|C|B|A
; 0b01101111, // "9" -|G|F|-|D|C|B|A
; 0b01110111, // "A" -|G|F|E|-|C|B|A
; 0b01111100, // "b" -|G|F|E|D|C|-|-
; 0b00111001, // "C" -|-|F|E|D|-|-|A
; 0b01011110, // "d" -|G|-|E|D|C|B|-
; 0b01111001, // "E" -|G|F|E|D|-|-|A
; 0b01110001 }; // "F" -|G|F|E|-|-|-|A
;
; void Main()
; { static unsigned char digsel = 0; // digit select, 0 or 128
; cmcon = 7; // turn comparator off
; trisa = 255; // Port A all inputs
; trisb = 0; // Port B all outputs
; while(1) // loop forever
; { unsigned char work = porta; // sample inputs
; if(digsel) // if left (hi) digit
; work /= 16; // use hi nibble, 0..F
; else // otherwise
; work &= 15; // use lo nibble, 0..F
; work = segdata[work]; // get segment data
; work |= digsel; // pick up digit select bit
; portb = work; // update display
; DelayMS(8); // ~60 Hz refresh rate
; digsel ^= 128; // toggle digit select bit
; } //
; } //
;
Some time ago I also experimented with eliminating segment current limiting resistors. That is, I drove one segment at a time (1/32nd duty cycle) while relying on the ~100-ohm Rds(on) resistance of the I/O pin MOSFET drivers for current limiting.
Attachment:
4-Digit Schematic #3.jpg [ 162.1 KiB | Viewed 5515 times ]
This scheme worked quite well driving modern hi-intensity LED displays (I was using Vcc = 5v).
It would be relatively easy to design a microcontroller based solution that could drive a 7-segment display, an HD44780 LCD, and an OLED display at the same time. Simply connect your display of choice.
I would be happy to help with PIC code and please note that it would be relatively simple to wrap the PIC firmware in an Arduino sketch and use a $2 Arduino Nano or $3 Arduino Uno and a solderless breadboard to program the PIC microcontroller via LVP (Low Voltage Programming).
Not sure why the original poster dis'ed my suggestion (he never elaborated) and I apologize if my suggestions are not in context for this thread...
Cheerful regards, Mike