设计的这个表不动是怎么回事,请告知
#include <REGX52.H>
#include "LCD1602.h"
#include "DS1302.h"
#include "Key.h"
#include "Timer0.h"
#include "Delay.h"
#include "MatrixKey.h"
unsigned char Min,Sec,Ms;
unsigned char SaveMin[6],SaveSec[6],SaveMs[6],SaveCount,CheckCount;
unsigned int CYear=2022,CMonth=11,CDay=27,CHour=23,CMin=58,CSec=30,CFlag;
unsigned char CSettmp,CSettmp2,CSetFlag;
unsigned char DMin,DSec,DMs,DownFlag,Dtmp;
unsigned char KeyNum,Keys,CountFlag;
void StartMemu();
void TimeMode();
void CheckMode();
void CalendarMode();
void CountdownMode();
void CSettingMode();
void DownSetting();
void main()
{
LCD_Init();
Timer0_Init();
while(1) StartMemu();
}
void StartMemu()
{
LCD_ShowString(1,1,"Start Work ");
while(1)
{
KeyNum=MatrixKey();
if(KeyNum==1) CalendarMode();
if(KeyNum==2) TimeMode();
if(KeyNum==3) CountdownMode();
}
}
void CalendarMode()
{
CFlag=1;
CSetFlag=0;
LCD_ShowString(1,1," - - ");
LCD_ShowString(2,1," : : ");
while(1){
LCD_ShowNum(1,1,CYear,4);
LCD_ShowNum(1,6,CMonth,2);
LCD_ShowNum(1,9,CDay,2);
LCD_ShowNum(2,1,CHour,2);
LCD_ShowNum(2,4,CMin,2);
LCD_ShowNum(2,7,CSec,2);
KeyNum=MatrixKey();
if(KeyNum==1) TimeMode();
if(KeyNum==5) CountdownMode();
if(KeyNum==6) CheckMode();
if(KeyNum==7) CSettingMode();
}
}
void CSettingMode()
{
CFlag=0;
CSetFlag=1;
CSettmp=1;
LCD_ShowString(2,10,"Setting");
while(1){
LCD_ShowNum(1,16,CSettmp,1);
LCD_ShowNum(1,1,CYear,4);
LCD_ShowNum(1,6,CMonth,2);
LCD_ShowNum(1,9,CDay,2);
LCD_ShowNum(2,1,CHour,2);
LCD_ShowNum(2,4,CMin,2);
LCD_ShowNum(2,7,CSec,2);
KeyNum=MatrixKey();
if(KeyNum==1) CalendarMode();
if(KeyNum==5){
if(CSettmp==1) CYear++;
if(CSettmp==2){ CMonth++; if(CMonth==13) CMonth=1; }
if(CSettmp==3){
CDay++;
if((CMonth==1|CMonth==3|CMonth==5|CMonth==7|CMonth==8|CMonth==10|CMonth==12)&&CDay==32) CDay=1;
if((CMonth==4|CMonth==6|CMonth==9|CMonth==11)&&CDay==31) CDay=1;
if(((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==30) CDay=1;
if(!((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==29) CDay=1;
}
if(CSettmp==4) CHour=(CHour+1)%24;
if(CSettmp==5) CMin=(CMin+1)%60;
if(CSettmp==6) CSec=(CSec+1)%60;
}
if(KeyNum==6){
if(CSettmp==1&&CYear) CYear--;
if(CSettmp==2){ CMonth--; if(CMonth==0) CMonth=12; }
if(CSettmp==3){
CDay--;
if((CMonth==1|CMonth==3|CMonth==5|CMonth==7|CMonth==8|CMonth==10|CMonth==12)&&CDay==0) CDay=31;
if((CMonth==4|CMonth==6|CMonth==9|CMonth==11)&&CDay==0) CDay=30;
if(((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==0) CDay=29;
if(!((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==0) CDay=28;
}
if(CSettmp==4){ CHour--; if(CHour==-1) CHour=23; }
if(CSettmp==5){ CMin--; if(CMin==-1) CMin=59; }
if(CSettmp==6){ CSec--; if(CSec==-1) CSec=59; }
}
if(KeyNum==7){ CSettmp++; CSettmp2=0; if(CSettmp==7) CSettmp=1; }
}
}
void TimeMode()
{
//CountFlag=1;
LCD_ShowString(1,1," : : S: /5");
LCD_ShowString(2,1,"Now Timing ");
while(1){
LCD_ShowNum(1,1,Min,2);
LCD_ShowNum(1,4,Sec,2);
LCD_ShowNum(1,7,Ms,2);
LCD_ShowNum(1,14,SaveCount,1);
KeyNum=MatrixKey();
if(KeyNum==1) CheckMode();
if(KeyNum==5){ Min=Sec=Ms=0; CountFlag=0; }
if(KeyNum==6) CountFlag^=1;
if(KeyNum==7&&SaveCount<5){
++SaveCount;
SaveMin[SaveCount]=Min;
SaveSec[SaveCount]=Sec;
SaveMs[SaveCount]=Ms;
}
}
}
void CountdownMode(){
LCD_ShowString(1,1," : : S: /5");
LCD_ShowString(2,1,"Now Downing ");
while(1){
LCD_ShowNum(1,1,DMin,2);
LCD_ShowNum(1,4,DSec,2);
LCD_ShowNum(1,7,DMs,2);
LCD_ShowNum(1,14,SaveCount,1);
if(DownFlag==1&&DMin==0&&DSec==0&&DMs==0){ DownFlag=0; beep=0; }
KeyNum=MatrixKey();
if(KeyNum==1) CheckMode();
if(KeyNum==5){
DMin=DSec=DMs=0; DownFlag=0; beep=1;
}
if(KeyNum==6) DownSetting();
if(KeyNum==7&&SaveCount<5){
++SaveCount;
SaveMin[SaveCount]=DMin;
SaveSec[SaveCount]=DSec;
SaveMs[SaveCount]=DMs;
}
}
}
void DownSetting()
{
beep=1;
DownFlag=0;
Dtmp=1;
LCD_ShowString(1,1," : : ");
LCD_ShowString(2,1,"Now DownSetting ");
while(1){
LCD_ShowNum(1,1,DMin,2);
LCD_ShowNum(1,4,DSec,2);
LCD_ShowNum(1,7,DMs,2);
LCD_ShowNum(1,16,Dtmp,1);
KeyNum=MatrixKey();
if(KeyNum==1){ DownFlag=1; CountdownMode(); }
if(KeyNum==5){
if(Dtmp==1){ DMin++; if(DMin>99) DMin=0; }
if(Dtmp==2){ DSec++; if(DSec>59) DSec=0; }
if(Dtmp==3){ DMs++; if(DMs>99) DMs=0; }
}
if(KeyNum==6){
if(Dtmp==1){ DMin--; if(DMin==-1) DMin=99; }
if(Dtmp==2){ DSec--; if(DSec==-1) DSec=59; }
if(Dtmp==3){ DMs--; if(DMs==-1) DMs=99; }
}
if(KeyNum==7){ Dtmp++; if(Dtmp>3) Dtmp=1; }
}
}
void CheckMode(){
LCD_ShowString(1,1," : : C: / ");
LCD_ShowString(2,1,"Now Checking ");
if(SaveCount) CheckCount=1; else CheckCount=0;
while(1){
LCD_ShowNum(1,1,SaveMin[CheckCount],2);
LCD_ShowNum(1,4,SaveSec[CheckCount],2);
LCD_ShowNum(1,7,SaveMs[CheckCount],2);
LCD_ShowNum(1,14,CheckCount,1);
LCD_ShowNum(1,16,SaveCount,1);
KeyNum=MatrixKey();
if(KeyNum==1) CalendarMode();
if(KeyNum==5&&CheckCount>1&&SaveCount!=0) --CheckCount;
if(KeyNum==6&&CheckCount<SaveCount) ++CheckCount;
if(KeyNum==7){
SaveCount=0;
CheckCount=0;
}
}
}
void Timer0_Routine() interrupt 1{
static unsigned int T0Count;
static unsigned int CCount;
static unsigned int DownCount;
TL0=0x66;
TH0=0xFC;
if(DownFlag==1)
{
DownCount++;
if(DownCount>=10)
{
DownCount=0;
if(DMs) DMs--;
if(DMs==0&&(DSec||DMin))
{
DMs=99;
if(DSec>0) --DSec;
else if(DSec==0&&DMin)
{
DSec=59;
DMin--;
}
}
}
}
if(CountFlag==1){
T0Count++;
if(T0Count>=10){
T0Count=0;
Ms++;
if(Ms>99){
Ms=0;
Sec++;
if(Sec>59){
Sec=0;
Min++;
if(Min>99)
Min=0;
}
}
}
}
if(CFlag==1){
CCount++;
if(CCount>=1000){
CCount=0;
CSec++;
if(CSec>59){
CSec=0;
CMin++;
if(CMin>59){
CMin=0;
CHour++;
if(CHour>23){
CHour=0;
CDay++;
if(CMonth==12&&CDay==32){
CMonth=1; CDay=1;
CYear++;
}
if((CMonth==1|CMonth==3|CMonth==5|CMonth==7|CMonth==8|CMonth==10)&&CDay==32){
CDay=1;
CMonth++;
}
if((CMonth==4|CMonth==6|CMonth==9|CMonth==11)&&CDay==31){
CDay=1;
CMonth++;
}
if(((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==30){
CDay=1;
CMonth++;
}
if(!((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==29){
CDay=1;
CMonth++;
}
}
}
}
}
}
}