Microcontroller › 8051 › Plz again helpe to understand programe for digital clock using seven segment
- This topic has 6 replies, 3 voices, and was last updated 13 years, 11 months ago by
Amit Kumar.
Viewing 7 posts - 1 through 7 (of 7 total)
-
AuthorPosts
-
May 16, 2011 at 10:32 am #940
Amit Kumar
Participantvoid display() interrupt 1 //Function to display the number using seven segmnet multiplexing. For more details refer seven segment multiplexing.
{
TL0=0x36; //Reloading Timer0
TH0=0xf6;
P2=0xFF;
dig_ctrl_1 = dig_ctrl_3 = dig_ctrl_2 = dig_ctrl_4 = 0;
dig_disp++;
dig_disp=dig_disp%4;
switch(dig_disp)
May anyone tell me what is dig_disp & why it is incremented. What is the meaning of line
dig_disp=dig_disp%4;
May 16, 2011 at 11:08 am #6232dagakshay
Participantsend the link where you reffering this code…
May 16, 2011 at 1:26 pm #6240romel emperado
Participantthat is only a variable…
it needs to increment so that it will match to the switch case..
May 17, 2011 at 8:34 am #6256Amit Kumar
ParticipantDear sir,
I have pasted the programe.
And tell me what is the variable for dig_disp. Please make me understand it.
#include<reg51.h>
sbit dig_ctrl_4=P1^0; //Declaring control pins of the seven segments
sbit dig_ctrl_3=P1^1;
sbit dig_ctrl_2=P1^2;
sbit dig_ctrl_1=P1^3;
unsigned char dig_disp=0;
int min2;
int min1;
int sec2;
int sec1;
char digi_val[10]={0x40,0xF9,0x24,0x30,0x19,0x12,0x02,0xF8,0x00,0x10};
void delay() //Function to provide a time delay of approx. 1 second. using Timer 1.
{
int i;
for(i=0;i<20;i++)
{
TL1=0xFD;
TH1=0x4B;
TR1=1;
while(TF1==0);
TR1=0;
TF1=0;
}
}
void display() interrupt 1 //Function to display the number using seven segmnet multiplexing. For more details refer seven segment multiplexing.
{
TL0=0x36; //Reloading Timer0
TH0=0xf6;
P2=0xFF;
dig_ctrl_1 = dig_ctrl_3 = dig_ctrl_2 = dig_ctrl_4 = 0;
dig_disp++;
dig_disp=dig_disp%4;
switch(dig_disp)
{
case 0:
P2=digi_val[sec1];
dig_ctrl_1 = 1;
break;
case 1:
P2= digi_val[sec2];
dig_ctrl_2 = 1;
break;
case 2:
P2= digi_val[min1];
dig_ctrl_3 = 1;
break;
case 3:
P2= digi_val[min2];
dig_ctrl_4 = 1;
break;
}
}
void main()
{
TMOD=0x11; //Intialize Timer 0
TL0=0x36;
TH0=0xF6;
IE=0x82; // Enable Timer 0 interrupt
TR0=1; //Start Timer 0
while(1) //Start clock
{
min2=min1=sec2=sec1=0;
for(min2=0;min2<6;min2++)
{
for(min1=0;min1<10;min1++)
{
for(sec2=0;sec2<6;sec2++)
{
for(sec1=0;sec1<10;sec1++)
{
delay();
}
}
}
}
}
}
May 17, 2011 at 1:51 pm #6258Amit Kumar
Participantvoid display() interrupt 1 //Function to display the number using seven segmnet multiplexing. For more details refer seven segment multiplexing.
{
TL0=0x36; //Reloading Timer0
TH0=0xf6;
P2=0xFF;
dig_ctrl_1 = dig_ctrl_3 = dig_ctrl_2 = dig_ctrl_4 = 0;
dig_disp++;
dig_disp=dig_disp%4;
dig_disp is meant for what. It is variable, i understand it. But this variable is for what? & why it is written dig_disp=dig_disp%4;
May 17, 2011 at 9:39 pm #6260romel emperado
Participantdig_disp++; // variable is increamented
dig_disp=dig_disp%4; // as u can see this line using modulo any value
switch(dig_disp)
dig_disp=dig_disp%4; // as u can see this line is using modulo any value of this variable will be check by the switch case..
this is simply getting the timing if you want faster timing you can change that in 2 instead of 4..
try to experiment so that will know what happens if you change that line..
May 25, 2011 at 12:27 pm #6299Amit Kumar
ParticipantNow, i understand the programe.
-
AuthorPosts
Viewing 7 posts - 1 through 7 (of 7 total)
- You must be logged in to reply to this topic.