📄 timefun.c
字号:
//**********************************************************************
// Clock Start
//**********************************************************************
void ClkStart( void )
{
// 设置中断频率为 0.5s, 液晶时钟原32分频 */
BTCTL = BT_fLCD_DIV32 | BT_fCLK2_DIV64 | BT_fCLK2_ACLK_DIV256;
// 1s 中断使能 */
IE2 |= BTIE;
}
//**********************************************************************
// Clock Initialize
//**********************************************************************
void ClkInit( void )
{
Second = 0x00;
Minute = 0x00;
Hour = 0x00;
Day = 0x01;
Month = 0x01;
Year[0] =0x07;
Year[1]=0x20;
Week = 0x01;
ChkClk=ChkSum((unsigned char*)&Second, 8);
}
unsigned int BCD_HEX(unsigned int Data)
{
return(((Data>>12)&0x0f)*1000+((Data>>8)&0x0f)*100+((Data>>4)&0x0f)*10+(Data&0x0f));
}
unsigned int BCD_Y(unsigned char *dat)
{
unsigned int ss;
ss = *(dat+1) * 0x100 + *dat;
return(BCD_HEX(ss));
}
void Clk_Sys( void )
{
unsigned int i;
BCD1INC( &Second );
if (Second > 0x59)
{
Second = 0x00;
BCD1INC( &Minute );
if (Minute > 0x59)
{
Minute = 0x00;
BCD1INC( &Hour );
if (Hour > 0x23)
{
Hour = 0x00;
BCD1INC( &Day );
Week++;
if( Week >= 0x07) Week = 0x00; // 0100 0000
switch(Month)
{
case 0x01:
case 0x03:
case 0x05:
case 0x07:
case 0x08:
case 0x10:
case 0x12: if(Day > 0x31)
{ Day = 0x01;
BCD1INC( &Month );
}break;
case 0x04:
case 0x06:
case 0x09:
case 0x11: if(Day > 0x30)
{ Day = 0x01;
BCD1INC( &Month );
}break;
case 0x02: { i = BCD_Y(&Year[0]);
if ( (( i%100 )&&(( i%4) == 0 )) || (( i%400 ) == 0 ) ) i = 0x29;
else i = 0x28;
if ( Day > i )
{
Day = 0x01;
BCD1INC( &Month );
}
}break;
}
if(Month > 0x12)
{
Month = 0x01;
BCD2INC(&Year[0]);
}
}
}
}
ChkClk=ChkSum((unsigned char*)&Second, 8);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -