I am facing an issue while driving a four digit 7 segment display using a TI MSP430 MCU.
Some digits are overlapped.
Below is the code we are using:
#define SWITCH_DELAY 800000 // 50 msec
#define SEG_HLD_TIME 50000 // 3 ms
void tlqi_POD_7SEG_Display_time(unsigned char in_ucHourDig1, unsigned char in_ucHourDig2,
unsigned char in_ucMinDig1, unsigned char in_ucMinDig2)
{
/*------------------------Set Hour Digit------------------------*/
tlqi_POD_display_Digit_Val(in_ucHourDig1);
GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7); //digit 1
__delay_cycles(SEG_HLD_TIME);
GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN7); //digit 1
__delay_cycles(SWITCH_DELAY);
tlqi_POD_display_Digit_Val(in_ucHourDig2);
GPIO_setOutputHighOnPin(GPIO_PORT_P3, GPIO_PIN0); //digit 2
__delay_cycles(SEG_HLD_TIME);
GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN0); //digit 2
__delay_cycles(SWITCH_DELAY);
/*------------------------Set Minutes Digit------------------------*/
tlqi_POD_display_Digit_Val(in_ucMinDig1);
GPIO_setOutputHighOnPin(GPIO_PORT_P3, GPIO_PIN1); //digit 3
__delay_cycles(SEG_HLD_TIME);
GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN1); //digit 3
__delay_cycles(SWITCH_DELAY);
tlqi_POD_display_Digit_Val(in_ucMinDig2);
GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN0); //digit 4
__delay_cycles(SEG_HLD_TIME);
GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0); //digit 4
__delay_cycles(SWITCH_DELAY);
}
We are calling this sequence in a continuous loop.