This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Is this the correct code for Digital clock?

#include <AT892051.H>
#include <stdio.h>
#include <intrins.h>

sbit PIN_P10=P1^0; /* Character to be transfered through thisbit in parallel*/
sbit PIN_P11=P1^1; /* Clock*/
sbit PIN_P12=P1^2; /* Latch*/
sbit DriveMinutes=P1^3; /* 1st 7-segment Display*/
sbit DriveTenMinutes=P1^4; /* 2nd 7-segment Display*/
sbit DriveHours=P1^5; /* 3rd 7-segment Display*/
sbit DriveTenHours=P1^6; /* 4th 7-segment Display*/

unsigned char SevenSegmentData;
unsigned char _crol_(unsigned char Temp,unsigned char SevenSegmentData);
char Display_Buffer[6];
unsigned char Dispcount;
unsigned char mscount;

int Hours=1;
int Minutes=0;
int Seconds=0;
int i=0;
char Temp;

code unsigned char DecimalToSevenSegment[11]=
{ 0xEE,0x28,0xCD,0x6C,0x2B,0x67,0xE7,0x2C,0xEF,0x2F
};

void main()
{

TMOD=0x01; TH0=0xF8; /* Initializing timer0 for 1ms*/ TL0=0x30; IE=0x82; TR0=1;

do
{

sprintf(Display_Buffer,"%02d%02d",Hours,Minutes); /* converting integer into character*/

}while(1);

}

void Timer0(void) interrupt 1 /* ISR begins*/
{ TF0=0; TR0=0; TH0=0xF8; TL0=0x30; TR0=1;

{ i++; /* To transfer bits into byte from port pin onto the shift register*/ Dispcount++; /* Dispcount is used to refresh the Hours and Minutes on the LED*/ mscount++; /* Generate 1ms Delay*/ if(++mscount>=1000) { mscount=0; Seconds++;

} if(++Seconds>=59) { Seconds=0; Minutes++; Seconds++;

} if(++Minutes>=59) { Minutes=0; Hours++; Seconds++; Minutes++;

} if(++Hours>=12) { Hours=1; Seconds++; Minutes++; Hours++; } }

// For DriveHours LED

{ if(Dispcount==29) /* This code is for refresh rate of LED1*/ { DriveMinutes=0; DriveTenMinutes=0; DriveHours=0; DriveTenHours=0;

} if(Dispcount==30) {

SevenSegmentData=DecimalToSevenSegment[Display_Buffer[0]-0x30];

}

if(8>++i) /* For a byte to be read by the port pin*/ {

if (Dispcount==32) { Temp=SevenSegmentData; } if (Dispcount==34) { PIN_P11=1; /* clock is set high*/ }

if (Dispcount==36) { PIN_P10=Temp^7; /* Taking MSB one at a time, the loop continous till all 8-bits are sent to the portpin*/ } if (Dispcount==38) { PIN_P11=0; /*clock is made low*/ } if (Dispcount==40) { SevenSegmentData=_crol_(Temp,1); /* bits are rotated left*/ } PIN_P12=0; /* Data is Latched*/ }

if(Dispcount==48) { DriveTenHours=1;

}
}

// For DriveTenHours LED

{ if(Dispcount==49) { DriveMinutes=0; DriveTenMinutes=0; DriveHours=0; DriveTenHours=0; } if(Dispcount==50) {

SevenSegmentData=DecimalToSevenSegment[Display_Buffer[1]-0x30];

}

{

if(8>++i)

{

if (Dispcount==52) { Temp=SevenSegmentData; } if (Dispcount==54) { PIN_P11=1; }

if (Dispcount==56) { PIN_P10=Temp^7; } if (Dispcount==58) { PIN_P11=0; } if (Dispcount==60) { SevenSegmentData=_crol_(Temp,1); } PIN_P12=0; }

}

if(Dispcount==68) { DriveHours=1; }
}

// For DriveTenMinutes LED

{ if(Dispcount==69) { DriveMinutes=0; DriveTenMinutes=0; DriveHours=0; DriveTenHours=0; } if(Dispcount==70) {

SevenSegmentData=DecimalToSevenSegment[Display_Buffer[2]-0x30];

}

{

if(8>++i) {

if (Dispcount==72) { Temp=SevenSegmentData; } if (Dispcount==74) { PIN_P11=1; }

if (Dispcount==76) { PIN_P10=Temp^7; } if (Dispcount==78) { PIN_P11=0; } if (Dispcount==80) { SevenSegmentData=_crol_(Temp,1); } PIN_P12=0; }

}

if(Dispcount==88) { DriveTenMinutes=1; }
}

// For DriveMinutes LED

{ if(Dispcount==89) { DriveMinutes=0; DriveTenMinutes=0; DriveHours=0; DriveTenHours=0; } if(Dispcount==90) {

SevenSegmentData=DecimalToSevenSegment[Display_Buffer[3]-0x30];

}

{

if(8>++i) {

if (Dispcount==92) { Temp=SevenSegmentData; } if (Dispcount==94) { PIN_P11=1; }

if (Dispcount==96) { PIN_P10=Temp^7; } if (Dispcount==98) { PIN_P11=0; } if (Dispcount==100) { SevenSegmentData=_crol_(Temp,1); } PIN_P12=0; }

}

if(Dispcount==108) { DriveMinutes=1; }
}

if(Dispcount==121) { DriveMinutes=0; DriveTenMinutes=0; DriveHours=0; DriveTenHours=0;

}

}

0