sajsaj220
Newbie level 5
Could u please let me know what is the issue for not getting expected o/p from 4 digit 7seg in XC8 16F877A uC. The Ckt diag. and Code is here.
I am getting as o/p in 7seg only 0 and 8 but all control and data pins in mcu portion is blinking but all the control pins(1,2,3,4) under 7seg portion not blinking.
I am getting as o/p in 7seg only 0 and 8 but all control and data pins in mcu portion is blinking but all the control pins(1,2,3,4) under 7seg portion not blinking.
Code:
#include <xc.h>
//***Define the signal pins of all four displays***//
#define s1 RC0
#define s2 RC1
#define s3 RC2
#define s4 RC3
//***End of definition**////
void main()
{
unsigned int a,b,c,d,e,f,g,h; //just variables
int i = 0; //the 4-digit value that is to be displayed
int flag =0; //for creating delay
unsigned int seg[]={0XC0, //Hex value to display the number 0
0XF9, //Hex value to display the number 1
0XA4, //Hex value to display the number 2
0XB0, //Hex value to display the number 3
0X99, //Hex value to display the number 4
0X92, //Hex value to display the number 5
0X82, //Hex value to display the number 6
0XF8, //Hex value to display the number 7
0X80, //Hex value to display the number 8
0X90 //Hex value to display the number 9
}; //End of Array for displaying numbers from 0 to 9// FOR CA
//*****I/O Configuration****//
TRISC=0X00;
TRISD=0x00;
PORTC=0XFF; // FOR CA
//***End of I/O configuration**///
#define _XTAL_FREQ 20000000
while(1)
{
//***Splitting "i" into four digits***//
a=i%10;//4th digit is saved here
b=i/10;
c=b%10;//3rd digit is saved here
d=b/10;
e=d%10; //2nd digit is saved here
f=d/10;
g=f%10; //1st digit is saved here
h=f/10;
//***End of splitting***//
PORTD=seg[g];s1=0; //Turn ON display 1 and print 4th digit
__delay_ms(10);s1=1; //Turn OFF display 1 after 5ms delay
PORTD=seg[e];s2=0; //Turn ON display 2 and print 3rd digit
__delay_ms(10);s2=1; //Turn OFF display 2 after 5ms delay
PORTD=seg[c];s3=0; //Turn ON display 3 and print 2nd digit
__delay_ms(10);s3=1; //Turn OFF display 3 after 5ms delay
PORTD=seg[a];s4=0; //Turn ON display 4 and print 1st digit
__delay_ms(10);s4=1; //Turn OFF display 4 after 5ms delay
if(flag>=10) //wait till flag reaches 100
{
i++;flag=0; //only if flag is hundred "i" will be incremented
}
flag++; //increment flag for each flash
}
}