?? 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 + -