📄 ds1302.lst
字号:
440 1 for(j=0;j<120;j++);
441 1 }
442
443 /*延时子程序*/
444 void mdelay(uint delay)
445 { uint i;
446 1 for(;delay>0;delay--)
447 1 {for(i=0;i<62;i++) //1ms延时.
448 2 {;}
449 2 }
450 1 }
451
452
453 void outkey() //跳出调整模式,返回默认显示
454 { uchar Second;
455 1 if(out==0||wireless_1==1)
456 1 { mdelay(8);
457 2 count=0;
458 2 hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
459 2 Second=Read1302(DS1302_SECOND);
460 2 Write1302(0x8e,0x00); //写入允许
461 2 Write1302(0x80,Second&0x7f);
462 2 Write1302(0x8E,0x80); //禁止写入
463 2 done=0;
464 2 while(out==0);
465 2 while(wireless_1==1);
466 2 }
467 1 }
468 //////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
469 void Upkey()//升序按键
470 {
471 1 Up=1;
472 1 if(Up==0||wireless_2==1)
473 1 {
474 2 mdelay(8);
475 2 switch(count)
476 2 {case 1:
477 3 temp=Read1302(DS1302_SECOND); //读取秒数
478 3 temp=temp+1; //秒数加1
479 3 up_flag=1; //数据调整后更新标志
480 3 if((temp&0x7f)>0x59) //超过59秒,清零
481 3 temp=0;
482 3 break;
483 3 case 2:
484 3 temp=Read1302(DS1302_MINUTE); //读取分数
C51 COMPILER V7.06 DS1302 05/03/2008 20:11:44 PAGE 9
485 3 temp=temp+1; //分数加1
486 3 up_flag=1;
487 3 if(temp>0x59) //超过59分,清零
488 3 temp=0;
489 3 break;
490 3 case 3:
491 3 temp=Read1302(DS1302_HOUR); //读取小时数
492 3 temp=temp+1; //小时数加1
493 3 up_flag=1;
494 3 if(temp>0x23) //超过23小时,清零
495 3 temp=0;
496 3 break;
497 3 case 4:
498 3 temp=Read1302(DS1302_WEEK); //读取星期数
499 3 temp=temp+1; //星期数加1
500 3 up_flag=1;
501 3 if(temp>0x7)
502 3 temp=1;
503 3 break;
504 3 case 5:
505 3 temp=Read1302(DS1302_DAY); //读取日数
506 3 temp=temp+1; //日数加1
507 3 up_flag=1;
508 3 if(temp>0x31)
509 3 temp=1;
510 3 break;
511 3 case 6:
512 3 temp=Read1302(DS1302_MONTH); //读取月数
513 3 temp=temp+1; //月数加1
514 3 up_flag=1;
515 3 if(temp>0x12)
516 3 temp=1;
517 3 break;
518 3 case 7:
519 3 temp=Read1302(DS1302_YEAR); //读取年数
520 3 temp=temp+1; //年数加1
521 3 up_flag=1;
522 3 if(temp>0x85)
523 3 temp=0;
524 3 break;
525 3 case 8: ///////////////////////////////////////////////////////
526 3 temp=settemp1;
527 3 temp=temp+1;
528 3 up_flag=1;
529 3 if(temp>=45) //设定温度+1(水温不能高于45度)
530 3 temp=1;
531 3 break;
532 3 default:break;
533 3 }
534 2
535 2 while(Up==0);
536 2 while(wireless_2==1);
537 2 }
538 1 }
539
540 //////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
541 void Downkey()//降序按键
542 {
543 1 Down=1;
544 1 if(Down==0||wireless_3==1)
545 1 {
C51 COMPILER V7.06 DS1302 05/03/2008 20:11:44 PAGE 10
546 2 mdelay(8);
547 2 switch(count)
548 2 {case 1:
549 3 temp=Read1302(DS1302_SECOND); //读取秒数
550 3 temp=temp-1; //秒数减1
551 3 down_flag=1; //数据调整后更新标志
552 3 if(temp==0x7f) //小于0秒,返回59秒
553 3 temp=0x59;
554 3 break;
555 3 case 2:
556 3 temp=Read1302(DS1302_MINUTE); //读取分数
557 3 temp=temp-1; //分数减1
558 3 down_flag=1;
559 3 if(temp==-1)
560 3 temp=0x59; //小于0秒,返回59秒
561 3 break;
562 3 case 3:
563 3 temp=Read1302(DS1302_HOUR); //读取小时数
564 3 temp=temp-1; //小时数减1
565 3 down_flag=1;
566 3 if(temp==-1)
567 3 temp=0x23;
568 3 break;
569 3 case 4:
570 3 temp=Read1302(DS1302_WEEK); //读取星期数
571 3 temp=temp-1; //星期数减1
572 3 down_flag=1;
573 3 if(temp==0)
574 3 temp=0x7;;
575 3 break;
576 3 case 5:
577 3 temp=Read1302(DS1302_DAY); //读取日数
578 3 temp=temp-1; //日数减1
579 3 down_flag=1;
580 3 if(temp==0)
581 3 temp=31;
582 3 break;
583 3 case 6:
584 3 temp=Read1302(DS1302_MONTH); //读取月数
585 3 temp=temp-1; //月数减1
586 3 down_flag=1;
587 3 if(temp==0)
588 3 temp=12;
589 3 break;
590 3 case 7:
591 3 temp=Read1302(DS1302_YEAR); //读取年数
592 3 temp=temp-1; //年数减1
593 3 down_flag=1;
594 3 if(temp==-1)
595 3 temp=0x85;
596 3 break;
597 3 case 8: //新加的(设定温度值减一) /////////////////////////////////////////////////////
598 3
599 3 temp=settemp1;
600 3 temp=temp-1;
601 3 down_flag=1;
602 3 if(temp<=10) //水温减一(水温不能低于十度)
603 3 temp=45;
604 3 break;
605 3 default:break;
606 3 }
607 2
C51 COMPILER V7.06 DS1302 05/03/2008 20:11:44 PAGE 11
608 2 while(Down==0);
609 2 while(wireless_3==1);
610 2 }
611 1 }
612
613 void Setkey()//模式选择按键
614 {
615 1 Set=1;
616 1 if(Set==0||wireless_4==1)
617 1 {
618 2 mdelay(8);
619 2 count=count+1; //Setkey按一次,count就加1
620 2 done=1; //进入调整模式
621 2 while(Set==0);
622 2 while(wireless_4==1);
623 2 }
624 1
625 1 }
626
627 void keydone()//按键功能执行
628 { uchar Second;
629 1 if(flag==0) //关闭时钟,停止计时
630 1 { Write1302(0x8e,0x00); //写入允许
631 2 temp=Read1302(0x80);
632 2 Write1302(0x80,temp|0x80);
633 2 Write1302(0x8e,0x80); //禁止写入
634 2 flag=1;
635 2 }
636 1 Setkey(); //扫描模式切换按键
637 1 switch(count)
638 1 {case 1:do //count=1,调整秒
639 2 {
640 3 outkey(); //扫描跳出按钮
641 3 Upkey(); //扫描加按钮
642 3 Downkey(); //扫描减按钮
643 3 if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据
644 3 {
645 4 Write1302(0x8e,0x00); //写入允许
646 4 Write1302(0x80,temp|0x80); //写入新的秒数
647 4 Write1302(0x8e,0x80); //禁止写入
648 4 up_flag=0;
649 4 down_flag=0;
650 4 }
651 3
652 3 hide_sec++; //位闪计数
653 3 if(hide_sec>3)
654 3 hide_sec=0;
655 3 show_time(); //液晶显示数据
656 3 }while(count==2);break;
657 2 case 2:do //count=2,调整分
658 2 {
659 3 hide_sec=0;
660 3 outkey();
661 3 Upkey();
662 3 Downkey();
663 3 if(temp>0x60)
664 3 temp=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -