#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 (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;