📄 ds1302.lst
字号:
456 2 if(DQ)
457 2 dat|=0x80;
458 2 delay_18B20(4);
459 2 }
460 1 return(dat);
461 1 }
462
463 /*************ds18b20写一个字节****************/
464
465 void WriteOneChar(uchar dat)
466 {
467 1 unsigned char i=0;
468 1 for (i=8; i>0; i--)
469 1 {
470 2 DQ = 0;
471 2 DQ = dat&0x01;
472 2 delay_18B20(5);
473 2 DQ = 1;
474 2 dat>>=1;
475 2 }
476 1 }
477
478 /**************读取ds18b20当前温度************/
479
480 void ReadTemp(void)
481 {
482 1 unsigned char a=0;
483 1 unsigned char b=0;
484 1 unsigned char t=0;
485 1
486 1 Init_DS18B20();
487 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
C51 COMPILER V7.50 DS1302 04/30/2008 22:40:42 PAGE 9
488 1 WriteOneChar(0x44); // 启动温度转换
489 1
490 1 delay_18B20(100); // this message is wery important
491 1
492 1 Init_DS18B20();
493 1 WriteOneChar(0xCC); //跳过读序号列号的操作
494 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
495 1
496 1 delay_18B20(100);
497 1
498 1 a=ReadOneChar(); //读取温度值低位
499 1 b=ReadOneChar(); //读取温度值高位
500 1 temp_value=b<<4;
501 1 temp_value+=(a&0xf0)>>4;
502 1 }
503 void temp_to_str() //温度数据转换成液晶字符显示
504 {
505 1 TempBuffer[0]=temp_value/10+'0'; //十位
506 1 TempBuffer[1]=temp_value%10+'0'; //个位
507 1 TempBuffer[2]=0xdf; //温度符号
508 1 TempBuffer[3]='C';
509 1 TempBuffer[4]='\0';
510 1 }
511 void Delay1ms(unsigned int count)
512 {
513 1 unsigned int i,j;
514 1 for(i=0;i<count;i++)
515 1 for(j=0;j<120;j++);
516 1 }
517
518 /*延时子程序*/
519 void mdelay(uint delay)
520 { uint i;
521 1 for(;delay>0;delay--)
522 1 {for(i=0;i<62;i++) //1ms延时.
523 2 {;}
524 2 }
525 1 }
526
527
528 void outkey() //跳出调整模式,返回默认显示
529 { uchar Second;
530 1 if(out==0||wireless_1==1)
531 1 { mdelay(8);
532 2 count=0;
533 2 hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
534 2 Second=Read1302(DS1302_SECOND);
535 2 Write1302(0x8e,0x00); //写入允许
536 2 Write1302(0x80,Second&0x7f);
537 2 Write1302(0x8E,0x80); //禁止写入
538 2 done=0;
539 2 while(out==0);
540 2 while(wireless_1==1);
541 2 }
542 1 }
543 //////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
544 void Upkey()//升序按键
545 {
546 1 Up=1;
547 1 if(Up==0||wireless_2==1)
548 1 {
C51 COMPILER V7.50 DS1302 04/30/2008 22:40:42 PAGE 10
549 2 mdelay(8);
550 2 switch(count)
551 2 {case 1:
552 3 temp=Read1302(DS1302_SECOND); //读取秒数
553 3 temp=temp+1; //秒数加1
554 3 up_flag=1; //数据调整后更新标志
555 3 if((temp&0x7f)>0x59) //超过59秒,清零
556 3 temp=0;
557 3 break;
558 3 case 2:
559 3 temp=Read1302(DS1302_MINUTE); //读取分数
560 3 temp=temp+1; //分数加1
561 3 up_flag=1;
562 3 if(temp>0x59) //超过59分,清零
563 3 temp=0;
564 3 break;
565 3 case 3:
566 3 temp=Read1302(DS1302_HOUR); //读取小时数
567 3 temp=temp+1; //小时数加1
568 3 up_flag=1;
569 3 if(temp>0x23) //超过23小时,清零
570 3 temp=0;
571 3 break;
572 3 case 4:
573 3 temp=Read1302(DS1302_WEEK); //读取星期数
574 3 temp=temp+1; //星期数加1
575 3 up_flag=1;
576 3 if(temp>0x7)
577 3 temp=1;
578 3 break;
579 3 case 5:
580 3 temp=Read1302(DS1302_DAY); //读取日数
581 3 temp=temp+1; //日数加1
582 3 up_flag=1;
583 3 if(temp>0x31)
584 3 temp=1;
585 3 break;
586 3 case 6:
587 3 temp=Read1302(DS1302_MONTH); //读取月数
588 3 temp=temp+1; //月数加1
589 3 up_flag=1;
590 3 if(temp>0x12)
591 3 temp=1;
592 3 break;
593 3 case 7:
594 3 temp=Read1302(DS1302_YEAR); //读取年数
595 3 temp=temp+1; //年数加1
596 3 up_flag=1;
597 3 if(temp>0x85)
598 3 temp=0;
599 3 break;
600 3 default:break;
601 3 }
602 2
603 2 while(Up==0);
604 2 while(wireless_2==1);
605 2 }
606 1 }
607
608 //////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
609 void Downkey()//降序按键
C51 COMPILER V7.50 DS1302 04/30/2008 22:40:42 PAGE 11
610 {
611 1 Down=1;
612 1 if(Down==0||wireless_3==1)
613 1 {
614 2 mdelay(8);
615 2 switch(count)
616 2 {case 1:
617 3 temp=Read1302(DS1302_SECOND); //读取秒数
618 3 temp=temp-1; //秒数减1
619 3 down_flag=1; //数据调整后更新标志
620 3 if(temp==0x7f) //小于0秒,返回59秒
621 3 temp=0x59;
622 3 break;
623 3 case 2:
624 3 temp=Read1302(DS1302_MINUTE); //读取分数
625 3 temp=temp-1; //分数减1
626 3 down_flag=1;
627 3 if(temp==-1)
628 3 temp=0x59; //小于0秒,返回59秒
629 3 break;
630 3 case 3:
631 3 temp=Read1302(DS1302_HOUR); //读取小时数
632 3 temp=temp-1; //小时数减1
633 3 down_flag=1;
634 3 if(temp==-1)
635 3 temp=0x23;
636 3 break;
637 3 case 4:
638 3 temp=Read1302(DS1302_WEEK); //读取星期数
639 3 temp=temp-1; //星期数减1
640 3 down_flag=1;
641 3 if(temp==0)
642 3 temp=0x7;;
643 3 break;
644 3 case 5:
645 3 temp=Read1302(DS1302_DAY); //读取日数
646 3 temp=temp-1; //日数减1
647 3 down_flag=1;
648 3 if(temp==0)
649 3 temp=31;
650 3 break;
651 3 case 6:
652 3 temp=Read1302(DS1302_MONTH); //读取月数
653 3 temp=temp-1; //月数减1
654 3 down_flag=1;
655 3 if(temp==0)
656 3 temp=12;
657 3 break;
658 3 case 7:
659 3 temp=Read1302(DS1302_YEAR); //读取年数
660 3 temp=temp-1; //年数减1
661 3 down_flag=1;
662 3 if(temp==-1)
663 3 temp=0x85;
664 3 break;
665 3 default:break;
666 3 }
667 2
668 2 while(Down==0);
669 2 while(wireless_3==1);
670 2 }
671 1 }
C51 COMPILER V7.50 DS1302 04/30/2008 22:40:42 PAGE 12
672
673 void Setkey()//模式选择按键
674 {
675 1 Set=1;
676 1 if(Set==0||wireless_4==1)
677 1 {
678 2 mdelay(8);
679 2 count=count+1; //Setkey按一次,count就加1
680 2 done=1; //进入调整模式
681 2 while(Set==0);
682 2 while(wireless_4==1);
683 2 }
684 1
685 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -