|
#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) //當秒數(shù)大于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);
}
}
}
|
-
-
Clock.rar
2018-2-21 01:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
35.82 KB, 下載次數(shù): 10, 下載積分: 黑幣 -5
|