资产监测设备使用时,设置具体指定日期天数计算

原标题:资产监测设备使用时,设置具体指定日期天数计算

近期笔者在进行资产监测设备,该设备主要是通过技术实现远程对资产的状态进行获取,比如远程对资产的位置进行实时获取,或者定时获取资产所处环境的温湿度、运动情况等。

有些资产监测设备单片机RTC采用的是BCD码,从对应寄存器拿取数据,因此无法获得对应CNT天数,以下未获取距离设定日期差距的天数。

//BCD码转十进制函数

uint8_t BCD_Decimal(uint8_t bcd)

{

uint8_t Decimal;

Decimal = bcd>>4;

return(Decimal=Decimal*10+(bcd&=0x0F));

}

//功能:十进制转BCD码

uint8_t decimal_bcd_code(uint8_t decimal)//十进制转BCD码

{

uint8_t sum = 0, i; //i计数变量,sum返回的BCD码

for ( i = 0; decimal > 0; i++)

{

sum |= ((decimal % 10 ) << ( 4*i));

decimal /= 10;

}

return sum;

}

//获取计数器值

uint32_t Get_RTCCount(stc_rtc_time_t *RTC_Time)

{

uint32_t Count,CNT;

uint8_t Pre_year =20;

//计算年数

CNT = BCD_Decimal(RTC_Time->u8Year)-Pre_year;

while(CNT)

{

if(Rtc_CheckLeapYear(Pre_year))

Count += 366*86400;

else

Count += 365*86400;

Pre_year +=1;

CNT -=1;

}

//计算月数

CNT = BCD_Decimal(RTC_Time->u8Month)-1;

while(CNT–)

{

Count += Get_Month_Max_Day(RTC_Time->u8Year,CNT)*86400;

}

//计算剩余天数

Count += (BCD_Decimal(RTC_Time->u8Day)-1)*86400;

Count += (BCD_Decimal(RTC_Time->u8Hour)-1)*3600;

Count += (BCD_Decimal(RTC_Time->u8Minute)-1)*60;

Count += BCD_Decimal(RTC_Time->u8Second);

return Count;

}

责任编辑:

Thenews.cc