基本信息
源码名称:电子时钟程序(单片机)
源码大小:0.07M
文件格式:.zip
开发语言:C/C++
更新时间:2020-03-21
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
#include<reg52.h> #include<intrins.h> unsigned char code displaywelcome[]={" Welcome To My Lcd Timer"};//欢迎界面 unsigned char code displaywish[]={" Happy Every Day ^_^"}; //欢迎界面 unsigned char code overtemperature[]={"OVERTEMPERATURE!"}; unsigned char code digit[]={"0123456789"}; //数字代码 unsigned char mode,TH,TL,TN,TD,length,tempswitch,Maxtemp=40,amode,alarmmode,minutes,hours, minutea,seconds,houra=12; sbit SCLK=P3^6; //DS1302时钟输入 sbit DATE=P3^4; //DS1302数据输入 sbit REST=P3^5; //DS1302复位端口 sbit SET=P3^0; //DS1302设置模式选择位 sbit ADD=P3^1; //增加 sbit RED=P3^2; //减小 sbit CANL=P3^3; void delay1ms(int i)//1毫秒延时 { int j,k; while(i--) for(j=76;j>1;j--); for(k=29;k>1;k--); } void delaynus(unsigned char n) //延时若干微秒 { unsigned char i; for(i=0;i<n;i ); } /***********蜂鸣器模块************/ sbit beep=P1^2; //位定义,定义P.6位fmp void dely500(void) { unsigned char i; for(i=250;i>0;i--) { _nop_(); } } void baojing(unsigned char 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(); } } } } /*******DS1302模块*************/ void Write1302(unsigned char date)//向1302写数据 { 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) //读取1302数据 { unsigned char i,date; delaynus(2); for(i=0;i<8;i ) { date>>=1; if(DATE==1) date|=0x80; SCLK=1; delaynus(2); SCLK=0; delaynus(2); } return date; } unsigned char ReadSet1302(unsigned char cmd)//根据命令读取1302相应的值 { 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); //打开充电功能 选择2K电阻充电方式 WriteSet1302(0x8E,0x80); //根据写状态寄存器命令字,写入保护指令 } } /***************液晶显示模块*****************/ sbit RS=P2^4; sbit RW=P2^5; sbit E=P2^6; sbit BF=P0^7; /*液晶忙检测*/ bit BusyTest(void) { bit result; RS=0; RW=1; E=1; _nop_(); _nop_(); _nop_(); result=BF; _nop_(); _nop_(); _nop_(); E=0; return result; } /*写指令*/ 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); } void displaystar(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);//将写保护去掉,确保能正常将调整后的数值写入DS1302 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(CANL==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(CANL==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(CANL==0) { mode=0; Write_com(0x0c); break; } if(SET==0) break; } WriteSet1302(0x8e,0x80); } void yearset(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(CANL==0) { mode=0; Write_com(0x0c); break; } if(SET==0) break; } WriteSet1302(0x8e,0x80); } void monthset(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(CANL==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(CANL==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(CANL==0) { delay1ms(500); break; } } } void alarmminuteset(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(CANL==0) { delay1ms(500); break; } } } void TimeSet(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; } } } /***************显示温度模块********************/ unsigned char code displayexplain[]={"Digit thermometer"}; unsigned char code displayerror[]={"DS18B20 ERROR"}; unsigned char code displayerror1[]={"PLEASE CHECK "}; unsigned char code displaypart1[]={"WenDu:"}; unsigned char code displaypart2[]={"Cent"}; unsigned char flag; /**********************操作DS18B20模块***************************/ sbit DQ=P1^3; unsigned char time; /**********************DS18B20初始化****************************/ bit IntDS18B20(void) { bit temp; DQ=1; for(time=0;time<2;time ); DQ=0; for(time=0;time<200;time ); DQ=1; for(time=0;time<10;time ); temp=DQ; for(time=0;time<200;time ); return temp; } /**************************读DS18B20**********************/ unsigned char ReadDS18B20(void) { unsigned char i; unsigned char dat; for(i=0;i<8;i ) { DQ=1; _nop_(); DQ=0; _nop_(); DQ=1; for(time=0;time<2;time ); dat>>=1; if(DQ==1) dat=dat|0x80; else dat=dat|0x00; for(time=0;time<10;time ); } return dat; } /*********************向DS18B20写数据**************************/ void WriteDS18B20(unsigned char date) { unsigned char i; for(i=0;i<8;i ) { DQ=1; _nop_(); DQ=0; DQ=date&0x01; for(time=0;time<10;time ); DQ=1; for(time=0;time<1;time ); date>>=1; } for(time=0;time<4;time ); } /*******************为读取温度做好准备************************/ void ReadyreadDS18B20(void) { IntDS18B20(); WriteDS18B20(0XCC); WriteDS18B20(0X44); delay1ms(200); IntDS18B20(); WriteDS18B20(0XCC); WriteDS18B20(0XBE); } /*************在1602液晶上显示相关信息模块**********************/ /****************当未检测到DS18B20时显示信息模块****************/ void Display_Error(void) { unsigned char i=0; Write_Address(0x00); while(displayerror[i]!='\0') { Write_Date(displayerror[i]); i ; delay1ms(100); } delay1ms(5); i=0; Write_Address(0x40); while(displayerror1[i]!='\0') { Write_Date(displayerror1[i]); i ; delay1ms(100); } delay1ms(300) ; } /*************温度显示模块****************/ void Display_Explain(void) { unsigned char i=0; Write_Address(0x00); delay1ms(5); while(displayexplain[i]!='\0') { Write_Date(displayexplain[i]); i ; delay1ms(5); } i=0; Write_Address(0x40); while(displaypart1[i]!='\0') { Write_Date(displaypart1[i]); i ; delay1ms(5); } i=0; Write_Address(0x4C); while(displaypart2[i]!='\0') { Write_Date(displaypart2[i]); i ; delay1ms(5); } Write_Address(0x49); Write_Date('.'); delay1ms(5); } /*********************显示温度整数部分*************************/ void Display_Integer(unsigned char x) { unsigned char i,j,k; i=x/100; j=x%100/10; k=x%10; Write_Address(0x46); if(flag==1) Write_Date('-'); Write_Date(digit[i]); Write_Date(digit[j]); Write_Date(digit[k]); delay1ms(50) ; } /************显示温度小数部分*********************/ void Display_Decimal(unsigned char x) { Write_Address(0x4A); delay1ms(5); Write_Date(digit[x]); delay1ms(50); } void displayovert(void) { unsigned char i; Write_com(0x01); delay1ms(10); Write_Address(0x03); delay1ms(10); Write_Date('W'); Write_Date('A'); Write_Date('R'); Write_Date('N'); Write_Date('I'); Write_Date('N'); Write_Date('G'); Write_Date('!'); Write_Address(0x40); while(overtemperature[i]!='\0') { Write_Date(overtemperature[i]); i ; delay1ms(10); } } /*******************温度主函数********************/ void Temperature(void) { unsigned char i; delay1ms(5); if(IntDS18B20()!=0) Display_Error(); else { delay1ms(1); Write_com(0x01); delay1ms(5); Display_Explain(); for(length=50;length>0;length--) { for(i=0;i<6;i ) { flag=0; ReadyreadDS18B20(); TL=ReadDS18B20(); TH=ReadDS18B20(); if((TH&0XF8)!=0X00) { flag=1; TL=~TL; TH=~TH; TL =1; if(TL>255) TH =1; TN=TH*16 TL/16; TD=(TL%16)*10/16; } TN=TH*16 TL/16; TD=(TL%16)*10/16; Display_Integer(TN); Display_Decimal(TD); delay1ms(10); } if(tempswitch==1) { if(TN>=Maxtemp) { Write_Address(0x03); delay1ms(5); displayovert(); while(1) { baojing(1); if(CANL==0) { Write_com(0x01); delay1ms(5); break; } } } } if(CANL==0) break; } } } void tempset(void) { if(ADD==0) { delay1ms(10); if(ADD==0) { Maxtemp ; while(ADD==0); } } if(RED==0) { delay1ms(10); if(RED==0) { Maxtemp--; while(RED==0); } } } void Maxtempset(void) //高温报警设置 { Write_com(0x01); delay1ms(10); Write_Address(0x03); delay1ms(10); Write_Date('T'); Write_Date('E'); Write_Date('M'); Write_Date('P'); Write_Address(0x09); Write_Date('S'); Write_Date('E'); Write_Date('T'); Write_Address(0x40); Write_Date('M'); Write_Date('A'); Write_Date('X'); Write_Date(':'); while(1) { if(SET==0) { delay1ms(20); if(SET==0) { Write_Address(0x4e); Write_com(0x0f); while(1) { if(ADD==0) { delay1ms(20); if(ADD==0) { Write_Address(0x4b); delay1ms(5); Write_Date('O'); Write_Date('N'); Write_Date(' '); tempswitch=1; } } if(RED==0) { delay1ms(20); if(RED==0) { Write_Address(0x4b); Write_Date('O'); Write_Date('F'); Write_Date('F'); tempswitch=0; } } if(CANL==0) { delay1ms(500); break; } } } } if(tempswitch==1) { Write_Address(0x4b); Write_Date('O'); Write_Date('N'); Write_Date(' '); tempset(); displaymaxt(Maxtemp); if(CANL==0) { Write_com(0x01); displaymainpart(); break; } } if(tempswitch==0) { Write_com(0x0c); Write_Address(0x4b); Write_Date('O'); Write_Date('F'); Write_Date('F'); } if(CANL==0) { Write_com(0x01); displaymainpart(); break; } } } 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(CANL==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(CANL==0) { Write_com(0x01); delay1ms(5); displaymainpart(); break; } } } } if(CANL==0) { Write_Address(0x40); Write_Date(' '); Write_com(0x0c); break; } } } } } /***************主函数**********************/ void main() { IE=0X82; //打开定时中断 TMOD=0X01; //选择定时器0工作在方式1 TR0=0; //启动定时器0 IntDS1302(); //初始化DS1302 delay1ms(1); Lcd_Int(); //1602液晶初始化 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(CANL==0) { Write_com(0x01); delay1ms(5); displaymainpart(); break; } } } } } }