|
某單片機(jī)+ds1302+MAX7219組成的16位數(shù)碼管萬(wàn)年歷,其按鍵程序如下:
uc code dxy[]={0,1,2,1,0,1,0,1,1,0,1,0,1};//定義大小月的數(shù)組
/*****按鍵函數(shù)*****/
void key()
{
ui out_set=0,clear_0=0;
out_clear=0;
if(s1==0) //設(shè)置鍵
{
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)//當(dāng)平年二月day大于28時(shí) 此句何用?
day=28;//此句何用?
}
if(set==2)
{
mon++;
if(mon==13)
mon=1;
if((dxy[mon]==0)&&(day>30)==1) //當(dāng)小月day大于30時(shí)//此句何用?
day=30;//此句何用?
if((dxy[mon]==2)&&(year%4==0)&&(day>28)==1)//當(dāng)平年二月day大于28時(shí)//此句何用?
day=28;//此句何用?
if((dxy[mon]==2)&&(year%4!=0)&&(day>29)==1)//當(dāng)閏年二月day大于29時(shí)//此句何用?
day=29;//此句何用?
}
if(set==3)
{
day++;
if((dxy[mon]==0)&&(day==31)==1) //當(dāng)小月day被加到了31時(shí)
day=1;
if((dxy[mon]==1)&&(day==32)==1) //當(dāng)大月day被加到32時(shí)
day=1;
if((dxy[mon]==2)&&(year%4==0)&&(day==29)==1) //當(dāng)平年二月day被加到29時(shí)//year%4==0不是平年 一錯(cuò)
day=1;//二錯(cuò)
if((dxy[mon]==2)&&(year%4!=0)&&(day==30)==1) //當(dāng)閏年二月day被加到30時(shí)//year%4!=0不是閏年 三錯(cuò)
day=1;//四錯(cuò)
}
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)//無(wú)用
day=28;//無(wú)用
}
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)//判斷錯(cuò)誤且無(wú)用
day=28;//
if((dxy[mon]==2)&&(year%4!=0)&&(day>29)==1)//判斷錯(cuò)誤且無(wú)用
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)//判斷錯(cuò)誤
day=28;
if((dxy[mon]==2)&&(year%4!=0)&&(day==0)==1)//判斷錯(cuò)誤
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();}
}
}
}
}
*******************************************************************************************
請(qǐng)大家預(yù)判,此程序能否正確運(yùn)行?加入討論
|
|