📄 timer.c
字号:
#include<reg52.h>
#include"Retype.h"
#include"YM12864R.h"
#include"mac_52.h"
#include"timer.h"
#define MAC_SetEvent(event) event = 1
#define MAC_ClrEvent(event) event = 0
#define MAC_GetEvent(event) event
//--------------------------------------------------------
#define cnComCount 4
#define cnTimeIndex 0
#define cnDataIndex 1
#define cnWeekIndex 2
TTime CurrTime;
TDate CurrDate;
TWeek CurrWeek;
int8u TimeCount;
bit TimeSecEv;
bit TimeMinEv;
bit TimeHouEv;
bit TimeDayEv;
TLcd code Common[cnComCount]={{(int8u)emCXTime,(int8u)emTime,(int8u)emCountTime,"时间:",&CurrTime},
{(int8u)emCXData,(int8u)emData,(int8u)emCountData,"日期:",&CurrDate},
{(int8u)enCXDataCount,(int8u)emWeek,(int8u)emCountWeek,"星期",&CurrWeek},
{0,0,0,""}};
int8u code WeekChina[7][3]={"天","一","二","三","四","五","六"};
//-------------------------------------------------
void DelayMs(int16u time)
{
int16u i;
while(--time)
{
for(i=0;i<200;i++)
{
continue;
}
}
}
/**
***函数名称:DisIntToChar
***说明:仅用于100范围内的显示
**/
void DisIntToChar(int8u Datas)
{
int8u dat;
dat = Datas/10 + 0x30;
LcdWriteData(dat);
dat = Datas%10 + 0x30;
LcdWriteData(dat);
}
void DisCommon(void)
{
int8u i;
LcdInit();
for(i=0;i<cnComCount;i++)
{
LcdWriteString(Common[i].Lcdx,Common[i].Lcdy,Common[i].Com);
}
}
void FlashTime(void)
{
LcdSetXY(Common[cnTimeIndex].Lcdx+Common[cnTimeIndex].Count,Common[cnTimeIndex].Lcdy);
DisIntToChar(Common[cnTimeIndex].Dat.TTim->Hou);
LcdWriteData(':');
DisIntToChar(Common[cnTimeIndex].Dat.TTim->Min);
}
void FlashData(void)
{
LcdSetXY(Common[cnDataIndex].Lcdx+Common[cnDataIndex].Count,Common[cnDataIndex].Lcdy);
DisIntToChar(Common[cnDataIndex].Dat.TDat->Yea);
LcdWriteData('-');
DisIntToChar(Common[cnDataIndex].Dat.TDat->Mon);
LcdWriteData('-');
DisIntToChar(Common[cnDataIndex].Dat.TDat->Day);
}
void FlashWeek(void)
{
LcdSetXY(Common[cnWeekIndex].Lcdx+Common[cnWeekIndex].Count,Common[cnWeekIndex].Lcdy);
LcdWriteStr(WeekChina[*Common[cnWeekIndex].Dat.TWee]);
}
void TimeInit(void)
{
TMOD = 0x01; //定时器1不设置,定时器0为16位时方式,不受外边引脚控制
TH0 = cnTH0;
TL0 = cnTL0;
TimeCount = 0;
TimeSecEv = 0;
TimeSecEv = 0;
TimeMinEv = 0;
TimeHouEv = 0;
TimeDayEv = 0;
CurrTime.Hou = 23;
CurrTime.Min = 59;
CurrTime.Sec = 0;
CurrDate.Yea = 06;
CurrDate.Mon = 12;
CurrDate.Day = 15;
CurrWeek = emTue;
MAX_SET0Int(); //开定时器0中断
MAC_SEI(); //开全局中断
MAC_SetUseT0(); //启动定时器0
}
uchar code Welcome[4][10]={"欢迎使用","好好学习","努力奋斗","积极向上"};
void main(void)
{
int8u i;
LcdInit();
//DelayMs(10);
for(i=0;i<4;i++)
{
LcdWriteString(1,i,Welcome[i]);
}
DelayMs(1000);
TimeInit();
DisCommon();
FlashTime();
FlashData();
FlashWeek();
while(1)
{
if(MAC_GetEvent(TimeMinEv))
{
FlashTime();
MAC_ClrEvent(TimeMinEv);
if(MAC_GetEvent(TimeDayEv))
{
if(CurrWeek==emSat)
CurrWeek = emSun;
else
CurrWeek++;
FlashData();
FlashWeek();
MAC_ClrEvent(TimeDayEv);
}
}
}
}
void Int_T0(void) interrupt VECT_T0
{
TH0 = cnTH0;
TL0 = cnTL0;
TimeCount++;
if(TimeCount>=cnOneSec)
{
TimeCount = 0;
MAC_SetEvent(TimeSecEv);
CurrTime.Sec++;
if(CurrTime.Sec>=cnOneMin) //=60 second
{
CurrTime.Sec = 0;
MAC_SetEvent(TimeMinEv); //set time of mintime
CurrTime.Min++;
if(CurrTime.Min>=cnOneHour)
{
CurrTime.Min = 0;
MAC_SetEvent(TimeHouEv);
CurrTime.Hou++;
if(CurrTime.Hou>=cnOneDate)
{
CurrTime.Hou = 0;
MAC_SetEvent(TimeDayEv);
}
}
}
}
}
int8u code MonDates[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int8u JudgeWeekDay(TDate curdate)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -