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

Digital clock program using AT892051

Hi, I'm writing a code for digital clock in Keil C, but I'm not getting the expected results. Can anybody please help me with the program? The code is as follows..

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

sbit PIN_P10=P1^0;/* Character to be transfered through this bit in parallel*/
sbit PIN_P11=P1^1;/* Clock*/
sbit PIN_P12=P1^2;/* Latch*/
sbit CS4=P1^3; /* 1st 7-segment Display*/
sbit CS3=P1^4; /* 2nd 7-segment Display*/
sbit CS2=P1^5; /* 3rd 7-segment Display*/
sbit CS1=P1^6; /* 4th 7-segment Display*/

unsigned char DataWrite;
unsigned char _crol_(unsigned char Temp,unsigned char DataWrite);
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 Lookup[11]=
{ 0xEE,0x28,0xCD,0x6C,0x2B,0x67,0xE7,0x2C,0xEF,0x2F
};

void main()
{

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

do
{

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

}while(1);

}

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

{ mscount++; Dispcount++; if(mscount>=1000) { mscount=0; Seconds++; } if(Seconds>=59) { Seconds=0; Minutes++; } if(Minutes>=59) { Minutes=0; Hours++; } if(Hours>=12) { Hours=1; }
}

{ if(Dispcount==29) /* This code is for refresh rate*/ { CS1=0; CS2=0; CS3=0; CS4=0; } if(Dispcount==30) {

DataWrite=Lookup[Display_Buffer[0]-0x30];

}

if(8>i) { i++; if (Dispcount==34) { Temp=DataWrite; } if (Dispcount==32) { PIN_P11=1; }

if (Dispcount==36) { PIN_P10=Temp^7; } if (Dispcount==38) { PIN_P11=0; } if (Dispcount==40) { DataWrite=_crol_(Temp,1); }

} PIN_P12=0;

if(Dispcount==48) { CS1=1; }
}

{ if(Dispcount==49) { CS1=0; CS2=0; CS3=0; CS4=0; } if(Dispcount==50) {

DataWrite=Lookup[Display_Buffer[1]-0x30];

}

{

if(8>i)

{ i++; if (Dispcount==54) { Temp=DataWrite; } if (Dispcount==52) { PIN_P11=1; }

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

} PIN_P12=0; }

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

{ if(Dispcount==69) { CS1=0; CS2=0; CS3=0; CS4=0; } if(Dispcount==70) {

DataWrite=Lookup[Display_Buffer[2]-0x30];

}

{

if(8>i) { i++; if (Dispcount==74) { Temp=DataWrite; } if (Dispcount==72) { PIN_P11=1; }

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

} PIN_P12=0; }

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

{ if(Dispcount==89) { CS1=0; CS2=0; CS3=0; CS4=0; } if(Dispcount==90) {

DataWrite=Lookup[Display_Buffer[3]-0x30];

}

{

if(8>i) { i++; if (Dispcount==94) { Temp=DataWrite; } if (Dispcount==92) { PIN_P11=1; }

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

} PIN_P12=0; }

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

if(Dispcount==821) { CS1,CS2,CS3,CS4=0;

}
} RETI;

Parents
  • No reason to continue answering until he have made one single post showing that he is reading all we write - every new post seems to just be an attemt at fixing one single thing out of maybe 50 wrongs, and the changes seems to be trial-and-error. Change the code so it looks different and then post the changes.

    Now nested statements but no sign that indentation has changed.

    Still local loop variables in a block that doesn't contain a loop.

    Still nested code that relies on a variable being able to store two different values at the same time.

    Still out-of-bounds array accesses.

    Still too small target buffers.

    Still thinking that there can be magic end-of-string characters anywhere.

    Still thinking that logic capable of many MHz needs 2ms delays.

    Thinking C has one-based indices.

    Setting a lot of select lines but not clearing the other lines at the correct place.

    Still comments saying either someting meaningless or something directly wrong.

    Still having the main loop busy-loop widly most of the time redoing what it has already done - but no explanation why the main loop can't emit the time.

    Still a temporary variable without any explanation what it is needed for - why the other variable isn't good enough.

    Still a bit rotation when the data don't need to be rotated.

    Code performs xor where it should extract a single bit.

    Still no code even close to have been tested - possibly sent through the compiler.

    ...

    Exactly what does the comment "For LED's" tell a reader? That LEDs are involved? Yes, but what about them?

Reply
  • No reason to continue answering until he have made one single post showing that he is reading all we write - every new post seems to just be an attemt at fixing one single thing out of maybe 50 wrongs, and the changes seems to be trial-and-error. Change the code so it looks different and then post the changes.

    Now nested statements but no sign that indentation has changed.

    Still local loop variables in a block that doesn't contain a loop.

    Still nested code that relies on a variable being able to store two different values at the same time.

    Still out-of-bounds array accesses.

    Still too small target buffers.

    Still thinking that there can be magic end-of-string characters anywhere.

    Still thinking that logic capable of many MHz needs 2ms delays.

    Thinking C has one-based indices.

    Setting a lot of select lines but not clearing the other lines at the correct place.

    Still comments saying either someting meaningless or something directly wrong.

    Still having the main loop busy-loop widly most of the time redoing what it has already done - but no explanation why the main loop can't emit the time.

    Still a temporary variable without any explanation what it is needed for - why the other variable isn't good enough.

    Still a bit rotation when the data don't need to be rotated.

    Code performs xor where it should extract a single bit.

    Still no code even close to have been tested - possibly sent through the compiler.

    ...

    Exactly what does the comment "For LED's" tell a reader? That LEDs are involved? Yes, but what about them?

Children