0% found this document useful (0 votes)
534 views

Program For Digital Clock Using RTC DS12C887

This program implements a digital clock with alarm functionality using an RTC DS12C887 and 8051 microcontroller. It includes functions for initializing the LCD display, setting the time and alarm, reading the current time from the RTC, and displaying the time and triggering an alarm if the current time matches the set alarm time. The main loop continuously reads the current time from the RTC and displays it, checking for an alarm match on each pass.

Uploaded by

Ashish Sharma
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
534 views

Program For Digital Clock Using RTC DS12C887

This program implements a digital clock with alarm functionality using an RTC DS12C887 and 8051 microcontroller. It includes functions for initializing the LCD display, setting the time and alarm, reading the current time from the RTC, and displaying the time and triggering an alarm if the current time matches the set alarm time. The main loop continuously reads the current time from the RTC and displays it, checking for an alarm match on each pass.

Uploaded by

Ashish Sharma
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 12

//Program for Digital Clock using RTC DS12C887 & 8051 microcontroller

(AT89C51) with alarm set function


/*24 hr clock
set p3^3=0,then start=0 them set time by dig_hr1 & dig_min1, then
remove p3^3 & start */
#include<reg51.h>
#include<absacc.h>
#define dataport P2 // Dataport for LCD
#define port P1
#define alarm P3
sbit
sbit
sbit
sbit
sbit
sbit
sbit
sbit
sbit
sbit

reset = port^0;
rs = port^1;
rw = port^2;
e = port^3;
dig_hr1=port^4;
dig_min1=port^5;
digalarm_hr1=alarm^4;
digalarm_min1=alarm^5;
alarmport=alarm^0;
start=port^6;

int min1=0,hr1=0,alarmmin1=0,alarmhr1=0;
int min0=60,hr0=25;
unsigned char sec0=60,min00,hr00,hr,min,sec,alarmmin,alarmhr;
void delay(unsigned int msec )
{
int i ,j ;
for(i=0;i<msec;i++)
for(j=0; j<1275; j++);
}
unsigned char num(int d)
{
switch(d)
{
case 0:{
return 0x00;
break;
}
case 1:{
return 0x01;
break;
}
case 2:{

return 0x02;
break;
}
case 3:{
return 0x03;
break;
}
case 4:{
return 0x04;
break;
}
case 5:{
return 0x05;
break;
}
case 6:{
return 0x06;
break;
}
case 7:{
return 0x07;
break;
}
case 8:{
return 0x08;
break;
}
case 9:{
return 0x09;
break;
}
case 10:{
return 0x10;
break;
}
case 11:{
return 0x11;
break;
}
case 12:{
return 0x12;
break;
}
case 13:{
return 0x13;
break;

}
case 14:{
return 0x14;
break;
}
case 15:{
return 0x15;
break;
}
case 16:{
return 0x16;
break;
}
case 17:{
return 0x17;
break;
}
case 18:{
return 0x18;
break;
}
case 19:{
return 0x19;
break;
}
case 20:{
return 0x20;
break;
}
case 21:{
return 0x21;
break;
}
case 22:{
return 0x22;
break;
}
case 23:{
return 0x23;
break;
}
case 24:{
return 0x24;
break;
}
case 25:{

return 0x25;
break;
}
case 26:{
return 0x26;
break;
}
case 27:{
return 0x27;
break;
}
case 28:{
return 0x28;
break;
}
case 29:{
return 0x29;
break;
}
case 30:{
return 0x30;
break;
}
case 31:{
return 0x31;
break;
}
case 32:{
return 0x32;
break;
}
case 33:{
return 0x33;
break;
}
case 34:{
return 0x34;
break;
}
case 35:{
return 0x35;
break;
}
case 36:{
return 0x36;
break;

}
case 37:{
return 0x37;
break;
}
case 38:{
return 0x38;
break;
}
case 39:{
return 0x39;
break;
}
case 40:{
return 0x40;
break;
}
case 41:{
return 0x41;
break;
}
case 42:{
return 0x42;
break;
}
case 43:{
return 0x43;
break;
}
case 44:{
return 0x44;
break;
}
case 45:{
return 0x45;
break;
}
case 46:{
return 0x46;
break;
}
case 47:{
return 0x47;
break;
}
case 48:{

return 0x48;
break;
}
case 49:{
return 0x49;
break;
}
case 50:{
return 0x50;
break;
}
case 51:{
return 0x51;
break;
}
case 52:{
return 0x52;
break;
}
case 53:{
return 0x53;
break;
}
case 54:{
return 0x54;
break;
}
case 55:{
return 0x55;
break;
}
case 56:{
return 0x56;
break;
}
case 57:{
return 0x57;
break;
}
case 58:{
return 0x58;
break;
}
case 59:{
return 0x59;
break;

}
}
}
void lcd_cmd(unsigned char item)
{
dataport = item;
rs= 0;
rw=0;
e=1;
delay(1);
e=0;
return;
}
// DATA SENDING FUNCTION
void lcd_data(unsigned char item)
{
dataport = item;
rs= 1;
rw=0;
e=1;
delay(1);
e=0;
return;
}
void lcd_data_string(unsigned char *str)
{
int i=0;
while(str[i]!='\0')
{
lcd_data(str[i]);
i++;
delay(1);
}
return;
}
void lcd_data_int(int time_val)
{
int int_amt;
int_amt=time_val/10;
lcd_data(int_amt+48);
int_amt=time_val%10;
lcd_data(int_amt+48);

}
void lcd()
{
lcd_cmd(0x38);
delay(5);
lcd_cmd(0x0C);
delay(5);
lcd_cmd(0x80);
delay(5);
}

