📄 ds1302.lst
字号:
402 1 TempBuffer[0]=temp_value/10+'0'; //十位
403 1 TempBuffer[1]=temp_value%10+'0'; //个位
404 1 TempBuffer[2]=0xdf; //温度符号
405 1 TempBuffer[3]='C';
406 1 TempBuffer[4]='\0';
407 1 }
408 void Delay1ms(unsigned int count)
409 {
410 1 unsigned int i,j;
411 1 for(i=0;i<count;i++)
412 1 for(j=0;j<120;j++);
413 1 }
414
415 /*延时子程序*/
416 void mdelay(uint delay)
417 { uint i;
418 1 for(;delay>0;delay--)
419 1 {for(i=0;i<62;i++) //1ms延时.
420 2 {;}
421 2 }
422 1 }
423
424
425 void outkey() //跳出调整模式,返回默认显示
C51 COMPILER V7.06 DS1302 01/07/2009 18:08:46 PAGE 8
426 { uchar Second;
427 1 if(out==0||wireless_1==1)
428 1 { mdelay(8);
429 2 count=0;
430 2 hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
431 2 Second=Read1302(DS1302_SECOND);
432 2 Write1302(0x8e,0x00); //写入允许
433 2 Write1302(0x80,Second&0x7f);
434 2 Write1302(0x8E,0x80); //禁止写入
435 2 done=0;
436 2 while(out==0);
437 2 while(wireless_1==1);
438 2 }
439 1 }
440 //////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
441 void Upkey()//升序按键
442 {
443 1 Up=1;
444 1 if(Up==0||wireless_2==1)
445 1 {
446 2 mdelay(8);
447 2 switch(count)
448 2 {case 1:
449 3 temp=Read1302(DS1302_SECOND); //读取秒数
450 3 temp=temp+1; //秒数加1
451 3 up_flag=1; //数据调整后更新标志
452 3 if((temp&0x7f)>0x59) //超过59秒,清零
453 3 temp=0;
454 3 break;
455 3 case 2:
456 3 temp=Read1302(DS1302_MINUTE); //读取分数
457 3 temp=temp+1; //分数加1
458 3 up_flag=1;
459 3 if(temp>0x59) //超过59分,清零
460 3 temp=0;
461 3 break;
462 3 case 3:
463 3 temp=Read1302(DS1302_HOUR); //读取小时数
464 3 temp=temp+1; //小时数加1
465 3 up_flag=1;
466 3 if(temp>0x23) //超过23小时,清零
467 3 temp=0;
468 3 break;
469 3 case 4:
470 3 temp=Read1302(DS1302_WEEK); //读取星期数
471 3 temp=temp+1; //星期数加1
472 3 up_flag=1;
473 3 if(temp>0x7)
474 3 temp=1;
475 3 break;
476 3 case 5:
477 3 temp=Read1302(DS1302_DAY); //读取日数
478 3 temp=temp+1; //日数加1
479 3 up_flag=1;
480 3 if(temp>0x31)
481 3 temp=1;
482 3 break;
483 3 case 6:
484 3 temp=Read1302(DS1302_MONTH); //读取月数
485 3 temp=temp+1; //月数加1
486 3 up_flag=1;
C51 COMPILER V7.06 DS1302 01/07/2009 18:08:46 PAGE 9
487 3 if(temp>0x12)
488 3 temp=1;
489 3 break;
490 3 case 7:
491 3 temp=Read1302(DS1302_YEAR); //读取年数
492 3 temp=temp+1; //年数加1
493 3 up_flag=1;
494 3 if(temp>0x85)
495 3 temp=0;
496 3 break;
497 3 default:break;
498 3 }
499 2
500 2 while(Up==0);
501 2 while(wireless_2==1);
502 2 }
503 1 }
504
505 //////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
506 void Downkey()//降序按键
507 {
508 1 Down=1;
509 1 if(Down==0||wireless_3==1)
510 1 {
511 2 mdelay(8);
512 2 switch(count)
513 2 {case 1:
514 3 temp=Read1302(DS1302_SECOND); //读取秒数
515 3 temp=temp-1; //秒数减1
516 3 down_flag=1; //数据调整后更新标志
517 3 if(temp==0x7f) //小于0秒,返回59秒
518 3 temp=0x59;
519 3 break;
520 3 case 2:
521 3 temp=Read1302(DS1302_MINUTE); //读取分数
522 3 temp=temp-1; //分数减1
523 3 down_flag=1;
524 3 if(temp==-1)
525 3 temp=0x59; //小于0秒,返回59秒
526 3 break;
527 3 case 3:
528 3 temp=Read1302(DS1302_HOUR); //读取小时数
529 3 temp=temp-1; //小时数减1
530 3 down_flag=1;
531 3 if(temp==-1)
532 3 temp=0x23;
533 3 break;
534 3 case 4:
535 3 temp=Read1302(DS1302_WEEK); //读取星期数
536 3 temp=temp-1; //星期数减1
537 3 down_flag=1;
538 3 if(temp==0)
539 3 temp=0x7;;
540 3 break;
541 3 case 5:
542 3 temp=Read1302(DS1302_DAY); //读取日数
543 3 temp=temp-1; //日数减1
544 3 down_flag=1;
545 3 if(temp==0)
546 3 temp=31;
547 3 break;
C51 COMPILER V7.06 DS1302 01/07/2009 18:08:46 PAGE 10
548 3 case 6:
549 3 temp=Read1302(DS1302_MONTH); //读取月数
550 3 temp=temp-1; //月数减1
551 3 down_flag=1;
552 3 if(temp==0)
553 3 temp=12;
554 3 break;
555 3 case 7:
556 3 temp=Read1302(DS1302_YEAR); //读取年数
557 3 temp=temp-1; //年数减1
558 3 down_flag=1;
559 3 if(temp==-1)
560 3 temp=0x85;
561 3 break;
562 3 default:break;
563 3 }
564 2
565 2 while(Down==0);
566 2 while(wireless_3==1);
567 2 }
568 1 }
569
570 void Setkey()//模式选择按键
571 {
572 1 Set=1;
573 1 if(Set==0||wireless_4==1)
574 1 {
575 2 mdelay(8);
576 2 count=count+1; //Setkey按一次,count就加1
577 2 done=1; //进入调整模式
578 2 while(Set==0);
579 2 while(wireless_4==1);
580 2 }
581 1
582 1 }
583
584 void keydone()//按键功能执行
585 { uchar Second;
586 1 if(flag==0) //关闭时钟,停止计时
587 1 { Write1302(0x8e,0x00); //写入允许
588 2 temp=Read1302(0x80);
589 2 Write1302(0x80,temp|0x80);
590 2 Write1302(0x8e,0x80); //禁止写入
591 2 flag=1;
592 2 }
593 1 Setkey(); //扫描模式切换按键
594 1 switch(count)
595 1 {case 1:do //count=1,调整秒
596 2 {
597 3 outkey(); //扫描跳出按钮
598 3 Upkey(); //扫描加按钮
599 3 Downkey(); //扫描减按钮
600 3 if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据
601 3 {
602 4 Write1302(0x8e,0x00); //写入允许
603 4 Write1302(0x80,temp|0x80); //写入新的秒数
604 4 Write1302(0x8e,0x80); //禁止写入
605 4 up_flag=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -