标准DS1302时钟可设置

  • 格式:pdf
  • 大小:174.12 KB
  • 文档页数:44

标准DS1302时钟可设置标准电路图/***********标准源码***********/#include<reg52.h> #include<intrins.h> unsigned char code displaywelcome[]={" I loveyou!"}; unsigned char code displaywish[]={"Zhou hui ming"}; unsigned char codeovertemperature[]={"OVERTEMPERATURE!"}; unsigned char codedigit[]={"0123456789"}; unsigned charmode,length,tempswitch,Maxtemp=40,amode,alarmmode,minutes,hours,minutea,seconds,houra=12; sbit RS=P2^0; sbit RW=P2^1;sbit E=P2^2;sbit BF=P0^7;sbit SCLK=P1^1; sbitDATE=P1^0; sbitREST=P1^2; / sbitSET=P1^4; sbitADD=P1^5; sbitRED=P1^6; voiddelay1ms(int i) {int j,k; while(i--)for(j=15;j>1;j--);for(k=30;k>1;k--);} void delaynus(unsigned char n) {unsigned char i;for(i=0;i<n;i++); }sbit beep=P1^7;void dely500(void){ unsigned char i;for(i=250;i>0;i--){ _nop_();} } void baojing(unsignedchar n) {unsigned char x,i;while(n--){ for(i=0;i<5;i++) {for(x=0;x<200;x++){ beep=~beep;dely500();} } for(i=0;i<3;i++){ for(x=0;x<200;x++) {beep=~beep;dely500();dely500();} } } }void Write1302(unsigned char date) { unsigned char i;SCLK=0; delaynus(2);for(i=0;i<8;i++) {DATE=date&0x01;SCLK=1; delaynus(2);SCLK=0; delaynus(2);date>>=1;}}void WriteSet1302(unsigned char cmd,unsigned char date) { REST=0; SCLK=0;REST=1; Write1302(cmd);delaynus(5); Write1302(date)SCLK=1; REST=0;}unsigned char Read1302(void){ unsigned char i,date;delaynus(2);for(i=0;i<8;i++){ date>>=1;if(DATE==1)date|=0x80; SCLK=1;delaynus(2); SCLK=0delaynus(2);}return date;}unsigned char ReadSet1302(unsigned char cmd) { unsigned char date;REST=0; SCLK=0;REST=1;Write1302(cmd);delaynus(2);date=Read1302();SCLK=1; REST=0;return date;}void IntDS1302(void) //DS1302{ unsigned char flag;flag= ReadSet1302(0x81);if(flag&0x80) {WriteSet1302(0x8E,0x00);WriteSet1302(0x80,((0/10)<<4|(0%10))); WriteSet1302(0x82,((0/10)<<4|(0%10))); WriteSet1302(0x84,((0/10)<<4|(0%10))); WriteSet1302(0x86,((0/10)<<4|(0%10))); WriteSet1302(0x88,((0/10)<<4|(0%10))); WriteSet1302(0x8c,((10/10)<<4|(10%10))); WriteSet1302(0x90,0xa5);WriteSet1302(0x8E,0x80);}bit BusyTest(void)}{ bit result;RS=0; RW=1; E=1_nop_(); _nop_();_nop_(); result=BF;_nop_(); _nop_();_nop_(); E=0; returnresult;}void Write_com(unsigned char command) { while(BusyTest()!=0);RS=0; RW=0; E=0; _nop_()_nop_(); _nop_();P0=command;_nop_(); _nop_()_nop_(); E=1;_nop_(); _nop_()_nop_(); E=0;}void Write_Address(unsigned char address) { Write_com(address|0x80);delay1ms(1);}void Write_Date(unsigned char date){ RS=1; RW=0;E=0; _nop_();_nop_(); _nop_(); P0=date; _nop_(); _nop_(); _nop_();E=1; _nop_();_nop_(); _nop_();E=0; delay1ms(1);}/*初始化*/void Lcd_Int(void) { Write_com(0x38); delay1ms(1);Write_com(0x38); delay1ms(1);Write_com(0x06); delay1ms(1);Write_com(0x0c);delay1ms(1);Write_com(0x01);}void displaymainpart(void){ Write_Address(0x01); delay1ms(1); Write_Date('D'); Write_Date('A');Write_Date('T');Write_Date('E');Write_Date(':'); delay1ms(1); Write_Address(0x0A);delay1ms(1); Write_Date('-'); Write_Address(0x0D);Write_Date('-');Write_Address(0x42);Write_Date('T');Write_Date('I');Write_Date('M');Write_Date('E');Write_Date(':');Write_Address(0x4A);Write_Date('-');Write_Address(0x4D);Write_Date('-');Write_Address(0x06);Write_Date('2');Write_Date('0');}void display_Second(unsigned char second) { unsigned char i,j;i=second/10; j=second%10;Write_Address(0x4E);Write_Date(digit[i]);Write_Date(digit[j]);delay1ms(1);}void display_Minute(unsigned char minute){ unsigned char i,j;i=minute/10; j=minute%10;Write_Address(0x4B);Write_Date(digit[i]);Write_Date(digit[j]);delay1ms(1);}void display_Hour(unsigned char hour) { unsigned char i,j; i=hour/10;j=hour%10;Write_Address(0x48);Write_Date(digit[i]);Write_Date(digit[j]);delay1ms(1);}void display_Day(unsigned char day) { unsigned char i,j;i=day/10; j=day%10;Write_Address(0x0E);Write_Date(digit[i]);Write_Date(digit[j]);delay1ms(1);}void display_Month(unsigned char month) { unsigned char i,j;i=month/10; j=month%10;Write_Address(0x0B);Write_Date(digit[i]);Write_Date(digit[j]);delay1ms(1);}void display_Year(unsigned char year) { unsigned char i,j;i=year/10; j=year%10;Write_Address(0x08);Write_Date(digit[i]);Write_Date(digit[j]);delay1ms(1);}void display_houra(unsigned char x) { unsigned char i,j; i=x/10;j=x%10;Write_Address(0x44);Write_Date(digit[i]);Write_Date(digit[j]);}void display_minutea(unsigned char x) { unsigned char i,j; i=x/10;j=x%10;Write_Address(0x47);Write_Date(digit[i]);Write_Date(digit[j]);}void display_Time(void){ unsigned char value,day,month,year;Write_com(0x0c); value=ReadSet1302(0x81); seconds=(((value&0x70)>>4)*10+(value&0x0f)); display_Second(seconds); value=ReadSet1302(0x83) minutes=(((value&0x70)>>4)*10+(value&0x0f)); display_Minute(minutes); value=ReadSet1302(0x85) hours=(((value&0x70)>>4)*10+(value&0x0f)); display_Hour(hours); value=ReadSet1302(0x87); day=(((value&0x70)>>4)*10+(value&0x0f)); display_Day(day); value=ReadSet1302(0x89);month=(((value&0x70)>>4)*10+(value&0x0f)); display_Month(month); value=ReadSet1302(0x8D); year=(((value&0xf0)>>4)*10+(value&0x0f));display_Year(year); } voiddisplaystar(void) {unsigned char i,j;Write_Address(0x0f);while(displaywelcome[i]!='\0') {Write_Date(displaywelcome[i]); i++; delay1ms(1);} i=0; Write_Address(0x4f);while(displaywish[i]!='\0') {Write_Date(displaywish[i]); i++;delay1ms(1);} j=40; while(j--){ Write_com(0x18);delay1ms(700);} Write_com(0x01);delay1ms(10);}void gbdisplay(unsigned char address) { Write_Address(address);delay1ms(5); Write_com(0x0f); delay1ms(5);}void displaymaxt(unsigned char x) { unsigned char i,j,k;Write_com(0x0c);delay1ms(2);Write_Address(0x44);i=x/100; j=x/10;k=x%10;Write_Date(digit[i]);Write_Date(digit[j]);Write_Date(digit[k]);}void hourset(void){ unsigned char timevalue,hour; delay1ms(500); WriteSet1302(0x8e,0x00); timevalue=ReadSet1302(0x85); hour=(((timevalue&0x70)>>4)*10+(timevalue&0x0f)); while(1) {if(ADD==0){ delay1ms(50);if(ADD==0) {hour++;delay1ms(300);while(ADD==0);} } if(RED==0) {delay1ms(50);if(RED==0) {hour--; delay1ms(300);if(hour==0) hour=23; while(RED==0);} } timevalue=(((hour)/10)<<4|(hour%10)); WriteSet1302(0x84,timevalue); delay1ms(1); display_Hour(hour); Write_Address(0x49); delay1ms(5); if(hour>=24) hour=0;delay1ms (5);if(sound==0) {mode=0; Write_com(0x0c);break;}if(SET==0) break; }WriteSet1302(0x8e,0x80);} void minuteset(void) {unsigned char timevalue,minute; delay1ms(500);WriteSet1302(0x8e,0x00); timevalue=ReadSet1302(0x83); minute=(((timevalue&0x70)>>4)*10+(timevalue&0x0f)); while(1) {if(ADD==0) {delay1ms(10);if(ADD==0) {minute++; if(minute>=60) timevalue=0; while(ADD==0);} } if(RED==0) {delay1ms(10);if(RED==0) {minute--; delay1ms(300);if(minute==0) minute=59; while(RED==0);} } timevalue=((minute/10)<<4|(minute%10)); WriteSet1302(0x82,timevalue); delay1ms(1);display_Minute(minute);Write_Address(0x4c); delay1ms(5); if(minute>=60) minute=0;delay1ms(5); if(sound==0) {mode=0; Write_com(0x0c); break;}if(SET==0) break; }WriteSet1302(0x8e,0x80);} void secondset(void) {unsigned char second;delay1ms(500);WriteSet1302(0x8e,0x00); while(1) {if(ADD==0){ delay1ms(10);if(ADD==0) {second=0; WriteSet1302(0x80,0x00); while(ADD==0);} } delay1ms(1);display_Second(second);Write_Address(0x4f); delay1ms(5);if(sound==0) {mode=0; Write_com(0x0c);break;} if(SET==0) break; }WriteSet1302(0x8e,0x80); } voidyearset(void) //调年 {unsigned char datevalue,year; delay1ms(500);WriteSet1302(0x8e,0x00); datevalue=ReadSet1302(0x8d) year=(((datevalue&0x70)>>4)*10+(datevalue&0x0f)); while(1) {if(ADD==0){ delay1ms(10);if(ADD==0) {year++; while(ADD==0);} } if(RED==0) {delay1ms(10);if(RED==0) {year--; delay1ms(300);while(RED==0);} } datevalue=((year/10)<<4|(year%10)); WriteSet1302(0x8c,datevalue); delay1ms(5) display_Year(year); delay1ms(5);Write_Address(0x09); delay1ms(5);if(sound==0) {mode=0; Write_com(0x0c); break;} if(SET==0) break;}WriteSet1302(0x8e,0x80); } voidmonthset(void) {unsigned char datevalue,month; delay1ms(500);WriteSet1302(0x8e,0x00); datevalue=ReadSet1302(0x89); month=(((datevalue&0x70)>>4)*10+(datevalue&0x0f)); while(1) {if(ADD==0){ delay1ms(10);if(ADD==0) {month++; if(month>12) month=1;while(ADD==0);} }if(RED==0){ delay1ms(10);if(RED==0) {month--; delay1ms(300);if(month==0) month=12; while(RED==0);} } datevalue=((month/10)<<4|(month%10)); WriteSet1302(0x88,datevalue); delay1ms(1); display_Month(month); Write_Address(0x0c); delay1ms(5); if(sound==0) {mode=0; Write_com(0x0c);break;}if(SET==0) break; }WriteSet1302(0x8e,0x80);} void dayset(void) {unsigned char datevalue,day ; delay1ms(500); WriteSet1302(0x8e,0x00);datevalue=ReadSet1302(0x87);day=(((datevalue&0x70)>>4)*10+(datevalue&0x0f)); while(1) {if(ADD==0){ delay1ms(10);if(ADD==0) {day++; if(day>31) day=1;while(ADD==0);}} if(RED==0) {delay1ms(10);if(RED==0) {day--; delay1ms(300);if(day==0) day=31; while(RED==0);} } datevalue=((day/10)<<4|(day%10)); WriteSet1302(0x86,datevalue); delay1ms(1); display_Day(day); Write_Address(0x0f); delay1ms(5); if(sound==0) {mode=0;Write_com(0x0c);break; } if(SET==0) break;}WriteSet1302(0x8e,0x80); } void alarmhourset(void) {unsigned char value;value=houra; while(1) {if(ADD==0){ delay1ms(20);if(ADD==0) {Write_com(0x0c); delay1ms(5); value++; if(value>23) value=0;while(ADD==0);} } if(RED==0) {delay1ms(20);if(RED==0) {value--; if(value==0) value=23; while(RED==0);} } houra=value;display_houra(houra);gbdisplay(0x45); if(sound==0) {delay1ms(500); break; } }} voidalarmminuteset(void) {while(1){ if(ADD==0) {delay1ms(20);if(ADD==0) {minutea++; if(minutea>59) minutea=0; while(ADD==0) ;} } if(RED==0) {delay1ms(20);if(RED==0) {minutea--; if(minutea==0) minutea=59;while(RED==0) ;} } display_minutea(minutea); gbdisplay(0x48); if(sound==0) {delay1ms(500); break; }} } voidTimeSet(void) {display_Time();if(SET==0) {delay1ms(10); if(SET==0){mode++; delay1ms(20);switch(mode){ case(1):{gbdisplay(0x48);hourset(); delay1ms(500);} break; case(2):{gbdisplay(0x4c);minuteset();delay1ms(500);} break; case(3):{gbdisplay(0x4f);secondset();delay1ms(500);} break; case(4):{gbdisplay(0x09);yearset();delay1ms(500);} break; case(5):{gbdisplay(0x0c);monthset();delay1ms(500);} break; case(6):{gbdisplay(0x0f);dayset();delay1ms(500);} break;} if(mode==7) mode=0; } } }void alarmswitchset(void){ while(1) {if(ADD==0){ delay1ms(100);if(ADD==0){ alarmmode=1;Write_Address(0x4c);Write_Date('O'); Write_Date('N'); Write_Date(' ');} } if(RED==0) {alarmmode=0;Write_Address(0x4c);Write_Date('O');Write_Date('F');Write_Date('F');} if(sound==0) {delay1ms(500); break; }}}void Set(void){ if(SET==0) { delay1ms(10);if(SET==0) { Write_Address(0x40); Write_Date('T'); Write_com(0x0f); delay1ms(1000); Write_com(0x0c); while(1) { TimeSet(); if(ADD==0) { delay1ms(20); if(ADD==0) {Write_com(0x01); Write_Address(0x00); delay1ms(5); Write_Date('S');delay1ms(10); Maxtempset();}}if(RED==0){ delay1ms(20); if(RED==0){ Write_com(0x01); delay1ms(5); Write_Address(0x02); Write_Date('A');Write_Date('L'); Write_Date('A');Write_Date('R'); Write_Date('M');Write_Address(0x09);Write_Date('S'); Write_Date('E');Write_Date('T'); Write_Address(0x46); Write_Date('-'); display_houra(houra); display_minutea(minutea); if(alarmmode==1) {Write_Address(0x4c); Write_Date('O'); Write_Date('N'); Write_Date(' ');} if(alarmmode==0) {Write_Address(0x4c); Write_Date('O'); Write_Date('F'); Write_Date('F');} while(1){ if(SET==0) {delay1ms(100); if(SET==0) {amode++;switch(amode) {case(1):{gbdisplay(0x45);alarmhourset();Write_com(0x0c);delay1ms(500);} break; case(2):{gbdisplay(0x48);alarmminuteset();Write_com(0x0c);delay1ms(500);} break; case(3):{gbdisplay(0x4c);alarmswitchset();Write_com(0x0c);delay1ms(500);} break;} if(amode==4) amode=0;} } if(sound==0) {Write_com(0x01); delay1ms(5);displaymainpart(); break;} }} } if(sound==0) {Write_Address(0x40); Write_Date(' '); Write_com(0x0c); break;} } }} }void main(){ IE=0X82;TMOD=0X01;TR0=0;IntDS1302(); delay1ms(1)Lcd_Int(); delay1ms(2);displaystar();displaymainpart(); while(1){display_Time( ); Set( );if(ADD==0) {Write_com(0x01);delay1ms(5); Temperature();Write_com(0x01);displaymainpart();} if((hours==houra)&&(minutes==minutea)&&(seconds==0)) { if(alarmmode==1) {Write_com(0x01); delay1ms(5); Write_Address(0x03); Write_Date('T'); Write_Date('I'); Write_Date('M');Write_Date('E'); Write_Address(0x08); Write_Date('U'); Write_Date('P');Write_Date('!'); delay1ms(5);while(1) {baojing(1); if(sound==0) {Write_com(0x01); delay1ms(5); displaymainpart(); break;}}}}}}。