標(biāo)題:
對單片機(jī)萬年歷按鍵程序的疑問
[打印本頁]
作者:
kz0018
時間:
2024-2-29 15:52
標(biāo)題:
對單片機(jī)萬年歷按鍵程序的疑問
某單片機(jī)+ds1302+MAX7219組成的16位數(shù)碼管萬年歷,其按鍵程序如下:
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時 此句何用?
day=28;//此句何用?
}
if(set==2)
{
mon++;
if(mon==13)
mon=1;
if((dxy[mon]==0)&&(day>30)==1) //當(dāng)小月day大于30時//此句何用?
day=30;//此句何用?
if((dxy[mon]==2)&&(year%4==0)&&(day>28)==1)//當(dāng)平年二月day大于28時//此句何用?
day=28;//此句何用?
if((dxy[mon]==2)&&(year%4!=0)&&(day>29)==1)//當(dāng)閏年二月day大于29時//此句何用?
day=29;//此句何用?
}
if(set==3)
{
day++;
if((dxy[mon]==0)&&(day==31)==1) //當(dāng)小月day被加到了31時
day=1;
if((dxy[mon]==1)&&(day==32)==1) //當(dāng)大月day被加到32時
day=1;
if((dxy[mon]==2)&&(year%4==0)&&(day==29)==1) //當(dāng)平年二月day被加到29時//year%4==0不是平年 一錯
day=1;//二錯
if((dxy[mon]==2)&&(year%4!=0)&&(day==30)==1) //當(dāng)閏年二月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();}
}
}
}
}
*******************************************************************************************
請大家預(yù)判,此程序能否正確運(yùn)行?加入討論
作者:
tyrl800
時間:
2024-2-29 18:23
C51中不要用goto 語句
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1