📄 rtc.lst
字号:
C51 COMPILER V7.50 RTC 09/09/2006 12:13:13 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE RTC
OBJECT MODULE PLACED IN RTC.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE RTC.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Copyright (c) $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
2 $ 肖遥电子(广州)研发中心
3 $ Shawyoo Electronics (GuangZhou) R&D Center
4 $ http://www.shawyoo.com Email: autoele@qq.com
5 $ QQ群:9069471/9069433/9524253 All rights reserved.
6 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Copyright (c) $$$$$$$$$$$$$$$$$$$$$$$$$$$ */
7 /*
8 文件描述
9 文件名: RTC.c
10 功能描述:把日期时间变成秒,把秒变成日期时间格式
11 编译环境:通用C编译器
12 目标CPU:
13 作者:
14 创建时间:
15 建议编辑环境:UltraEdit 11.00a+ 制表符宽度为三个字符,程序可读性更好。
16 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
17 */
18
19 #define DEF_RTC 1
20 #define RTC_GLOBALS 1
21 #include "RTC.h"
22
23 #include <stdio.h>
24
25
26 /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
27 平年中,每个月的天数.月是从1开始
28 */
29 signed char code DayOfMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
30
31 /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
32 从START_YEAR开始,总计TOTAL_YEAR,每年的润年标志,润年为1,否则为0
33 这个表是从2000年开始,共100年。不同年份要作相应修改。
34 */
35 unsigned char code LeapYearFlag[100] =
36 {
37 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0,
38 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0,
39 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0,
40 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0,
41 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0,
42 };
43
44
45
46 /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
47 平年中,当月及前面月份的总天数
48 */
49 signed short code DayOfYear[13] = { 0,31,59,90,120,151,181,212,243,273,304,334,365 };
50
51
52
53 /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
54 函数名称:DateTimeToSecond
55 功能描述:把日期和时间转换为秒(2000年1月1日0时0分0秒时刻为0秒)
C51 COMPILER V7.50 RTC 09/09/2006 12:13:13 PAGE 2
56 入口参数:RTC结构指针
57 出口参数:秒
58 全局变量: 无
59 创建时间:2006-5-6 17:40
60 修改时间:
61 */
62 uint32 DateTimeToSecond(RTC_STR *pRTC)
63 {
64 1 uchar i;
65 1 int16 LeapYear,wYear;
66 1 uint32 Day,Sec,ySec;
67 1 //////////////////////////////////////////
68 1 wYear = pRTC->wYear;
69 1 wYear -= START_YEAR;
70 1 /////////////////////////////////// 计算出已过去的整年总共秒数
71 1 for(i=0,ySec=0;i<wYear;i++)
72 1 {
73 2 ySec += ONE_YEAR_SECOND;
74 2 if(LeapYearFlag[i])
75 2 ySec += ONE_DAY_SECOND;
76 2 }
77 1 /////////////////////////////////// 计算出当年已过去的整天数
78 1 LeapYear = LeapYearFlag[wYear];
79 1 Day = DayOfYear[pRTC->Month-1];
80 1 Day += pRTC->Day;
81 1 Day -= 1;
82 1 if((LeapYear!=0)&&(pRTC->Month>2))
83 1 Day += 1;
84 1 /////////////////////////////////// 计算出当天已过去的总秒数
85 1 Sec = (pRTC->Hour)*3600L + (pRTC->Min)*60L + pRTC->Sec;
86 1 Sec += ySec;
87 1 Sec += (Day*ONE_DAY_SECOND);
88 1 ///////////////////////////////////
89 1 return Sec;
90 1 } // End of function <DateTimeToSecond>
91
92
93
94 /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
95 函数名称:SecondToDateTime
96 功能描述:把秒(2000年1月1日0时0分0秒时刻为0秒)转换为年月日时分秒
97 入口参数:秒,RTC结构指针
98 出口参数:成功标志,成功为OK,不成功为ERROR
99 全局变量: 无
100 创建时间:2006-5-6 17:40
101 修改时间:
102 */
103 uchar SecondToDateTime(uint32 Second, RTC_STR *pRTC)
104 {
105 1 uchar i,Month,Day;
106 1 int16 LeapYear,wYear;
107 1 uint32 Sec;
108 1 /////////////////////////////////// 计算出已过去的整年数
109 1 for(i=0,wYear=0;i<TOTAL_YEAR;i++)
110 1 {
111 2 Sec = ONE_YEAR_SECOND;
112 2 if(LeapYearFlag[i])
113 2 Sec += ONE_DAY_SECOND;
114 2 if(Second<Sec) break;
115 2 wYear++;
116 2 Second -= Sec;
117 2 }
C51 COMPILER V7.50 RTC 09/09/2006 12:13:13 PAGE 3
118 1 pRTC->Year = wYear;
119 1 pRTC->wYear = wYear+START_YEAR;
120 1 /////////////////////////////////// 计算出当年已过去的整月数
121 1 LeapYear = LeapYearFlag[wYear];
122 1 for(i=0,Month=1;i<12;i++)
123 1 {
124 2 Sec = DayOfMonth[i];
125 2 Sec *= ONE_DAY_SECOND;
126 2 if((LeapYear!=0)&&(Month==2))
127 2 Sec += ONE_DAY_SECOND;
128 2 if(Second<Sec) break;
129 2 Month++;
130 2 Second -= Sec;
131 2 }
132 1 pRTC->Month = Month;
133 1 /////////////////////////////////// 计算出当月已过去的整天数
134 1 pRTC->Day = Second/ONE_DAY_SECOND;
135 1 pRTC->Day += 1;
136 1 /////////////////////////////////// 计算出当天已过去的整小时数
137 1 Second %= ONE_DAY_SECOND;
138 1 pRTC->Hour = Second/3600L;
139 1 /////////////////////////////////// 计算出分钟、秒
140 1 Second %= 3600L;
141 1 pRTC->Min = Second/60;
142 1 pRTC->Sec = Second%60;
143 1 /////////////////////////////////// 星期
144 1 wYear = pRTC->wYear;
145 1 Month = pRTC->Month;
146 1 Day = pRTC->Day;
147 1 if((Month==1)||(Month==2))
148 1 {
149 2 Month += 12;
150 2 wYear--;
151 2 }
152 1 pRTC->Week = ((Day+2*Month+3*(Month+1)/5+wYear+wYear/4-wYear/100+wYear/400)+1)%7;
153 1 return 0;
154 1 }
155 // End of function <SecondToDateTime>
156
157
158
159
160 /*
161 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ End of File $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
162 */
163
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1175 ----
CONSTANT SIZE = 138 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 36
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -