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

本文介绍了如何在资产监测设备中处理BCD码以计算与设定日期的差距。通过提供的BCD码转十进制函数,结合RTC时间数据,计算出设备当前时间与预设日期之间的天数差。涉及RTC时间处理、闰年判断及月份天数计算等技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

​//BCD码转十进制函数

uint8_t BCD_Decimal(uint8_t bcd)
{
uint8_t Decimal;
Decimal = bcd>>4;
return(Decimal=Decimal10+(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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值