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

if(flagsseta==1) // 检测是否在进行事件提醒设置。

if(kmenunum==8) kmenunum=5; // 因为进行事件提醒设置时,只

调节年月日,所以, kmenunum 只能等于 5,6,7

flagset=1; // 设置标志位,表示在进行各种时间设置。 while(!kmenu); di();

switch(kmenunum) //定位光标闪烁点。 {

case 1: writecom(0x80+0x40+10); // 秒闪烁。

writecom(0x0f); // 开光标闪烁。 break;

case 2: writecom(0x80+0x40+7); // 分闪烁。

break;

case 3: writecom(0x80+0x40+4); // 时闪烁。

break;

case 4: writecom(0x80+10); //星期闪烁 .

break;

case 5: writecom(0x80+7); //日闪烁 .

break;

case 6: writecom(0x80+4); //月闪烁 .

break;

case 7: writecom(0x80+1); //年闪烁 .

编辑版word

}

}

}

break;

case 8: kmenunum=0;

writecom(0x0c); // 取消光标闪烁。 flagset=0; //取消时间调节标志。 dswrite(0x8e,0x00); /* 允许写操作 */ dswrite(0x80,second/10*16+second);

dswrite(0x82,minute/10*16+minute);

dswrite(0x84,hour/10*16+hour);

dswrite(0x8a,week/10*16+week); dswrite(0x86,day/10*16+day); dswrite(0x88,month/10*16+month); dswrite(0x8c,year/10*16+year); dswrite(0x8e,0x80); /* 禁止写操作 */ break;

if(kmenunum!=0) //只有当功能键按下时 ,才检测增大 ,减小键 . {

if(kup==0) {

delay(5);

编辑版word

晶显示

标复位 .

if(kup==0) { while(!kup); di();

switch(kmenunum) //根据功能键被按下的次数,调节相应数值。 { case 1: second++; if(second==60)

second=0;

writetime(9,second);

writecom(0x80+0x40+10); // 因为,上面送液

break; //一次 ,光标后移一位 ,所以要将光

case 2: minute++; if(minute==60)

minute=0;

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

break;

case 3: hour++;

if(hour==24)

编辑版word

hour=0;

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

case 4: week++;

if(week==8)

week=1;

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

case 5: day++;

if(day==32)

day=1;

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

case 6: month++;

if(month==13)

month=1;

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

编辑版word