// Function to initialize LCD

void set_rtc_time( int q)


{
XBYTE[10]=0x20;
XBYTE[11]=0x82;
XBYTE[0]=0x00;
if(q==1)
{
XBYTE[2]=min;
XBYTE[4]=hr;
}
XBYTE[7]=0x01;
XBYTE[8]=0x01;
XBYTE[9]=0x10;
XBYTE[1]=0xff;
if(q==2)
{
XBYTE[3]=alarmmin;
XBYTE[5]=alarmhr;
}
XBYTE[11]=0x22;
}
//function to set hours
void set_hr1(char a,int b)
{
if(b==1)
{
hr1++;
if(hr1>23)
hr1=0;
lcd_cmd(a);
lcd_data_int(hr1);
lcd_data(':');
}

else
{
alarmhr1++;
if(alarmhr1>23)
alarmhr1=0;
lcd_cmd(a);
lcd_data_int(alarmhr1);
lcd_data(':');
}
}
//function to set minute
void set_min1(char a,int b)
{
if(b==1)
{
min1++;
if(min1>59)
min1=0;
lcd_cmd(a);
lcd_data_int(min1);
}
else
{
alarmmin1++;
if(alarmmin1>59)
alarmmin1=0;
lcd_cmd(a);
lcd_data_int(alarmmin1);
}
}
void set_time()
interrupt 0
{
reset=0;
lcd_cmd(0x01);
if(start==0)
{
lcd_data_string("SET TIME");
lcd_cmd(0x8A);
lcd_data_int(hr1);
lcd_data(':');
lcd_data_int(min1);
lcd_cmd(0xc0);
while(start==0)
{

delay(10);
if(dig_hr1==0)
set_hr1(0X8a,1);
if(dig_min1==0)
set_min1(0X8d,1);
}
}
lcd_cmd(0x01);
hr=num(hr1);
min=num(min1);
set_rtc_time(1);
lcd_cmd(0x01);
lcd_cmd(0x80);
lcd_data_string("TIME:");
hr0=25;
min0=60;
}
void set_alarm()
interrupt 2
set function
{
reset=0;
lcd_cmd(0x01);
if(start==0)
{
lcd_data_string("SET ALARM");
lcd_cmd(0x8b);
lcd_data_int(alarmhr1);
lcd_data(':');
lcd_data_int(alarmmin1);
while(start==0)
{
delay(10);
if(digalarm_hr1==0)
set_hr1(0X8b,2);
if(digalarm_min1==0)
set_min1(0X8e,2);
}
}
lcd_cmd(0x01);
alarmhr=num(alarmhr1);
alarmmin=num(alarmmin1);
set_rtc_time(2);
lcd_cmd(0x01);
lcd_cmd(0x80);
lcd_data_string("TIME:");

// Time

hr0=25;
min0=60;
}
bcdconv(unsigned char mybyte)
{
unsigned char x,y;
x=
mybyte & 0x0F;
x=x | 0x30;
y= mybyte & 0xF0;
y=y>>4;
y=y | 0x30;
lcd_data(y);
lcd_data(x);
}
void alarm1()
Function to check alarm
{
reset=0;
reset=1;
lcd_cmd(0xc3);
lcd_data_string("alarm");
delay(100);
lcd_cmd(0xc3);
lcd_data_string("
");
}
void read_rtc_display()
{
hr00=num(hr0);
min00=num(min0);
XBYTE[11]=0x22;
hr=XBYTE[4];
lcd_cmd(0x87);
min=XBYTE[2];
sec=XBYTE[0];
if(hr!=hr00)
{
lcd_cmd(0X87);
bcdconv(hr);
lcd_data(':');
hr0=hr;
}
if(min!=min00)
{

//

//Function to read RTC

lcd_cmd(0X8A);
bcdconv(min);
lcd_data(':');
min0=min;
}
if(sec!=sec0)
{
lcd_cmd(0x8D);
bcdconv(sec);
sec0=sec;
}
}
void main()
{
reset=1;
lcd();
XBYTE[10]=0x20;
lcd_cmd(0x01);
IE=0x85;
lcd_cmd(0x80);
lcd_data_string("TIME:");
while(1)
{
read_rtc_display();
if(alarmhr ==hr && alarmmin ==min )
{
alarm1();
}
}
}

You might also like