📄 datetime.c
字号:
#include "datetime.h"
#include <REGX51.H>
DATETIME dtt_Now;
BYTE dtt_b225HzClock;
BYTE g_14HzClock;
BYTE g_1HzClock;
BIT g_HourClock; //整点报时中断
void dttInit(void)
{
BYTE save;
save = TMOD;
TMOD = (save & T1_MASK_) | (0x01 & T0_MASK_);
TH0 = 0;
TL0 = 0;
TR0 = 1;
ET0 = 1;
dtt_Now.yy = 0;
dtt_Now.mo = 1;
dtt_Now.dd = 1;
dtt_Now.hh = 0;
dtt_Now.mi = 0;
dtt_Now.ss = 0;
}
void dttIntrq(void) interrupt TF0_VECTOR
{
// 14.0625 Hz intrq
dtt_b225HzClock += 16;
g_14HzClock++;
if (dtt_b225HzClock >= 225)
{
dtt_b225HzClock -= 225;
dtt_Now.ss++;
g_1HzClock++;
}
if (dtt_Now.ss >= 60)
{
dtt_Now.ss = 0;
dtt_Now.mi++;
}
if (dtt_Now.mi >= 60)
{
dtt_Now.mi = 0;
dtt_Now.hh++;
g_HourClock = TRUE; // 整点报时中断
}
if (dtt_Now.hh >= 24)
{
dtt_Now.hh = 0;
dtt_Now.dd++;
}
}
void dttSetCurDateTime(DATETIME * pDtt)
{
dtt_Now = *pDtt;
}
//BYTE dttGetCurDateTime(BYTE pos)
DATETIME dttGetCurDateTime(void)
{
// BYTE rt;
// 检查天进位
switch (dtt_Now.mo)
{
case 2:
if (dtt_Now.yy % 4)
{
if (dtt_Now.dd > 28)
{
dtt_Now.dd -= 28;
dtt_Now.mo ++;
}
}
else
{
if (dtt_Now.dd > 29)
{
dtt_Now.dd -= 29;
dtt_Now.mo ++;
}
}
break;
case 4:
case 6:
case 9:
case 11:
if (dtt_Now.dd > 30)
{
dtt_Now.dd -= 30;
dtt_Now.mo ++;
}
break;
default:
if (dtt_Now.dd > 31)
{
dtt_Now.dd -= 31;
dtt_Now.mo ++;
}
}
if (dtt_Now.mo > 12)
{
dtt_Now.mo -= 12;
dtt_Now.yy ++;
}
return dtt_Now;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -