📄 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 + -