break; case 2:fen++; if(fen==60) fen=0; write_sfm(0x03,fen); temp=(fen)/10*16+(fen); write_byte(DS3231_MINUTE,temp); write_1602com(er+3); break; case 3:shi++; if(shi==24) shi=0; write_sfm(0,shi); temp=(shi)/10*16+(shi); write_byte(DS3231_HOUR,temp); write_1602com(er+0); break; case 4:week++; if(week==8) week=0; write_week(week); write_byte(DS3231_WEEK,week); //修改星期 write_1602com(yh+0x0d); break; case 5:ri++; if(ri==31) ri=0; write_nyr(9,ri); temp=(ri)/10*16+(ri); write_byte(DS3231_DAY,temp); //修改日 write_1602com(yh+9); break; case 6:yue++; if(yue==13) yue=0; write_nyr(6,yue); temp=(yue)/10*16+(yue); write_byte(DS3231_MONTH,temp); //修改月 write_1602com(yh+6); break; case 7:nian++; if(nian==100) nian=0; write_nyr(3,nian);
} }
temp=(nian)/10*16+(nian);
write_byte(DS3231_YEAR,temp); //修改年 write_1602com(yh+3); break;
}
if(key3==0) {
delayus(5000); if(key3==0) {
while(!key3); switch(key1n) { case 1:miao--; if(miao==-1) miao=59;
write_sfm(6,miao);//写入新的秒数 temp=(miao)/10*16+(miao);
write_byte(DS3231_SECOND,temp); //修改秒 write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 break; case 2:fen--; if(fen==-1) fen=59; write_sfm(3,fen); temp=(fen)/10*16+(fen); write_byte(DS3231_MINUTE,temp); //修改分 write_1602com(er+3); break; case 3:shi--; if(shi==-1) shi=23; write_sfm(0,shi); temp=(shi)/10*16+(shi); write_byte(DS3231_HOUR,temp); //修改时 write_1602com(er+0);
} } } }
break; case 4:week--; if(week==-1) week=7; write_week(week);
write_byte(DS3231_WEEK,week); //修改星期 write_1602com(yh+0x0d); break; case 5:ri--; if(ri==-1) ri=30; write_nyr(9,ri); temp=(ri)/10*16+(ri); write_byte(DS3231_DAY,temp); //修改日 write_1602com(yh+9); break; case 6:yue--; if(yue==-1) yue=12; write_nyr(6,yue); temp=(yue)/10*16+(yue); write_byte(DS3231_MONTH,temp); //修改月 write_1602com(yh+6); break; case 7:nian--; if(nian==-1) nian=99; write_nyr(3,nian); temp=(nian)/10*16+(nian); write_byte(DS3231_YEAR,temp); //修改年 write_1602com(yh+3); break;
}
void main() {
uint ii = 0;
lcd_init();
// RESET=0x1; //DS3231复位操作,正常操作下不需要每次都复位
TMOD=0x11; // 定时器0, 1工作模式1, 16位定时方式 TH0=0; TL0=0; EA=1; ET0=1;
TCON=0x01;
IE=0x82; // 使能timer0,1 中断
TR0=1;
// ModifyTime(17,10,6,21,50,20,5); //初始化,年月日时分秒星期(24小时制) //这个函数不能用,因为如果使用这个函数,会导致断电后重新打开就重置了时间。
while(1) { keyscan();
} }
void timer0() interrupt 1 { //TH0=(65536-60000)/256; //TL0=(65536-60000)%6; miao = BCD_Decimal(read_random(DS3231_SECOND)); fen = BCD_Decimal(read_random(DS3231_MINUTE)); shi = BCD_Decimal(read_random(DS3231_HOUR)); ri = BCD_Decimal(read_random(DS3231_DAY)); yue = BCD_Decimal(read_random(DS3231_MONTH)); nian=BCD_Decimal(read_random(DS3231_YEAR));
week=BCD_Decimal(read_random(DS3231_WEEK));
temp1=BCD_Decimal(read_random(DS3231_TEMPERATUREH)); //温度高4位 temp2=BCD_Decimal(read_random(DS3231_TEMPERATUREL)); //温度低4位 keyscan(); temp2=(temp2>>6)*25; write_sfm(6,miao); //write_1602com(er+0x0a); //write_1602dat(':'); write_sfm(3,fen); //write_1602com(er+0x07); //write_1602dat(':'); write_sfm(0,shi); write_nyr(3,nian); write_nyr(9,ri); write_nyr(6,yue); write_week(week);
write_sfm(9,temp1); write_sfm(12,temp2); }