📄 gsd.lst
字号:
C51 COMPILER V7.07 GSD 02/12/2009 20:21:02 PAGE 11
612 函数原型: bit IRcvByte(uchar sla,ucahr *c);
613 功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
614 址sla,返回值在c.
615 如果返回1表示操作成功,否则操作有误。
616 注意: 使用前必须已结束总线。
617 ********************************************************************/
618 uchar IRcvByte(uchar sla,uchar suba)
619 {
620 1 uchar c;
621 1 Start_I2c(); /*启动总线*/
622 1 SendByte(sla); /*发送器件地址*/
623 1 if(ack==0)return(0);
624 1 SendByte(suba); /*发送子器件地址*/
625 1 if(ack==0)return(0);
626 1
627 1 Start_I2c();
628 1
629 1 SendByte(sla+1); /*发读器件地址*/
630 1 if(ack==0)return(0);
631 1 c=RcvByte(); /*读取数据*/
632 1 Ack_I2c(1); /*发送非就答位*/
633 1 Stop_I2c(); /*结束总线*/
634 1 return c;
635 1 }
636
637 void readtime(void)
638 {uchar time_temp1,time_temp,time_temp2;
639 1 time_temp=IRcvByte(PCF8583, 0X02);
640 1 time_temp1=(time_temp/16)&0x0f;time_temp2=time_temp&0x0f;
641 1 sec=time_temp1*10+time_temp2;
642 1 time_temp=IRcvByte(PCF8583, 0X03);
643 1 time_temp1=time_temp>>4;time_temp2=time_temp&0x0f;
644 1 min=time_temp1*10+time_temp2;
645 1 time_temp=IRcvByte(PCF8583, 0X04);
646 1 time_temp1=(time_temp>>4)&0x03;time_temp2=time_temp&0x0f;
647 1 hou=time_temp1*10+time_temp2;
648 1 time_temp=IRcvByte(PCF8583, 0X05);
649 1 time_temp1=(time_temp>>4)&0x03;;time_temp2=time_temp&0x0f;
650 1 day=time_temp1*10+time_temp2;
651 1 time_temp=IRcvByte(PCF8583, 0X06);
652 1 time_temp1=(time_temp>>4)&0x01;time_temp2=time_temp&0x0f;
653 1 mon=time_temp1*10+time_temp2;
654 1 time_temp=IRcvByte(PCF8583, 0X05);
655 1 time_temp1=(time_temp>>6)&0x03;time_temp2=time_temp&0x0f;
656 1 year=time_temp1;
657 1 }
658
659 uchar convert_BCD(uchar i)
660 {
661 1 uchar i1,i2;
662 1 i1=i%10;
663 1 i2=i/10;
664 1 i2=i2<<4;
665 1 i=i2+i1;
666 1 return i;
667 1 }
668
669 void adj_year(void)
670 { uchar j=16;
671 1 r_ShowNumber(4,16+j,(year+8)/10);
672 1 r_ShowNumber(4,24+j,(year+8)%10);
673 1 ShowChina(4,32+j,16);
C51 COMPILER V7.07 GSD 02/12/2009 20:21:02 PAGE 12
674 1 //month
675 1 ShowNumber(4,48+j,mon/10);
676 1 ShowNumber(4,56+j,mon%10);
677 1 ShowChina(4,64+j,17);
678 1 //day
679 1 ShowNumber(4,80+j,day/10);
680 1 ShowNumber(4,88+j,day%10);
681 1 ShowChina(4,96+j,18);
682 1 show_time();
683 1 }
684 void adj_month(void)
685 { uchar j=16;
686 1 ShowNumber(4,16+j,(year+8)/10);
687 1 ShowNumber(4,24+j,(year+8)%10);
688 1 ShowChina(4,32+j,16);
689 1 //month
690 1 r_ShowNumber(4,48+j,mon/10);
691 1 r_ShowNumber(4,56+j,mon%10);
692 1 ShowChina(4,64+j,17);
693 1 //day
694 1 ShowNumber(4,80+j,day/10);
695 1 ShowNumber(4,88+j,day%10);
696 1 ShowChina(4,96+j,18);
697 1 show_time();
698 1 }
699 void adj_day(void)
700 { uchar j=16;
701 1 ShowNumber(4,16+j,(year+8)/10);
702 1 ShowNumber(4,24+j,(year+8)%10);
703 1 ShowChina(4,32+j,16);
704 1 //month
705 1 ShowNumber(4,48+j,mon/10);
706 1 ShowNumber(4,56+j,mon%10);
707 1 ShowChina(4,64+j,17);
708 1 //day
709 1 r_ShowNumber(4,80+j,day/10);
710 1 r_ShowNumber(4,88+j,day%10);
711 1 ShowChina(4,96+j,18);
712 1 show_time();
713 1 }
714 void adj_hour(void)
715 { uchar j;
716 1 j = 32;
717 1 //hour
718 1 r_ShowNumber(6,0+j,hou/10);
719 1 r_ShowNumber(6,8+j,hou%10);
720 1 ShowChina(6,16+j,19);
721 1 //minute
722 1 ShowNumber(6,32+j,min/10);
723 1 ShowNumber(6,40+j,min%10);
724 1 ShowChina(6,48+j,20);
725 1 //second
726 1 ShowNumber(6,64+j,sec/10);
727 1 ShowNumber(6,72+j,sec%10);
728 1 ShowChina(6,80+j,21);
729 1 show_date();
730 1 }
731 void adj_min(void)
732 { uchar j;
733 1 j = 32;
734 1 //hour
735 1 ShowNumber(6,0+j,hou/10);
C51 COMPILER V7.07 GSD 02/12/2009 20:21:02 PAGE 13
736 1 ShowNumber(6,8+j,hou%10);
737 1 ShowChina(6,16+j,19);
738 1 //minute
739 1 r_ShowNumber(6,32+j,min/10);
740 1 r_ShowNumber(6,40+j,min%10);
741 1 ShowChina(6,48+j,20);
742 1 //second
743 1 ShowNumber(6,64+j,sec/10);
744 1 ShowNumber(6,72+j,sec%10);
745 1 ShowChina(6,80+j,21);
746 1 show_date();
747 1 }
748
749 void dis_adjtime(void)
750 {
751 1 uchar i,j,k;
752 1 if(key==set)
753 1 { MS++;
754 2 if(MS>=6)
755 2 {MS=0;
756 3
757 3 i=convert_BCD(min);
758 3 ISendByte(PCF8583, 0X03,i);
759 3 i=convert_BCD(hou);
760 3 ISendByte(PCF8583, 0X04, i);
761 3 j=convert_BCD(day);
762 3 j=j&0x3f;
763 3 k=year<<6;
764 3 i=j|k;
765 3 ISendByte(PCF8583, 0x05, i);
766 3 i=convert_BCD(mon);
767 3 ISendByte(PCF8583, 0x06, i);
768 3 ISendByte(PCF8583, 0X00,0x00);
769 3 }
770 2 }
771 1
772 1 switch(MS)
773 1 {
774 2 case 1: adj_year();break;
775 2 case 2:
776 2 {adj_month();
777 3 //i=convert_BCD(min);
778 3 // i=i|year;
779 3 //ISendByte(PCF8583, 0X03,i);
780 3 }
781 2 break;
782 2 case 3:
783 2 adj_day();
784 2 break;
785 2 case 4: adj_hour();break;
786 2 case 5: adj_min();break;
787 2 default:break;
788 2 }
789 1 switch(MS)
790 1 {
791 2 case 1:
792 2 {
793 3 ISendByte(PCF8583, 0X00,0x40);
794 3 if(key==add)
795 3 { year++;
796 4 if(year>3)year=0;
797 4 adj_year();break;
C51 COMPILER V7.07 GSD 02/12/2009 20:21:02 PAGE 14
798 4 }
799 3 if(key==sub)
800 3 { year--;
801 4 if(year==0)year=3;
802 4 adj_year();break;
803 4 }
804 3 }
805 2 break;
806 2 case 2:
807 2 if(key==add)
808 2 { mon++;
809 3 if(mon>12)mon=1;
810 3 adj_month();break;
811 3 }
812 2 if(key==sub)
813 2 { mon--;
814 3 if(mon==0)mon=12;
815 3 adj_month();break;
816 3 }
817 2 break;
818 2 case 3:
819 2 if(key==add)
820 2 { day++;
821 3 if((mon==1)||(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12))
822 3 {
823 4 if(day>31)day=1;
824 4 }
825 3 else
826 3 {if(day>30)day=1;}
827 3 adj_day();break;
828 3 }
829 2 if(key==sub)
830 2 { day--;
831 3 if(day==0)
832 3 {
833 4 if((mon==1)||(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12))
834 4 day=31;
835 4 if((mon==4)||(mon==6)||(mon==9)||(mon==11))
836 4 day=30;
837 4 if(mon==2) day=29;
838 4 }
839 3 adj_day();break;
840 3 }
841 2 break;
842 2 case 4:
843 2 if(key==add)
844 2 { hou++;
845 3 if(hou>23)hou=0;
846 3 adj_hour();break;
847 3 }
848 2 if(key==sub)
849 2 { hou--;
850 3 if(hou==0)hou=23;
851 3 adj_hour();break;
852 3 }
853 2 break;
854 2 case 5:
855 2 if(key==add)
856 2 { min++;
857 3 if(min>59)min=0;
858 3 adj_min();break;
859 3 }
C51 COMPILER V7.07 GSD 02/12/2009 20:21:02 PAGE 15
860 2 if(key==sub)
861 2 { min--;
862 3 if(min<0)min=59;
863 3 adj_min();break;
864 3 }
865 2 break;
866 2 default:break;
867 2 }
868 1 }
869
870 void main(void)
871 {
872 1 InitLCD();
873 1
874 1 show_hz();
875 1 init_timer0();//初始化定时器T0
876 1 ISendByte( PCF8583, 0x00, 0x00);
877 1 show_ad();
878 1 while(1)
879 1 {
880 2 if(key!=0)
881 2 {
882 3 dis_adjtime();
883 3 key=0;
884 3 }
885 2
886 2 if(MS==0)
887 2 {
888 3 readtime();
889 3 show_date_time();
890 3 }
891 2 if( read_temp==1)
892 2 {
893 3 gettempTS();
894 3 b1=temp/10;b2=temp%10;
895 3 show_ad();
896 3 read_temp=0;
897 3 } //读DS18B20检测到的温度Delay1mS(600);
898 2
899 2 //Display();
900 2 }
901 1 }
902
903
904
905
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3276 ----
CONSTANT SIZE = 912 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 43 28
IDATA SIZE = ---- ----
BIT SIZE = 1 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -