|
#include "include.h"
uchar t0, count;
uint TimeCount;
void Timer0Init(void); //2ms@11.0592MHz
void main()
{
Timer0Init();
IT0 = 1; //开放外部中断0
EX0 = 1;
while(1)
{
while(Setflag==1) //设置模式
{
Seting();
if(DisplayTime)
{
disbuf[7] = t_display[hour/10];
disbuf[6] = t_display[hour%10];
disbuf[5] = t_display[17];
disbuf[4] = t_display[min/10];
disbuf[3] = t_display[min%10];
disbuf[2] = t_display[17];
disbuf[1] = t_display[sec/10];
disbuf[0] = t_display[sec%10];
}
else if(DisplayDate)
{
disbuf[7] = t_display[2];
disbuf[6] = t_display[0];
disbuf[5] = t_display[year/10];
disbuf[4] = t_display[year%10];
disbuf[3] = t_display[month/10];
disbuf[2] = t_display[month%10];
disbuf[1] = t_display[day/10];
disbuf[0] = t_display[day%10];
}
}
while(Setflag==0) //工作模式
{
if(DisplayTime)
{
disbuf[7] = t_display[hour/10];
disbuf[6] = t_display[hour%10];
disbuf[5] = t_display[17];
disbuf[4] = t_display[min/10];
disbuf[3] = t_display[min%10];
disbuf[2] = t_display[17];
disbuf[1] = t_display[sec/10];
disbuf[0] = t_display[sec%10];
}
else if(DisplayDate)
{
disbuf[7] = t_display[2];
disbuf[6] = t_display[0];
disbuf[5] = t_display[year/10];
disbuf[4] = t_display[year%10];
disbuf[3] = t_display[month/10];
disbuf[2] = t_display[month%10];
disbuf[1] = t_display[day/10];
disbuf[0] = t_display[day%10];
}
}
}
}
void Timer0Init(void) //2ms@11.0592MHz
{
AUXR |= 0x80;
TMOD &= 0xF0;
TL0 = 0x9A;
TH0 = 0xA9;
TF0 = 0;
TR0 = 1;
ET0 = 1;
EA = 1;
}
//外部中断0中断
void Init0_ISR(void) interrupt 0
{
Setflag = ~Setflag; //设置标志位取反
}
//定时器0中断
void Timer0_ISR(void) interrupt 1
{
if(++t0>7) t0 = 0;
if(Setflag==1) //设置时显示
{
if(++count == 250) //闪烁定时
{
count = 0;
Flashflag=~Flashflag;
}
if(DisplayDate==1) //正在设置日期
{
if(Flashflag)
{
if(SetNUM==0 && (t0==4 || t0==5))
{
if(t0==4) DigitalDisplay(t0, 16, 1);
else if(t0==5) DigitalDisplay(t0, 16, 0);
}
else if(SetNUM==1 && (t0==2 || t0==3))
{
if(t0==2) DigitalDisplay(t0, 16, 1);
else if(t0==3) DigitalDisplay(t0, 16, 0);
}
else if(SetNUM==2 && (t0==0 || t0==1))
{
DigitalDisplay(t0, 16, 0);
}
else
{
if(t0==2 || t0==4)
TDisplay(t0,1);
else
TDisplay(t0,0);
}
}
else
{
if(t0==2 || t0==4)
TDisplay(t0,1);
else
TDisplay(t0,0);
}
}
else if(DisplayTime==1) //正在设置时间
{
if(Flashflag)
{
if(SetNUM==3 && (t0==6 || t0==7))
DigitalDisplay(t0, 16, 0);
else if(SetNUM==4 && (t0==3 || t0==4))
DigitalDisplay(t0, 16, 0);
else if(SetNUM==5 && (t0==0 || t0==1))
DigitalDisplay(t0, 16, 0);
else TDisplay(t0, 0);
}
else
TDisplay(t0, 0);
}
}
else //工作时显示
{
if(++TimeCount==500)
{
TimeCount = 0;
if(++sec == 60) //秒加一
{
sec = 0;
if(++min == 60) //分加一
{
min = 0;
if(++hour == 24) //时加一
{
hour = 0;
if(month==2) //如果月份等于2
{
if((year/4==0 && year/100!=0) || year/400==0)
{
if(++day>29)
{
day = 1; //闰年2月
month++;
}
}
else
if(++day>28)
{
day = 1; //平年2月
month++;
}
}
else if(month==4 || month==6 || month==9 || month==11) //小月
{
if(++day>30)
{
day = 1;
month++;
}
}
else
{
if(++day>31) //大月
{
day = 1;
if(++month>12)
{
month = 1;
if(++year>99) //年份大于99
{
year = 0;
}
}
}
}
}
}
}
}
if(sec>=55) //当秒数大于55时,显示日期
{
DisplayTime = 0;
DisplayDate = 1;
if(t0==2 || t0==4)
TDisplay(t0,1);
else
TDisplay(t0,0);
}
else //否则显示时间
{
DisplayTime = 1;
DisplayDate = 0;
if(++count == 250) //闪烁定时
{
count = 0;
Flashflag=~Flashflag;
}
//显示时间
if((t0==2 || t0==5) && Flashflag)
DigitalDisplay(t0, 16, 0);
else
TDisplay(t0, 0);
}
}
}
|
|