基于单片机的万年历设计 下载本文

}

}

}

case 7: year++;

if(year==100)

year=0;

writenyr(0,year); writecom(0x80+1); break;

if(kdown==0) {

delay(5); if(kdown==0) {

while(!kdown); di();

switch(kmenunum) //根据功能键被按次数调节相应数值 . {

case 1: second--;

if(second==-1)

second=59;

writetime(9,second);

编辑版word

writecom(0x80+0x40+10); break;

case 2: minute--;

case 3: hour--;

case 4: week--;

case 5: day--;

if(minute==-1)

minute=59;

writetime(6,minute); writecom(0x80+0x40+7); break;

if(hour==-1)

hour=23;

writetime(3,hour); writecom(0x80+0x40+4); break;

if(week==0)

week=7;

writeweek(week); writecom(0x80+11); break;

if(day==0)

编辑版word

}

}

}

}

day=31;

writenyr(6,day); writecom(0x80+7); break;

case 6: month--;

if(month==0)

month=12;

writenyr(3,month); writecom(0x80+4); break;

case 7: year--;

if(year==-1)

year=99;

writenyr(0,year); writecom(0x80+1); break;

if(kalarm==0) // 检测闹钟调节键是否按下,此条if 语句与 if(kmenunum!=0) {

// 在同一个层次。

编辑版word

delay(5); if(kalarm==0) {

flagseta=~flagseta; while(!kalarm); di();

if(flagseta==0) //此时,退出闹钟设置,保存各相关数值。 {

flagset=0; //清除时间设置标志,在 if(kalarm==0) 这个 if 语句

writecom(0x80+0x40)中,不用 flagset=1 这条语句来设置

//flagset 标志位,因为如果进行了闹钟时间的设置就会

执行前面 if(kmenunum==0) 语句中的 flagset=1 这条语句。

writedata(' '); // 清除液晶上的 “ Ri闹钟调节标志。 ” writedata(' ');

writecom(0x0c); //取消光标闪烁 dswrite(0x8e,0x00); /* 允许写操作 */

dswrite(writealarmsecond,second/10*16+second);

//

DS1302 中保存闹钟的时分秒值。

}

dswrite(writealarmminute,minute/10*16+minute); dswrite(writealarmhour,hour/10*16+hour); dswrite(0x8e,0x80); /* 禁止写操作 */

编辑版word