📄 time.lst
字号:
201 6 dispchar(7,1,0x20);
202 6 delay(100);
203 6 }
204 5
205 5 default:
206 5 break;
207 5 } //end switch(num_fsn)
208 4 } //end if(flag_op)
209 3 }//end if(flag_s)
210 2
211 2
212 2 if(flag_m) //每分钟软件定时中断处理*********************************************************
213 2 {
214 3 flag_m=0;
215 3 if(flag_alarm)//正在闹铃,是否关闹铃
216 3 {
217 4 if(flag_sw[at]==0) //闹一分钟的,关闹钟
218 4 {
219 5 flag_alarm=0;
220 5 }
221 4 } //end if(flag_alarm)
222 3 //实时时钟更正,判断年、月、日、星期、时、分是否应该更正//
223 3 I2CReadDate();//读入实时数据
224 3 if(time_y!= date[0])
225 3 {
226 4 time_y=date[0];
227 4 disp_bcd(6,0,time_y);//年
228 4 }
229 3 dispchar(8,0,0x2e);
230 3
231 3 if(time_mo!= date[1])
232 3 {
233 4 time_mo=date[1];
234 4 disp_bcd(9,0,time_mo);//月
235 4 }
236 3 dispchar(11,0,0x2e);
237 3
238 3 if(time_d!= date[2])
239 3 {
240 4 time_d=date[2];
241 4 disp_bcd(12,0,time_d);//日
C51 COMPILER V8.02 TIME 03/14/2009 10:38:56 PAGE 5
242 4 }
243 3 dispchar(14,0,0x2e);
244 3 if(time_w!= date[3])
245 3 {
246 4 time_w=date[3];
247 4 dispchar(15,0,0x30|time_w);//星期
248 4 }
249 3
250 3 if(time_h!=date[4])
251 3 {
252 4 time_h=date[4];
253 4 disp_bcd(0,0,time_h);//时
254 4 }
255 3
256 3 time_m=date[5];
257 3 disp_bcd(3,0,time_m);//分
258 3 //实时时钟更正,判断年、月、日、星期、时、分是否应该更正//////////////////////////////////////////
259 3
260 3 for(at=0;at<11;at++) //闹钟检测
261 3 {
262 4 if (alarm[at][0]==time_h)//比较时钟
263 4 {
264 5 if (alarm[at][1]==time_m)//比较分钟
265 5 {
266 6 flag_alarm=1; //标志闹钟标志
267 6 break;
268 6 }
269 5 }
270 4 }//end for
271 3 }//end if(flag_m)
272 2
273 2
274 2 if(flag_op) //进入操作界面后的显示程序
275 2 {
276 3 dispchar(3,1,0x3a); //显示“:”
277 3 if(num_op==0x0a)
278 3 {
279 4 dispchar(0,1,0x54); //显示“T”表示正常时间 T的代码为54
280 4 disp(1,1,time_h); //显示时钟
281 4 disp(0,0,time_h); //更新时钟
282 4 disp(4,1,time_m); //显示分钟
283 4 disp(3,0,time_m); //更新分钟
284 4 dispchar(6,1,0x20); //闹钟长久位不显示
285 4 dispchar(7,1,0x20); //闹钟种类位不显示
286 4 }
287 3 else
288 3 {
289 4 dispchar(0,1,0x30|num_op); //显示闹钟号(0--9)的代码为30-39
290 4 disp(1,1,alarm[num_op][0]); //显示时钟
291 4 disp(0,0,time_h); //更新时钟
292 4 disp(4,1,alarm[num_op][1]); //显示分钟
293 4 disp(3,0,time_m); //更新分钟
294 4 if(flag_sw[num_op]) //永远闹
295 4 {
296 5 dispchar(6,1,0x4f);//显示“P”
297 5 }
298 4 else //只闹一分钟
299 4 {
300 5 dispchar(6,1,0x5f); //显示“-”
301 5 }
302 4 dispchar(7,1,0x30|flag_sy[num_op]); //显示闹钟声音种类号
303 4
C51 COMPILER V8.02 TIME 03/14/2009 10:38:56 PAGE 6
304 4
305 4 }//end else
306 3 } //end if(flag_op)
307 2
308 2 if(flag_alarm) //闹钟提示操作
309 2 {
310 3
311 3 dispchar(10,1,0xf4); //打开闹铃提示显示“”
312 3 //闹铃响铃操作函数,根据flag_sy[at]来进行
313 3
314 3 }
315 2 else
316 2 {
317 3 dispchar(10,1,0x20); //关闭闹铃提示显示“0”
318 3 //闹铃闭铃操作函数,根据flag_sy[at]来进行
319 3 }
320 2
321 2
322 2
323 2 key_temp=P3;
324 2 key_temp&=0xf0; //取P3.4到P3.7四位
325 2
326 2 switch(key_temp)
327 2 {
328 3 case 0x70: //P3.7按下 //长按3秒进入操作界面
329 3 {
330 4 delay(50); //延时50ms
331 4 key_temp=P3&0xf0; //再次读取键值
332 4 if(key_temp==0x70)
333 4 {
334 5
335 5 delay(1000); //延时1s
336 5 key_temp=P3&0xf0; //再次读取键值
337 5 if(key_temp==0x70)
338 5 {
339 6 delay(2000); //延时2s
340 6 key_temp=P3&0xf0; //再次读取键值
341 6 if(key_temp==0x70) //延时3s后还是 --3秒长按即可进入操作界面
342 6 {
343 7 if(flag_op) //进入界面后
344 7 {
345 8 flag_op=0; //退出界面,清除显示
346 8 dispchar(0,1,0x20);
347 8 dispchar(1,1,0x20);
348 8 dispchar(2,1,0x20);
349 8 dispchar(3,1,0x20);
350 8 dispchar(4,1,0x20);
351 8 dispchar(5,1,0x20);
352 8 dispchar(6,1,0x20);
353 8 dispchar(7,1,0x20); //闹钟种类位不显示
354 8 }
355 7
356 7 else //末进入界面
357 7 {
358 8 flag_op=1; //标志进入界面操作
359 8 num_op=0x0a;
360 8 }
361 7 }//end if(key_temp==0x38)
362 6 }//end if(key_temp==0x38)
363 5 }//end if(key_temp==0x38)
364 4 }break; //end case 0x38:
365 3 ///////////////////////////////////////////////////////////////////////////////
C51 COMPILER V8.02 TIME 03/14/2009 10:38:56 PAGE 7
366 3 case 0xb0: //P3.6按下 上翻
367 3 {
368 4 if(flag_op)//进入操作界面后的操作
369 4 {
370 5 delay(50); //延时50ms
371 5 key_temp=P3&0xf0; //再次读取键值
372 5 if(key_temp==0xb0)
373 5 {
374 6 switch(num_fsn)//num_fsn;组时分闹的操作数。00为组,01为时,02为分,03为闹;
375 6 {
376 7 case 0: //操作数加
377 7 {
378 8 num_op++;
379 8 if(num_op==0x0b)
380 8 {
381 9 num_op=0;
382 9 }
383 8 }break; //end case 0:
384 7
385 7 case 1: //小时加
386 7 {
387 8 if(num_op==0x0a)//时钟小时加
388 8 {
389 9 time_h++;
390 9 if(time_h==24)
391 9 {
392 10 time_h=0;
393 10 }
394 9 }
395 8 else //0-9组闹钟小时加
396 8 {
397 9 alarm[num_op][0]++;
398 9 if(alarm[num_op][0]==24)
399 9 {
400 10 alarm[num_op][0]=0;
401 10 }
402 9 }
403 8 }break; //end case 1:
404 7
405 7 case 2: //分加
406 7 {
407 8 if(num_op==0x0a)//时钟小时加
408 8 {
409 9 time_m++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -