玩手机的投影仪 · STM32的hal库CAN开发指南2,CAN ...· 1 月前 · |
胆小的茴香 · CAN通信知识梳理及在Stm32上的应用(H ...· 1 月前 · |
深情的登山鞋 · STM32的HAL库开发系列 - ...· 1 月前 · |
善良的鞭炮 · HAL库CAN状态怎么配置 - CSDN文库· 1 月前 · |
听话的牛肉面 · 真爱无敌(东南亚电视连续剧)_百度百科· 7 月前 · |
体贴的仙人掌 · 第2话-749局:奇案调查-漫画牛· 1 年前 · |
暴躁的闹钟 · 北汽瑞翔两款新车C5 EV和X5 PHEV ...· 1 年前 · |
读研的排球 · 高分上名校低分上好校 ...· 1 年前 · |
这节课我们来实现如何通过RTC的计数器,来显示当前的系统时间。实现的思想就是通过STM32的库函数RTC_GetCounter()函数读取当前RTC的计数值,然后计算其相对于1970年1月1日0点0分0秒做了多少偏移,来得到当前的系统时间的。
实现步骤:
定义结构体rtc_tm用于表示时间信息。并用该结构体定义对象tm
structrtc_tm
{
unsigned int year;
unsigned int month;
unsigned int day;
unsigned int hour;
unsigned int minute;
unsigned int second;
};
因为一天有86400秒,则可以获得当前计数值下已经过了多少天days和多少秒hms。之后利用days计算求得年月日,用hms计算求得小时分钟秒。
hms =TimeVar % 86400;
day = TimeVar / 86400;
计算当前时间的小时,分钟,秒
tm->tm_hour = hms / 3600;
tm->tm_min = (hms % 3600) / 60;
tm->tm_sec = (hms % 3600) % 60;
计算年份,思想是根据当前已经经过的天数,从1970年开始循环不断减去当年的天数(注意要先判断当年是闰年还是非闰年)366天或者365天,直到剩余的天数不足以满足一年的天数时,退出循环,那么退出循环是的年份即现在当前的年份。
#defineleapyear(year) (((year)%4 ==0)&&((year)%100 != 0)) ||((year) %400 == 0)
#definedays_in_year(a) (leapyear(a) ? 366 : 365)
for (i = STARTOFYEAR; day >=days_in_year(i); i++) {
day -= days_in_year(i);
}
tm->tm_year = i;
确定月份的方法和确定年份的方法是一样的,不过就是要确定当年是否是闰年,并由此决定2月份是28天还是29天。
unsignedint days_in_month[13] = ;
if(leapyear(i))
days_in_month[2] = 29;
else
days_in_month[2] = 28;
for(i = 1; days >= days_in_month[i]; i++)
days -= days_in_month[i];
tm.month = i;
计算日期,需要注意当前剩余的天数days+1后才是当前的日
tm->tm_mday= day + 1;
最后打印显示系统时间即可。
完整视频教程如下所示:
领取专属 10元无门槛券
私享最新 技术干货
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
善良的鞭炮 · HAL库CAN状态怎么配置 - CSDN文库 1 月前 |
听话的牛肉面 · 真爱无敌(东南亚电视连续剧)_百度百科 7 月前 |
体贴的仙人掌 · 第2话-749局:奇案调查-漫画牛 1 年前 |