project on making digital clock using common anode 7 seg with at89c51 in keil

Status
Not open for further replies.

bkash77

Newbie level 3
Joined
Jul 4, 2013
Messages
3
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
66
i am having a problem in makin a project for my college ...i started a project with some c code in keil but its not working in proteus and even in the hardware...plz help me...my c code for this project is:
// Program to make a digital clock with time and alarm setting features

#include<reg51.h>
sbit dig_ctrl_4=P1^0; //Declare the control pins for the seven segments
sbit dig_ctrl_3=P1^1;
sbit dig_ctrl_2=P1^2;
sbit dig_ctrl_1=P1^3;
sbit buzzer=P3^7;
sbit resetalarm=P1^5; //Reset alarm pin to reset the alarm.
sbit resetclock=P1^4; //Reset clock pin to reset the clock.
sbit start=P3^3; // Start pin for starting the clock after time setting
sbit incr=P1^7; // Increment pin to increase the digits during time setting.
sbit set=P1^6; // Set pin to set the time.
int sel_seg_to_incr=0;
int ret_seg_to_incre=0;
int recnt_incr_seg;
int begin;
unsigned char dig_disp=0;
int min2=0;
int min1=0;
int sec2=0;
int sec1=0;
int minalarm2=0;
int minalarm1=0;
int secalarm2=0;
int secalarm1=0;
int alarmmin2=0;
int alarmmin1=0;
int alarmsec2=0;
int alarmsec1=0;
int keepmin2=0;
int keepmin1=0;
int keepsec2=0;
int keepsec1=0;
int loop=0;
int mode;
char dig_val[10]={0x40,0xF9,0x24,0x30,0x19,0x12,0x02,0xF8,0x00,0x10}; // Hex values corresponding to digits 0 to 9

void delay(int time) //Function to provide time delay.
{
int i,j;
for(i=0;i<time;i++)
for(j=0;j<1275;j++);
}

int setfn() // Function to select miniute and seconds digit set time.
{
while(set==0)
{
switch(recnt_incr_seg)
{

case 1:
if(set==0) //Select the min2 digit
{
dig_ctrl_4=1;
dig_ctrl_3=0;
dig_ctrl_2=0;
dig_ctrl_1=0;
recnt_incr_seg=1;
ret_seg_to_incre=1;
P2=dig_val[minalarm2];
delay(100);
}

case 2:
if(set==0) //Select the min1 digit
{
dig_ctrl_4=0;
dig_ctrl_3=1;
dig_ctrl_2=0;
dig_ctrl_1=0;
recnt_incr_seg=2;
ret_seg_to_incre=2;
P2=dig_val[minalarm1];
delay(100);
}

case 3:
if(set==0) //Select the sec 2 digit
{
dig_ctrl_4=0;
dig_ctrl_3=0;
dig_ctrl_2=1;
dig_ctrl_1=0;
recnt_incr_seg=3;
ret_seg_to_incre=3;
P2=dig_val[secalarm2];
delay(100);
}

case 4:
if(set==0) //Select the sec1 digit
{
recnt_incr_seg=1;
dig_ctrl_4=0;
dig_ctrl_3=0;
dig_ctrl_2=0;
dig_ctrl_1=1;
ret_seg_to_incre=4;
P2=dig_val[secalarm1];
delay(100);
recnt_incr_seg=1;
}
}
}
return(ret_seg_to_incre);
}

void increase(int a) //Function to set the minutes or seconds digit
{
while(incr==0)
{
switch(a)
{

case 1: // Set the min2 digit.
P2=dig_val[minalarm2];
delay(100);
minalarm2++;
if(minalarm2==6)
minalarm2=0;
P2=dig_val[minalarm2];
delay(20);
break;

case 2: //Set the min1 digit.
P2=dig_val[minalarm1];
delay(100);
minalarm1++;
if(minalarm1==10)
minalarm1=0;
P2=dig_val[minalarm1];
delay(20);
break;

case 3: // Set the sec2 digit.
P2=dig_val[secalarm2];
delay(100);
secalarm2++;
if(secalarm2==6)
secalarm2=0;
P2=dig_val[secalarm2];
delay(20);
break;

case 4: //Set the sec1 digit.
//recnt_incr_seg=4;
P2=dig_val[secalarm1];
delay(100);
secalarm1++;
if(secalarm1==10)
secalarm1=0;
P2=dig_val[secalarm1];
delay(20);
break;
}
}
}

