单片机课程设计
else{WRITE_LCD1602_DAT(LCD1602_Table[Tim_red_tab[4]/10]);WRITE_LCD1602_DAT(LCD1602_Table[Tim_red_tab[4]]);}
WRITE_LCD1602_COM(0x80+0x40+3); //指定显示字符的地址
if(i<5&&SET_TIM_FLAG==6){WRITE_LCD1602_DAT(' ');WRITE_LCD1602_DAT(' ');}
else{WRITE_LCD1602_DAT(LCD1602_Table[Tim_red_tab[5]/10]);WRITE_LCD1602_DAT(LCD1602_Table[Tim_red_tab[5]]);}
WRITE_LCD1602_COM(0x80+0x40+6); //指定显示字符的地址
if(i<5&&SET_TIM_FLAG==7){WRITE_LCD1602_DAT(' ');WRITE_LCD1602_DAT(' ');}
else{WRITE_LCD1602_DAT(LCD1602_Table[Tim_red_tab[6]/10]);WRITE_LCD1602_DAT(LCD1602_Table[Tim_red_tab[6]]);} }
WRITE_LCD1602_COM(0x80+0X40+9);
WRITE_LCD1602_DAT(LCD1602_Table[U8T_data_H/10]); WRITE_LCD1602_DAT(LCD1602_Table[U8T_data_H]); WRITE_LCD1602_DAT(0xdf);
WRITE_LCD1602_COM(0x80+0X40+13);
WRITE_LCD1602_DAT(LCD1602_Table[U8RH_data_H/10]); WRITE_LCD1602_DAT(LCD1602_Table[U8RH_data_H]);
break; case 5:
WRITE_LCD1602_DAT('F'); WRITE_LCD1602_DAT('I'); WRITE_LCD1602_DAT('R'); break; case 6:
WRITE_LCD1602_DAT('S'); WRITE_LCD1602_DAT('A'); WRITE_LCD1602_DAT('T'); break; default: break; } }
WRITE_LCD1602_COM(0x80+0x40); //指定显示字符的地址
if(i<5&&SET_TIM_FLAG==5){WRITE_LCD1602_DAT(' ');WRITE_LCD1602_DAT(' ');}
}
/****************************************** 按键子程序
33
单片机课程设计
******************************************/ void keycsan(void)
{ static uchar KEY_TIM_SETJ,KEY_ADDJ,KEY_MINJ,KEY_TIMING_SETJ; uchar KEY_NUM=KEY_NO_NUM; uchar i; static uchar TIM_DAT; if(IrOK==1) //解码成功 { Receive_dat=Im[2]; switch(Receive_dat) { case 0x0c: KEY_NUM=KEY_TIM_SET_NUM; break; case 0x18: KEY_NUM=KEY_ADD_NUM; break; case 0x5e: KEY_NUM=KEY_MIN_NUM; break; case 0x08: KEY_NUM=KEY_TIMING_SET_NUM; break; default: break; } IrOK=0; } if(~KEY_TIM_SET&KEY_TIM_SETJ) KEY_NUM=KEY_TIM_SET_NUM; KEY_TIM_SETJ=~(~KEY_TIM_SET); if(~KEY_ADD&KEY_ADDJ) KEY_NUM=KEY_ADD_NUM; KEY_ADDJ=~(~KEY_ADD); if(~KEY_MIN&KEY_MINJ) KEY_NUM=KEY_MIN_NUM; KEY_MINJ=~(~KEY_MIN); if(~KEY_TIMING_SET&KEY_TIMING_SETJ) KEY_NUM=KEY_TIMING_SET_NUM; KEY_TIMING_SETJ=~(~KEY_TIMING_SET); switch(KEY_NUM) { case KEY_TIM_SET_NUM: //检测到时间设置按键按下 if(SET_TIMING_FLAG==0) { SET_TIM_FLAG++; if(SET_TIM_FLAG>7) { SET_TIM_FLAG=0; WRITE_DS1302(DS1302_WRITE_PROTECT,DS1302_WRITE_PROTECT_NO); 34
//
单片机课程设计
禁止写保护
WRITE_DS1302(WRITE_DS1302_SECOND,Tim_red_tab[6]); //秒 WRITE_DS1302(WRITE_DS1302_MINUTE,Tim_red_tab[5]); //分 WRITE_DS1302(WRITE_DS1302_HOUR,Tim_red_tab[4]); //小时 WRITE_DS1302(WRITE_DS1302_DAY,Tim_red_tab[2]); //日期 WRITE_DS1302(WRITE_DS1302_MONTH,Tim_red_tab[1]); //月份 WRITE_DS1302(WRITE_DS1302_WEEK,Tim_red_tab[3]); //星期 WRITE_DS1302(WRITE_DS1302_YEAR,Tim_red_tab[0]); //年
WRITE_DS1302(DS1302_WRITE_PROTECT,DS1302_WRITE_PROTECT_OFF); //允许写保护
}
switch(SET_TIM_FLAG)
{ case 1:TIM_DAT=READ_DS1302(READ_DS1302_YEAR); break;
case 2:TIM_DAT=READ_DS1302(READ_DS1302_MONTH); break; case 3:TIM_DAT=READ_DS1302(READ_DS1302_DAY); break; case 4:TIM_DAT=READ_DS1302(READ_DS1302_WEEK); break; case 5:TIM_DAT=READ_DS1302(READ_DS1302_HOUR); break; case 6:TIM_DAT=READ_DS1302(READ_DS1302_MINUTE); break; case 7:TIM_DAT=READ_DS1302(READ_DS1302_SECOND); break; default: break; } } break;
case KEY_ADD_NUM:
switch(SET_TIM_FLAG) {case 1:
if(TIM_DAT<99) TIM_DAT++;
Tim_red_tab[0]=TIM_DAT; break;
case 2:
if(TIM_DAT<12) TIM_DAT++;
Tim_red_tab[1]=TIM_DAT; break;
case 3:
if(TIM_DAT<31) TIM_DAT++;
Tim_red_tab[2]=TIM_DAT; break; case 4:
if(TIM_DAT<6) TIM_DAT++;
35
单片机课程设计
Tim_red_tab[3]=TIM_DAT; break;
case 5:
if(TIM_DAT<23) TIM_DAT++;
Tim_red_tab[4]=TIM_DAT; break;
case 6:
if(TIM_DAT<59) TIM_DAT++;
Tim_red_tab[5]=TIM_DAT; break; case 7:
if(TIM_DAT<59) TIM_DAT++;
Tim_red_tab[6]=TIM_DAT; break;
default:
switch(SET_TIMING_FLAG) {
case 1:
if(Timing_hour<23) Timing_hour++; break;
case 2: if(Timing_min<59) Timing_min++; break; case 3:
if(Timing_on>0) Timing_on=0; else
Timing_on=1; break; } break; } break;
case KEY_MIN_NUM:
switch(SET_TIM_FLAG) {
case 1:
if(TIM_DAT>0) TIM_DAT--;
Tim_red_tab[0]=TIM_DAT;
36
单片机课程设计
break;
case 2:
if(TIM_DAT>1) TIM_DAT--;
Tim_red_tab[1]=TIM_DAT; break;
case 3:
if(TIM_DAT>1) TIM_DAT--;
Tim_red_tab[2]=TIM_DAT; break;
case 4:
if(TIM_DAT>0) TIM_DAT--;
Tim_red_tab[3]=TIM_DAT; break; case 5:
if(TIM_DAT>0) TIM_DAT--;
Tim_red_tab[4]=TIM_DAT; break;
case 6:
if(TIM_DAT>0) TIM_DAT--;
Tim_red_tab[5]=TIM_DAT; break; case 7:
if(TIM_DAT>0) TIM_DAT--;
Tim_red_tab[6]=TIM_DAT; break;
default:
switch(SET_TIMING_FLAG) {
case 1:
if(Timing_hour>0) Timing_hour--; break;
case 2: if(Timing_min>0) Timing_min--; break; case 3:
37