📄 time.lst
字号:
138 3 }
139 2 }
140 1 }
141
142 //***********************************************************************
143 bit ModifyDay(bit b) //天调整函数
144 {
145 1 uchar month2;
146 1 if(b==1) //天加1操作
147 1 {
148 2 if(Day<DayTab[Month]&&Month!=2)
149 2 {
150 3 Day++; //如果天<当月最大天数,并且不是2月
151 3 return(0); //则天加1,并且返回进位标志0
152 3 }
153 2 else if(Month==2) //如果当前是2月
154 2 { //取得今年2月的最大天数
155 3 month2=((Year&0x03)==0)?29:28;
156 3 if(Day<month2) //如果小于最大天数
157 3 {
158 4 Day++; //则加1
159 4 return(0); //无进位
160 4 }
161 3 else //否则
162 3 {
163 4 Day=1; //天置为1
164 4 return(1); //有进位标志
165 4 }
166 3 }
167 2 else //大于或等于本月最大天数
168 2 {
169 3 Day=1; //置天数为1
170 3 return(1); //有进位
171 3 }
172 2 }
173 1 else //天减1操作
174 1 {
175 2 if(Day>1) //如果天大于1
176 2 Day--; //则天减1
177 2 else if(Month==2) //否则,如果当前是2月
178 2 Day=((Year&0x03)==0)?29:28;//取今年的2月的最大天数
179 2 else
C51 COMPILER V7.06 TIME 11/09/2004 16:39:45 PAGE 4
180 2 Day=DayTab[Month]; //为其它月,取其对应的最大天数
181 2 return(0); //无进位标志
182 2 }
183 1 }
184 //***********************************************************************
185 bit ModifyMonth(bit b) //月调整函数
186 {
187 1 if(b==1) //月加1操作
188 1 {
189 2 if(Month<12) //<12则月加1
190 2 {
191 3 Month++;
192 3 return(0); //返回进位标志0
193 3 }
194 2 else
195 2 {
196 3 Month=1; //否则,月置为1
197 3 return(1); //返回进位标志1
198 3 }
199 2 }
200 1 else //月减1操作
201 1 {
202 2 if(Month>1) //月>1,则减1
203 2 Month--;
204 2 else //否则月置为12
205 2 Month=12;
206 2 return(0); //返回无进位标志
207 2 }
208 1 }
209 //***********************************************************************
210 void ModifyYear(bit b) //年调整函数
211 {
212 1 if(b==1) //年加1操作
213 1 {
214 2 if(Year<99) //年<99则加1
215 2 Year++;
216 2 else //否则置为0
217 2 Year=0;
218 2 }
219 1 else //年减1操作
220 1 {
221 2 if(Year>0) //年>0则减1
222 2 Year--;
223 2 else //否则将年置为99
224 2 Year=99;
225 2 }
226 1 }
227 //***********************************************************************
228 void TimeAdjuest() //时间调整函数
229 {
230 1 if(AddSecond()) //秒加1,如产生进位标志1,则使分钟加1
231 1 if(ModifyMinute(1)) //分加1,如产生进位标志1,则使小时加1
232 1 if(ModifyHour(1)) //小时加1,如产生进位标志1,则使天加1
233 1 if(ModifyDay(1)) //天加1,如产生进位标志1,则使月加1
234 1 if(ModifyMonth(1)) //月加1,如产生进位标志1,则使年加1
235 1 ModifyYear(1);
236 1 }
237 //***********************************************************************
238 void TimeBeep() //时间报警函数
239 {
240 1 if(AlarmHour==Hour&&AlarmMinute==Minute&&AlarmAmpm==Ampm)
241 1 { //判断是否与闹钟设置值完全符合
C51 COMPILER V7.06 TIME 11/09/2004 16:39:45 PAGE 5
242 2 BEEP=0; //符合则使BEEP报警
243 2 BeepAlarm=1; //同时设置闹钟报警标志
244 2 Alarm=~Alarm;
245 2 SendDatTo595(Alarm); //使8个LED进行闪烁
246 2 }
247 1 else
248 1 {
249 2 SendDatTo595(0xff<<Mode);//将无闹钟报警,则LED指模式
250 2 BeepAlarm=0; //否则清除闹钟报警标志
251 2 if(Minute==0&&Second==0)//判断是否是整点
252 2 BEEP=0; //是,则进行整点提示
253 2 else BEEP=1; //不满足任何报警情况,关闭蜂鸣器。
254 2 }
255 1
256 1 }
257
258 //***********************************************************************
259 void RTCINT() interrupt 10 //RTC中断,中断频率为1Hz
260 {
261 1 RTCCON=0x43; //清楚RTC中断标志
262 1 RTCflag=1; //置RTC中断标志
263 1 HalfSec++; //半秒信号量加1
264 1 }
265 //*********************************END***********************************
266
267
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 433 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
IDATA SIZE = ---- ----
BIT SIZE = 4 7
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -