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

)
with alarm set function/*24 hr clockset 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 P3sbit reset = port^0;sbit rs = port^1;sbit rw = po
rt^2;sbit e = port^3;sbit dig_hr1=port^4;sbit dig_min1=port^5;sbit digalarm_hr1=
alarm^4;sbit digalarm_min1=alarm^5;sbit alarmport=alarm^0;sbit start=port^6;int
min1=0,hr1=0,alarmmin1=0,alarmhr1=0;int min0=60,hr0=25;unsigned char sec0=60,mi
n00,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 0
x00;
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;

return 0x49. case break. return 0x46. case 44:{ break. } return 0x57. } } } } } } } } } } } } } case 56:{ case break. case 50:{ break. delay(1). return 0x53. return 0x45. lcd_data(int_amt+48). if(hr1>23) hr1=0. case 57:{ } break. case break. e=1. lcd_cmd(0x80). return 0x34. XBYTE[1]=0xff. return. lcd_data(int_amt+48). case break. if(q==2) { XBYTE[3]=alarmmin. return 0x31. if(q==1) { XBYTE[2]=min. case break. return 0x42.}void lcd_data_string(unsigned char *str){ int i=0. delay(1). } }}void lcd_cmd(unsigned char item){ dataport = item. e=0. i++. rs= 0. return 0x32. case break. XBYTE[8]=0x01. case break.break. case break. return 0x47. case break. break. case 48:{ break. XBYTE[0]=0x00. int_amt=time_val%10. return 0x41.}// DATA SENDING FUNCTIONvoid lcd_data(un signed char item){ dataport = item. return 0x43. case 40:{ break. return 0x37. case 34:{ break.} void set_rtc_time( int q) { XBYTE[10]=0x20. return 0x39. case 32:{ break. case 52:{ break. delay(1) . return 0x50. e=0. case break. lcd_cmd( . }void lcd_data_int(int time_val){ int int_ amt. return 0x33. 31:{ } 33:{ } 35:{ } 37:{ } 39:{ } 41:{ } 43:{ } 45:{ } 47:{ } 49:{ } 51:{ } 53:{ } 55:{ return 0x56. } case 58:{ return 0x58. } case 59:{ return 0x59. case 46:{ break.int b){ if(b==1) { hr1++. return 0x52. return. e=1.}//function to set hoursvoid set_hr1(char a. return 0x36.}void lcd() // Function to i nitialize LCD{ lcd_cmd(0x38). XBYTE[11]=0x82. XBYTE[4]=hr. case 38:{ break. } XBYTE[7]=0x01. return 0x54. case break. rw=0. return 0x55. break. lcd_cmd(0x0C). rs= 1. case 36:{ break. } return. case break. } XBYTE[11]=0x22. delay(5). XBYTE[5]=alarmhr. return 0x48. int_amt=time_val/10. case 54:{ break. return 0x44. return 0x35. XBYTE[9]=0x10. return 0x51. case 42:{ break. case break. while(str[i]!='\0') { lcd_data(str[i]). return 0x40. delay(5). return 0x38. break. delay(5). rw=0.

lcd_cmd(0xc3). y=y | 0x 30. min0=60. } else { alarmhr1++. lcd_data(x).}void set_alarm() interrupt 2 // Time set function{ reset=0. lcd_cmd(0x80). lcd_data(':'). }}void main(){ reset=1. lcd_data_int(min1).a). XBYTE[11]=0x22. } if(min!=min00) { lcd_cmd(0X8A). } } lcd_cmd(0x01). lcd_cmd(0x01). lcd_data_string("TIME:") . lcd_cmd(a). lcd(). lcd_data_string( " "). lcd_cmd( 0x87).2).y. if(hr!=hr00) { lcd_cmd( 0X87). x= mybyte & 0x0F. alarmhr=num(alarmhr1). if(dig_hr1==0) set_hr1(0X8a. lcd_cmd(0x8A). hr=num(hr1).1).2). lcd_data_int(hr1). x=x | 0x30. } } lcd_cmd(0x01). lcd_data(':'). lcd_cmd( 0x80). if(start==0) { lcd_data_string("SET TIME").}void read_rtc_display() //Function to read RTC{ hr00=num(hr0). sec=XBYTE[0]. lcd_data(':'). min=num(min1). if(alarmmin1>59) alarmmin1=0.1). bcdconv(sec). lcd_cmd(0x01). reset=1. lcd_cmd(0x01). if(dig_min1==0) set_min1 (0X8d. y= mybyte & 0xF0. lcd_cmd(a). }}void set_time() interrupt 0{ reset=0. lcd_data_int(ala rmhr1). bcdconv(hr). lcd_cmd(0x01). } }} . lcd_data(y). IE=0x85. lcd_data_int(min1). lcd_cmd(a). hr0=25. min0=min. set_rtc_time(2). XBYTE[10]=0x20. if(alarmhr ==hr && alarmmin ==min ) { alarm1(). sec0=sec. lcd_cmd(0x01). lcd_data_string("TIME:").}void alarm1() // Function to check alarm { reset=0. }}//func tion to set minutevoid set_min1(char a. while(start==0) { delay(10). lcd_data_int(alarmmin1). if(digalarm_hr1==0) set_hr1(0X8b. lcd_data(':'). lcd_data_int(hr1). lcd_cmd(0x8b). if(min1>59) min1=0. lcd_data(':'). while(start==0) { delay(10). lcd_data _string("TIME:"). hr=XBYTE[4]. } else { alarmmin1++.}bcdconv(unsigned char mybyte){ unsigned char x.int b){ if(b==1) { min1++. lcd_cmd(0xc0). min=XBYTE[2]. hr0=25. hr0=hr. lcd_data_int(alarmmin1). min00=num(min0). alarmmin=num(alarmmin1). while(1) { read_rtc _display(). lcd_cmd(0xc3). if(digalarm_min1==0) set_min1(0X8e. min0=60. set_rtc_time(1). if(start==0) { lcd_data_string("SET ALARM"). delay(100). lcd_cmd(0x80). lcd_data_int(alarmhr1). lcd_data(':'). } if(sec!=sec0) { lcd_cmd(0x8D). y=y>>4. bcdconv(min). if(alarmhr1>23) alarmhr1=0. lcd_data_string("alarm").

Sign up to vote on this title
UsefulNot useful