📄 生日提醒.lst
字号:
670 2
671 2 }
C51 COMPILER V8.08 蒧日提醒 10/25/2011 08:42:07 PAGE 12
672 1 }
673
674 /*主函数*/
675 void main()
676 {
677 1 Move=0;
678 1 E=0; //595使能
679 1 zimuo=0;
680 1 IP=0x04; //设置优先级 外部中断1为优先级
681 1 TMOD=0x12; //定时器0 1
682 1 TH1=0x3C; //15ms晶振为40M 定时器1方式1 16位模式初始化
683 1 TL1=0xB0;
684 1 EA=1;
685 1 TR1=1;
686 1 ET1=1;
687 1 TH0=0x00;//定时器0初始化方式2 8位自动重装方式
688 1 TL0=0x00;
689 1 TR0=1;
690 1 ET0=1;
691 1 //外部中断
692 1 IT1=1; //下降沿触发中断
693 1
694 1 RCAP2H = 0x7D;
695 1 RCAP2L = 0x0CB;
696 1 ET2 = 1;
697 1 TR2=1;
698 1 EX1=1; //开外中断1
699 1 ri=1;
700 1 r=1;
701 1 zz=0;
702 1 rr=1;
703 1 while(1) //重复(无限)循环显示
704 1 {
705 2
706 2 if(irokk==1)
707 2 {
708 3 Ircordpro();
709 3 irokk=0;
710 3 }
711 2 if((resget==0)||(IRcord[0]==0x1A))
712 2 { DelayMs();
713 3 if((resget==0)||(IRcord[0]==0x1A))
714 3 Set1302(starts_time); //初始化
715 3 W1302(0x8e,0x00); //控制命令,WP=0,写操作
716 3 W1302(0x90,0xa5); //打开充电二级管 一个二级管串联一个2K电阻
717 3 }
718 2
719 2 du1302(); //读取 秒 分 时 日 月 星期 年
720 2 /* if((Cent>0x02)&&(Cent<0x07))
721 2 {
722 2
723 2 MCU_POWER_DOWN;
724 2
725 2 } */
726 2
727 2 if(Sec!=ping)
728 2 {
729 3 ping=Sec;
730 3 w=~w;
731 3 }
732 2
733 2
C51 COMPILER V8.08 蒧日提醒 10/25/2011 08:42:07 PAGE 13
734 2
735 2 c_sun=0;
736 2 //y=R1302(0x8c+1)/16*10+R1302(0x8c+1)%16 ;
737 2
738 2 nian_sun=Year;
739 2 // y=R1302(0x88+1)/16*10+R1302(0x88+1)%16 ;
740 2 yue_sun=Month;
741 2 // y=R1302(0x86+1)/16*10+R1302(0x86+1)%16 ;
742 2 ri_sun=Day;
743 2 Conver_xingqi(c_sun,nian_sun,yue_sun,ri_sun); //农历星期转换
744 2 Conversion(c_sun,nian_sun,yue_sun,ri_sun); //农历转换
745 2
746 2 zimuo=0;
747 2 if ((key_moda==0)||(IRcord[0]==0x0E)) //设置和选择项目键
748 2 { DelayMs();
749 3 if((key_moda==0)||(IRcord[0]==0x0E))
750 3 {
751 4 if(id++==10) {id=0;}
752 4 ha=0;msec=0; //清闪烁标志
753 4 while((key_moda==0)||(IRcord[0]==0x0E))
754 4 {
755 5 Show_word();IRcord[0]=0x00;
756 5 }
757 4 }
758 3
759 3 }
760 2
761 2
762 2 if(id!=0)
763 2 {
764 3 if ((key_up==0)||(IRcord[0]==0x0A)) //增加
765 3 {
766 4 DelayMs();
767 4 if((key_up==0)||(IRcord[0]==0x0A))
768 4 {
769 5 while((key_up==0)||(IRcord[0]==0x0A))
770 5 {Show_word();IRcord[0]=0x00;
771 6
772 6 } //调用显示
773 5 ha=0;msec=0; //清闪烁标志
774 5
775 5 Set(id,0);
776 5 //调用时间调调整
777 5 }
778 4
779 4 }
780 3
781 3 if ((key_Down==0)||(IRcord[0]==0x09)) //减少
782 3 {
783 4 DelayMs();
784 4 if((key_Down==0)||(IRcord[0]==0x09))
785 4 {
786 5 while((key_Down==0)||(IRcord[0]==0x09))
787 5 {Show_word();IRcord[0]=0x00;
788 6
789 6 } //调用显示
790 5 ha=0;msec=0; //清闪烁标志
791 5 Set(id,1); //调用时间调调整
792 5 }
793 4
794 4 }
795 3 }
C51 COMPILER V8.08 蒧日提醒 10/25/2011 08:42:07 PAGE 14
796 2 else
797 2 {
798 3 if ((key_up==0)||(IRcord[0]==0x0A)) //增加
799 3 {
800 4 DelayMs();
801 4 if((key_up==0)||(IRcord[0]==0x0A))
802 4 {
803 5 while((key_up==0)||(IRcord[0]==0x0A))
804 5 {Show_word();IRcord[0]=0x00;
805 6
806 6 } //调用显示
807 5 ha=0;msec=0; //清闪烁标志
808 5 if(b!=0) //手动调整显示的内容
809 5 {
810 6 if(f++==6) //f为显示转换标志
811 6 f=0;
812 6 }
813 5 }
814 4
815 4 }
816 3 }
817 2 //------------------------
818 2 if (nn==1) //调用温湿度读取子程序
819 2 {RH(); }
820 2 //串口显示程序
821 2 //--------------------------
822 2 Show_word(); //待机显示按三秒间隔分别显示年、月日、星期、时分秒。
823 2
824 2 IRcord[0]=0x00;
825 2
826 2
827 2 }
828 1 }
829 /************************************************/
830
831 void tim0_isr (void) interrupt 1 using 1//定时器1中断服务函数
832 {
833 1 irtime++;
834 1 }
835 //外部中断解码程序
836 void ex0_isr (void) interrupt 2 using 2//外部中断1服务函数
837 {
838 1 static unsigned char i,p,z;
839 1 static bit startflag;
840 1
841 1 if(startflag)
842 1 {
843 2
844 2 if(irtime<208&&irtime>=109)//引导码 TC9012的头码
845 2 { i=0;
846 3 p=1;
847 3 z=0;
848 3 irdata[i]=irtime;
849 3 irtime=0;
850 3 }
851 2 z++;
852 2 if(z>=18)
853 2 {
854 3 irdata[p]=irtime;
855 3 irtime=0;
856 3 p++;
857 3 if(p==17)
C51 COMPILER V8.08 蒧日提醒 10/25/2011 08:42:07 PAGE 15
858 3 {
859 4 irokk=1;
860 4 p=0;
861 4 }
862 3 }
863 2 else
864 2 irtime=0;
865 2
866 2 }
867 1
868 1
869 1 else
870 1 {irtime=0;startflag=1;}
871 1
872 1 }
873 /************************************************/
874 void Ircordpro(void)//红外码值处理函数
875 {
876 1 unsigned char i, j, k;
877 1 unsigned char cord,value;
878 1
879 1 k=1;
880 1 for(i=0;i<2;i++)//处理4个字节
881 1 {
882 2 for(j=1;j<=8;j++) //处理1个字节8位
883 2 {
884 3 cord=irdata[k];
885 3 if(cord>25)//大于某值为1
886 3 {
887 4 value=value|0x80;
888 4 }
889 3 else
890 3 {
891 4 value=value;
892 4 }
893 3 if(j<8)
894 3 {
895 4 value=value>>1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -