某单片机+ds1302+MAX7219组成的16位数码管万年历,其按键程序如下:
uc code dxy[]={0,1,2,1,0,1,0,1,1,0,1,0,1};//定义大小月的数组
/*****按键函数*****/
void key()
{
ui out_set=0,clear_0=0;
out_clear=0;
if(s1==0) //设置键
{
delay(5);
if(s1==0)
{
while((s1==0)&&(set!=0))
{
display();
out_set++;
if(out_set==300)
{
set=0;
out_set=0;
tt=0;
fmq=0;
delay(20);
fmq=1;
delay(100);
fmq=0;
delay(20);
fmq=1;
goto x;
}
}
set++;
if(set<8)
{
out_set=0;
fmq=0;
delay(10);
fmq=1;
}
else
{
set=0;
tt=1;
fmq=0;
delay(200);
fmq=1;
}
x: while(!s1)
{
display();
sec_led();
}
}
}
if(set!=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
fmq=0;
delay(10);
fmq=1;
if(set==1)
{
year++;
if(year==100)
year=0;
if((dxy[mon]==2)&&(year%4!=0)&&(day>28)==1)//当平年二月day大于28时 此句何用?
day=28;//此句何用?
}
if(set==2)
{
mon++;
if(mon==13)
mon=1;
if((dxy[mon]==0)&&(day>30)==1) //当小月day大于30时//此句何用?
day=30;//此句何用?
if((dxy[mon]==2)&&(year%4==0)&&(day>28)==1)//当平年二月day大于28时//此句何用?
day=28;//此句何用?
if((dxy[mon]==2)&&(year%4!=0)&&(day>29)==1)//当闰年二月day大于29时//此句何用?
day=29;//此句何用?
}
if(set==3)
{
day++;
if((dxy[mon]==0)&&(day==31)==1) //当小月day被加到了31时
day=1;
if((dxy[mon]==1)&&(day==32)==1) //当大月day被加到32时
day=1;
if((dxy[mon]==2)&&(year%4==0)&&(day==29)==1) //当平年二月day被加到29时//year%4==0不是平年 一错
day=1;//二错
if((dxy[mon]==2)&&(year%4!=0)&&(day==30)==1) //当闰年二月day被加到30时//year%4!=0不是闰年 三错
day=1;//四错
}
if(set==4)
{
hour++;
if(hour==24)
hour=0;
}
if(set==5)
{
min++;
if(min==60)
min=0;
}
if(set==6)
{
xq++;
if(xq==8)
xq=1;
}
if(set==7)
{
bs=~bs;
}
while(!s2)
{display();}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
fmq=0;
delay(10);
fmq=1;
if(set==1)
{
year--;
if(year==(-1))
year=99;
if((dxy[mon]==2)&&(year%4==0)&&(day>28)==1)//无用
day=28;//无用
}
if(set==2)
{
mon--;
if(mon==0)
mon=12;
if((dxy[mon]==0)&&(day>30)==1)//何用?
day=30;//
if((dxy[mon]==2)&&(year%4==0)&&(day>28)==1)//判断错误且无用
day=28;//
if((dxy[mon]==2)&&(year%4!=0)&&(day>29)==1)//判断错误且无用
day=29;//
}
if(set==3)
{
day--;
if((dxy[mon]==0)&&(day==0)==1)
day=30;
if((dxy[mon]==1)&&(day==0)==1)
day=31;
if((dxy[mon]==2)&&(year%4==0)&&(day==0)==1)//判断错误
day=28;
if((dxy[mon]==2)&&(year%4!=0)&&(day==0)==1)//判断错误
day=29;
}
if(set==4)
{
hour--;
if(hour==(-1))
hour=23;
}
if(set==5)
{
min--;
if(min==(-1))
min=59;
}
if(set==6)
{
xq--;
if(xq==0)
xq=7;
}
if(set==7)
{
write_1302(0x8e,0x00);
write_1302(0x80,0x00);
write_1302(0x8e,0x80);
}
while(s3==0)
{display();}
}
}
}
}
*******************************************************************************************
请大家预判,此程序能否正确运行?加入讨论
|