?? time.c
字號:
#include"delay.h"
#include"PIO.h"
#include"led.h"
#include"key.h"
int n=0;
char time[4]={0,0,0,0};
unsigned int date[3]={1,5,2007};
uchar month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
uchar day=1,work=1,datework=0,daywork=0;
void main()
{
unsigned int i=0;
PT2=1;//定時器2設為高優先級
IT0=1;//外部中斷設為負跳變觸發方式
EX0=1;//開啟外部中斷
RCAP2H=0x3c;//初始化定時器2
RCAP2L=0xb0;
TH2=0x3c;
TL2=0xb0;
TR2=1;//啟動定時器2
ET2=1;//開啟定時器2
EA=1;
while(1)
{
for(date[1]=1;date[1]<=12;date[1]++)//每12個月進1
{
for(date[0]=1;date[0]<=month[date[1]-1];date[0]++)//足一個月的天數進1
{
for(time[2]=0;time[2]<24;time[2]++)//每24小時進1
{
for(time[1]=0;time[1]<60;time[1]++)//每60分進1
{
for(time[0]=0;time[0]<60;)//每60秒進1
{
num2(2,time[2]);//顯示時間
dot(4);
num2(3,time[1]);
dot(6);
num2(4,time[0]);
keyread();//鍵盤掃描
if(KEY==1&&P2==0xff)//若按下1號鍵,則顯示日期
{
datework=1;//日期顯示標記
KEY=0;
for(i=0;i<150;i++)
{
num4(1,date[2]);//顯示日期
dot(4);
num2(3,date[1]);
dot(6);
num2(4,date[0]);
keyread();//鍵盤掃描
if(KEY==1&&P2==0xff)
{
daywork=1;//星期顯示標記
KEY=0;
for(i=0;i<100;i++)
{
w_p(8,day);//顯示星期
delay(10);//使顯示穩定
keyread();//鍵盤掃描
if(KEY==1&&P2==0xff)break;//若按下1鍵,則跳出星期顯示循環,回到時間顯示循環境保護
if(KEY==13&&P2==0xff){p32=0;p32=1;KEY=1;}
}
daywork=0;//清除星期顯示標記
}
if(KEY==1)break;
if(KEY==13&&P2==0xff){p32=0;p32=1;}
}
KEY=0;
datework=0;//清除日期顯示標記
}
if
(KEY==13&&P2==0xff){p32=0;p32=1;}
}
time[0]=0;
}
}
day++;
if(day==8)day=1;
}
}
date[2]++;
if((date[2]%4==0&&date[2]%100!=0)||date[2]%400==0)
month[1]=29;//如果是閏年,則2月變為29日,否則是28日
else
month[1]=28;
}
}
//計時函數每秒使time[0]加1
timer0() interrupt 5
{
static uchar t;
TF2=0;
t++;
if(t==20)
{
t=0;
time[0]++;
}
}
//時間設定函數
set_time() interrupt 0
{
KEY=0;
if(daywork)//修改星期
while(1)
{
w_p(8,day);
delay(10);
keyread();
if(KEY==16&&P2==0xff){KEY=0;break;}
if(KEY==14&&P2==0xff){KEY=0;day++;if(day==8)day=1;}
if(KEY==15&&P2==0xff){KEY=0;day--;if(day==0)day=7;}
}
if(!datework)//修改時間
while(1)
{
while(1)
{
delay(10);
work=0;
if(time[0]==60){time[0]=0;time[1]++;}
num2(4,time[0]);
keyread();
if(KEY==16&&P2==0xff){KEY=0;break;}
if(KEY==13&&P2==0xff){KEY=0;work=1;}
if(KEY==14&&P2==0xff){KEY=0;time[0]++;if(time[0]==60)time[0]=0;}
if(KEY==15&&P2==0xff){KEY=0;time[0]--;if(time[0]<0)time[0]=59;}
if(work)break;
}
if(work)
while(1)
{
delay(10);
work=0;
num2(3,time[1]);
keyread();
if(KEY==16&&P2==0xff){KEY=0;break;}
if(KEY==13&&P2==0xff){KEY=0;work=1;}
if(KEY==14&&P2==0xff){KEY=0;time[1]++;if(time[1]==60)time[1]=0;}
if(KEY==15&&P2==0xff){KEY=0;time[1]--;if(time[1]<0)time[1]=59;}
if(work)break;
}
if(work)
while(1)
{
work=0;
delay(10);
num2(2,time[2]);
keyread();
if(KEY==16){KEY=0;break;}
if(KEY==13&&P2==0xff){KEY=0;work=1;break;}
if(KEY==14&&P2==0xff){KEY=0;time[2]++;if(time[2]==24)time[2]=0;}
if(KEY==15&&P2==0xff){KEY=0;time[2]--;if(time[2]<0)time[2]=23;}
if(work)break;
}
if(work==0)break;
}
else if(!daywork) //修改日期
while(1)
{
while(1)
{
delay(10);
work=0;
num2(4,date[0]);
keyread();
if(KEY==16&&P2==0xff){KEY=0;break;}
if(KEY==13&&P2==0xff){KEY=0;work=1;}
if(KEY==14&&P2==0xff){KEY=0;date[0]++;if(date[0]==32)date[0]=0;}
if(KEY==15&&P2==0xff){KEY=0;date[0]--;if(date[0]==0)date[0]=31;}
if(work)break;
}
if(work)
while(1)
{
delay(10);
work=0;
num2(3,date[1]);
keyread();
if(KEY==16&&P2==0xff){KEY=0;break;}
if(KEY==13&&P2==0xff){KEY=0;work=1;}
if(KEY==14&&P2==0xff){KEY=0;date[1]++;if(date[1]==13)date[1]=0;}
if(KEY==15&&P2==0xff){KEY=0;date[1]--;if(date[1]==0)date[1]=12;}
if(work)break;
}
if(work)
while(1)
{
work=0;
delay(10);
num4(1,date[2]);
keyread();
if(KEY==16){KEY=0;break;}
if(KEY==13&&P2==0xff){KEY=0;work=1;break;}
if(KEY==14&&P2==0xff){KEY=0;date[2]++;}
if(KEY==15&&P2==0xff){KEY=0;date[2]--;if(date[2]<0)date[2]=2007;}
if((date[2]%4==0&&date[2]%100!=0)||date[2]%400==0)
month[1]=29;//如果是閏年,則2月變為29日,否則是28日
else
month[1]=28;
if(work)break;
}
if(work==0)break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -