for(i=2000;i if(leep_year(i))day+=366; else day+=365; } for(j=1;j if(j==1||j==3||j==5||j==7||j==8||j==10||j==12) day+=31; if(j==4||j==6||j==9||j==11) day+=30; if(flag_year_leap&&j==2)day+=29; if((!flag_year_leap)&&j==2)day+=28; } day+=time.mday; mweek=day%7; switch(mweek) { case 0:time.week=5;break; case 1:time.week=6;break; case 2:time.week=7;break; case 3:time.week=1;break; case 4:time.week=2;break; case 5:time.week=3;break; case 6:time.week=4;break; } time_ch.ch_week[0]=time.week+0x30; } //月份的进位处理 void time_carry_mon_year(void) { flag_year_leap=leep_year(time.year);//判断闰年 if(time.mday>=30) { if(time.month==1||time.month==3||time.month==5||time.month==7\\ ||time.month==8||time.month==10||time.month==12) //天数为31天的月,1、3、5、7、8、10、12 { if(time.mday==32) {time.mday=1;time.month++;} } if(time.month==4||time.month==6||time.month==9||time.month==11) 11 { if(time.month==31) {time.mday=1;time.month++;} } tran_ch(); } if(time.month==2&&time.mday>=28) { if(flag_year_leap&&(time.mday==30)) { time.mday=1;time.month++;} if((!flag_year_leap)&&(time.mday==29)) { time.mday=1;time.month++;} tran_ch(); } if(time.month==13) {time.month=1;time.year++;tran_ch();}//年的进位 } //时间的进位 void time_carry(void) { if(time.second==60) {time.minute++;time.second=0;} if(time.minute==60) {time.hour++ ;time.minute=0;} if(time.hour ==24) {time.mday++ ;time.hour=0 ;time_carry_mon_year();de_week();} } //屏幕的显示函数 void dsp(void) { if(flag_en_key==0)//非设置模式下的显示 { tran_ch(); wcmd(0x02);//return cursor wstring(time_ch.ch_hour,2); wdata(':'); wstring(time_ch.ch_minute,2); wdata(':'); wstring(time_ch.ch_second,2); wstring(\ \ wcmd(0x80+0x40); wstring(\ \ wstring(time_ch.ch_year,4); 12 wdata('-'); wstring(time_ch.ch_month,2); wdata('-'); wstring(time_ch.ch_mday,2); wstring(\ wdata(time_ch.ch_week[0]); } if(flag_en_key==1)//设置模式下的显示 { if(flag_set<=2) { tran_ch(); wcmd(0x02);//return cursor wstring(time_ch.ch_year,4); wdata('-'); wstring(time_ch.ch_month,2); wdata('-'); wstring(time_ch.ch_mday,2); } if(flag_set>2) { tran_ch(); wcmd(0x02);//return cursor wstring(time_ch.ch_hour,2); wdata(':'); wstring(time_ch.ch_minute,2); wdata(':'); wstring(time_ch.ch_second,2); wstring(\ \ } } } //显示字符串 void dsp_string(char *pt) { char i=0; wcmd(0x80+0x40);//将光标调整至第二行 while(pt[i]) { wdata(pt[i]); i++; } } //退出按键模式 13 void exit_key(void) { char i; flag_en_key=0; flag_en_ok=0; flag_ok=0; flag_mean=0; flag_set=0; wcmd(0x80+0x40); for(i=0;i<=16;i++) wdata('\\0'); } //按键的处理 int solve_key(void) { //if(key_mean==0); if(key_ok==0)//确定或退出 { if(flag_ok) { exit_key(); time_carry_mon_year(); de_week(); return 0; } else flag_ok=1; } if(key_set ==0) { if(flag_ok==0)//时分秒的选择 { flag_set++; if(flag_set==6)flag_set=0; switch(flag_set) { case 0:dsp_string(string_year);break; case 1:dsp_string(string_month);break; case 2:dsp_string(string_mday);break; case 3:dsp_string(string_hour);break; case 4:dsp_string(string_minute);break; case 5:dsp_string(string_second);break; } } if(flag_ok==1)//时分秒的设置 14 { switch(flag_set) { case 0:{time.year++ ;if(time.year==10000)time.year=2000;break;} case 1:{time.month++ ;time_carry_mon_year();break;} case 2:{time.mday++ ;time_carry_mon_year();break;} case 3:{time.hour++ ;if(time.hour==24)time.hour=0;break;} case 4:{time.minute++;if(time.minute==60)time.minute=0;break;} case 5:{time.second++;if(time.second==60)time.second=0;break;} } } } if(flag_ok==1)//是否更改数据 是显示 OK { wcmd(0x80+0x4e); wdata('O'); wdata('K'); } else { wcmd(0x80+0x4e); wdata('\\0'); wdata('?'); } return 0; } //MCU的秒中断函数与显示函数的执行 void INT_sec() interrupt 1 using 0 { if(flag_sec==20)//flag_sec==20代表1s { flag_sec=0; TH0=0x3c; TL0=0xb0+2;//定时器再次进入0.05s的中断 time.second++; flag_en_ok=0;//去掉key_ok的特殊优先权 time_carry(); dsp(); } else { flag_sec++; TH0=0X3C; TL0=0XB0+2;//定时器再次进入0.05s的中断 15 否显示 ?
单片机电子钟实训报告(3)
2019-02-14 23:46
单片机电子钟实训报告(3).doc
将本文的Word文档下载到电脑
下载失败或者文档不完整,请联系客服人员解决!