void resetfn(mode) // Function to bring the clock to reset or set mode.
{
begin=1;
dig_ctrl_4=1; //Enable the min2 digit and disable others
dig_ctrl_3=0;
dig_ctrl_2=0;
dig_ctrl_1=0;
if(mode==0) //Check if clock is in set alarm mode
{
IE=0x88; //Disable Timer0 interrupt to stop the display of clock.
sel_seg_to_incr=1;
recnt_incr_seg=1;
P2=dig_val[keepmin2];
delay(100);
minalarm2=keepmin2;
minalarm1=keepmin1;
secalarm2=keepsec2;
secalarm1=keepsec1;
}
if(mode==1) //Check if clock is in set clock mode
{
IE=0x80; //Disable Timer0 interrupt to stop the clock.
minalarm2=min2;
minalarm1=min1;
secalarm2=sec2;
secalarm1=sec1;
sel_seg_to_incr=1;
recnt_incr_seg=1;
P2=dig_val[min2];
delay(100);
}
while(1)
{
if(start==0) //Check if start pin is pressed
{
if(mode==0)
{
keepmin2=minalarm2;
keepmin1=minalarm1;
keepsec2=secalarm2;
keepsec1=secalarm1;
alarmmin2=minalarm2;
alarmmin1=minalarm1;
alarmsec2=secalarm2;
alarmsec1=secalarm1;
}
if(mode==1)
{
min2=minalarm2;
min1=minalarm1;
sec2=secalarm2;
sec1=secalarm1;
}
TMOD=0x11; //Reset the timer0
TL0=0xf6;
TH0=0xFf;
IE=0x8A; //Enabling Timer0 interrupt to start the display of clock
TR0=1;
break;
}
if(set==0) //Check if set pin is pressed
sel_seg_to_incr=setfn();
if(incr==0) //Check if incr pin is pressed
increase(sel_seg_to_incr);
}
}

void display() interrupt 1 // Function to display the digits on seven segment using the concept of seven segment multiplexing.
{
TL0=0x36; //Reload 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=dig_val[sec1];
dig_ctrl_1 = 1;
break;

case 1:
P2= dig_val[sec2];
dig_ctrl_2 = 1;
break;

case 2:
P2= dig_val[min1];
dig_ctrl_3 = 1;
break;

case 3:
P2= dig_val[min2];
dig_ctrl_4 = 1;
break;
}
}

void moveclock() interrupt 3 // Function to increment clock digits
{
loop++;
if(loop==20)
{
sec1++;
if(sec1==10)
{
sec1=0;
sec2++;
if(sec2==6)
{
sec1=0;
sec2=0;
min1++;
if(min1==10)
{
sec1=0;
sec2=0;
min1=0;
min2++;
if(min2==6)
{
sec1=0;
sec2=0;
min1=0;
min2=0;
}
}
}
}
loop=0;
}
}

void main()
{
mode=0;
set=1; //Initialize set, reset, start and incr pins as input
resetalarm=1;
resetclock=1;
start=1;
incr=1;
begin=0;
TMOD=0x11; //Intialize Timer 0
TL0=0xf6; //Load timer0
TH0=0xFf;
IE=0x8A; //Enable Timer0 interrupt
TR0=1; //Start Timer0
TL1=0xFD;
TH1=0x4B;
TR1=1; // Start Timer1
while(1)
{
h
if(resetalarm==0) //Check if reset alarm pin is pressed
{
resetfn(0);
}
if(resetclock==0)//Check if reset clock pin is pressed
{
resetfn(1);
}
if(min2==alarmmin2&&min1==alarmmin1&&sec2==alarmsec2&&sec1==alarmsec1&&begin==1)// Check for Alarm condition
{
buzzer=0;
delay(500);
buzzer=1;
}
}
}
 
Last edited:

well.. start explaining *what* is not working... you can't just post some random code saying it's not working and expect people to be able to understand what's wrong...
 

actually its showing some of the portion of code only in hardware(i.e the increment botoon is workin) and in proteus flickering is occuring repeatedly ..also the clock is not running as it should have been ...............plz sir give some ideas about it........i would be really thankfull to you
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…