if(++date.year==100) date.year=0; update_datestr(); } break; default: break; }
update_dispbuf(CurrentMode); }
void Bkey(void) /*对当前设置位进行减一操作,如果设置秒分,则给秒位清零,类比Akey()函数*/ {
if(!IsSet) return; switch (SetSelect) {
case SECOND:if(CurrentMode==CLOCK) { clock.s=0; update_clockstr(); }
if(CurrentMode==ALART) {
Alart_EN=!Alart_EN;
update_alartstr(); }
if(CurrentMode==DATE) {
if(--date.day==0x00)
date.day=getmonthdays(date.year,date.month); update_datestr(); } break;
case MINUTE:if(CurrentMode==CLOCK) {
if(--clock.m==0xff) clock.m=59; update_clockstr(); }
if(CurrentMode==ALART) {
if(--alart.m==0xff) alart.m=59; update_alartstr(); }
if(CurrentMode==DATE) {
if(--date.month==0x00) date.month=12;
update_datestr(); } break;
case HOUR: if(CurrentMode==CLOCK) {
if(--clock.h==0xff) clock.h=23; update_clockstr(); }
if(CurrentMode==ALART) {
if(--alart.h==0xff) alart.h=23; update_alartstr(); }
if(CurrentMode==DATE) {
if(--date.year==0xffff) date.year=99; update_datestr(); } break; default: break; }
update_dispbuf(CurrentMode);
}
void Ckey(void) /*正常走时模式和设置模式的切换*/ {
if(CurrentMode==TIMER) {
TR1=0; /*初始化定时器1设置,停止秒表记时*/ TH1=6; TL1=6;
timer.ms=0; /*初始化秒表数组*/ timer.s=0; timer.m=0; update_timerstr(); }else {
if(IsSet==0) /*在非秒表模式下,第一次按下C键进入设置模式,设置时位*/ {
IsSet=1; /*置位标志位,进入设置模式 */ SetSelect=HOUR; return;
} /*第二次按C键设置分位,第三次按键设置秒位,第四次按键完成退出设置*/
if(SetSelect==0) /*按到第四次,即设置完秒位后,将标志位IsSet置0,完成设置*/ {
IsSet=0; /*复位标志位,进入正常走时模式*/ return; }
if(SetSelect>0) SetSelect--; /*设置位的标志变量SetSelect=0:时位 1:分位 2:秒位*/ } }
void Dkey(void) /*工作状态切换:时钟、闹钟、日期、秒表*/ {
if(CurrentMode==CLOCK) /*切换至闹钟,同时开关闹钟*/ { CurrentMode=ALART; Alart_EN=!Alart_EN; update_alartstr(); return; }
if(CurrentMode==ALART) /*切换至日期*/ { CurrentMode=DATE; return;
}
if(CurrentMode==DATE) /*切换至秒表,同时关闭设置模式*/ {
CurrentMode=TIMER; IsSet=0; return; }
if(CurrentMode==TIMER) /*切换至时钟*/ {
CurrentMode=CLOCK; return; } }