📄 water.lst
字号:
873 1 float v;
874 1 v = Rate*1.0/100.0;
875 1 DAcode = (int)(4095/5.0*v);
876 1 if(DAcode>4095)
877 1 {
878 2 DAcode = 4095;
879 2 }
880 1 else if(DAcode<0)
881 1 {
882 2 DAcode = 0;
883 2 }
884 1 DAC0H = DAcode/256;
885 1 DAC0L = DAcode%256;
886 1 }
887
888
889 /***********************************外控温度设定程序**********************************/
890 void ExTempSet()
891 {
892 1 int i;
893 1 uint k;
894 1 uint j=0;
895 1 for(i=0;i<15;i++)
896 1 {
897 2 GetTemset();
898 2 k=TsetB;
899 2 j=j+k;
900 2 }
901 1 TsetB=j/15;
902 1 if(TsetB>3500||TsetB<500)
903 1 {
904 2 Errorflag[4]=1;
905 2 ErrorNum++;
906 2 }
907 1 else
908 1 {
909 2 Tset=TsetB;
910 2 }
911 1 }
912 /**********************************外控******************************************/
913 void Excontrol()
914 {
915 1 if(Moder==0)
916 1 {
917 2 if(Ready==0)
918 2 {
919 3 begin=0;
920 3 write7279(SEGOFF, LED_Standby);
921 3 }
922 2 if(Ready==1)
923 2 {
C51 COMPILER V7.06 WATER 10/28/2007 09:52:35 PAGE 16
924 3 begin=1;
925 3 write7279(SEGON, LED_Standby);
926 3 }
927 2 }
928 1 }
929 /**********************************PWM的输出*************************************/
930 void Pwmout(uint p)
931 {
932 1 PWM1H=26214/256; //PWM产生10HZ的脉冲
933 1 PWM1L=26214%256;
934 1
935 1 PWM0H=p/256; //控制输出占空比
936 1 PWM0L=p%256;
937 1
938 1 Star=1;
939 1 }
940
941 /***************************************控温过程*********************************/
942 void TempControl()
943 {
944 1 int DT;
945 1 int x;
946 1 int y;
947 1 int j;
948 1 DT=Tout-Tset;
949 1 x=Tset-Tout;
950 1 y=Toutc-Tout; //上次测温与此次之差
951 1 j=Tout-Toutc; //
952 1 if(DT>150)
953 1 {
954 2 Tc=26124;
955 2 Pwmout(Tc);
956 2 }
957 1 if(x>100)
958 1 {
959 2 PWMCON=0x80;
960 2 PWM=0;
961 2 Star=0;
962 2 Pout=0;
963 2 }
964 1 if(80<DT && DT<=150)
965 1 {
966 2 if(Star==1)
967 2 {
968 3 if(y>20)
969 3 {
970 4 Tc=Tc*0.70;
971 4 Pwmout(Tc);
972 4 }
973 3 else if(y<5||j>=0)
974 3 {
975 4 Tc=Tc*1.20;
976 4 if(Tc>26124)
977 4 {
978 5 Tc=26124;
979 5 }
980 4 Pwmout(Tc);
981 4 }
982 3 else
983 3 {
984 4 Pwmout(Tc);
985 4 }
C51 COMPILER V7.06 WATER 10/28/2007 09:52:35 PAGE 17
986 3 }
987 2 if(Star==0)
988 2 {
989 3 Tc=26124*0.5;
990 3 Pwmout(Tc);
991 3 }
992 2 }
993 1 if(10<DT && DT<=80)
994 1 {
995 2 if(Star==1)
996 2 {
997 3 if(y>15)
998 3 {
999 4 Tc=Tc*0.95;
1000 4 Pwmout(Tc);
1001 4 }
1002 3 else if(y<8||j>=0)
1003 3 {
1004 4 Tc=Tc*1.015;
1005 4 if(Tc>26124)
1006 4 {
1007 5 Tc=26124;
1008 5 }
1009 4 Pwmout(Tc);
1010 4 }
1011 3 else
1012 3 {
1013 4 Pwmout(Tc);
1014 4 }
1015 3 }
1016 2 if(Star==0)
1017 2 {
1018 3 Tc=26124*0.3;
1019 3 Star=1;
1020 3 Pwmout(Tc);
1021 3 }
1022 2 }
1023 1 if(0<DT && DT<=10)
1024 1 {
1025 2 if(Star==1)
1026 2 {
1027 3 if(y>10)
1028 3 {
1029 4 Tc=Tc*0.99;
1030 4 Pwmout(Tc);
1031 4 }
1032 3 else if(j>=0)
1033 3 {
1034 4 Tc=Tc*1.01;
1035 4 Pwmout(Tc);
1036 4 }
1037 3 else
1038 3 {
1039 4 if(y>3)
1040 4 {
1041 5 Tc=Tc*0.9996;
1042 5 Pwmout(Tc);
1043 5 }
1044 4 if(j>3)
1045 4 {
1046 5 Tc=Tc*1.0003;
1047 5 Pwmout(Tc);
C51 COMPILER V7.06 WATER 10/28/2007 09:52:35 PAGE 18
1048 5 }
1049 4 else
1050 4 {
1051 5 Pwmout(Tc);
1052 5 }
1053 4 }
1054 3 }
1055 2 if(Star==0)
1056 2 {
1057 3 Tc=26124*0.1;
1058 3 Pwmout(Tc);
1059 3 }
1060 2 }
1061 1
1062 1 //以上为实际温度比设定温度高得情况下制冷的过程
1063 1 //以下为实际温度比设定温度低的情况下控制的过程
1064 1 if(x<=50 && x>10)
1065 1 {
1066 2 if(Star==1)
1067 2 {
1068 3 Tc=Tc*0.92;
1069 3 Pwmout(Tc);
1070 3 }
1071 2 if(Star==0)
1072 2 {
1073 3 Pout=0;
1074 3 }
1075 2 }
1076 1 if(0<x && x<=10)
1077 1 {
1078 2 if(Star==1)
1079 2 {
1080 3 Tc=Tc*0.9996;
1081 3 Pwmout(Tc);
1082 3 }
1083 2 else
1084 2 {
1085 3 nop();
1086 3 }
1087 2 }
1088 1 Toutc=Tout;
1089 1 }
1090
1091
1092 /******************定时器1的中断服务程序**********************/
1093
1094 void intsvr1(void) interrupt 1
1095 {
1096 1 //重新装入计时器1的初值
1097 1 TR0=0;
1098 1 TH0 = (65536-55924)/256;
1099 1 TL0 = (65536-55924)%256;
1100 1 Timernum+=1;
1101 1 if (Timernum >= 300)//1S
1102 1 {
1103 2 TR1 = 0;
1104 2 Rate = (TH1*256+TL1)*5.67;
1105 2 Timernum = 0;
1106 2 TH1 = 0x00;
1107 2 TL1 = 0x00;
1108 2 TR1 = 1;
1109 2 }
C51 COMPILER V7.06 WATER 10/28/2007 09:52:35 PAGE 19
1110 1 TR0 = 1;
1111 1 }
1112
1113
1114 /********************定时器初始化*******************************/
1115
1116 void Timer_init(void)
1117 {
1118 1 //设置中断和定时器
1119 1 TMOD = 0x51; //定时器1计数,定时器0计时
1120 1 TH1= 0x00;
1121 1 TL1 = 0x00;
1122 1 TH0 = (65536-55924)/256; // 单位计时50ms
1123 1 TL0 = (65536-55924)%256;
1124 1 EA=1; //开放总中断,
1125 1 ET0=1; //暂不允许计时器中断
1126 1 ET1=0;
1127 1 PT0=0; //定时器中断优先级
1128 1 PT1=1;
1129 1
1130 1 IT0 = 1; //外部中断,电平触发
1131 1 PX0 = 1;
1132 1
1133 1 TR0 = 1; //定时器开始
1134 1 TR1 = 0;
1135 1
1136 1 }
1137
1138 /**************************************长延时*********************************/
1139 void TimeCountInt()
1140 {
1141 1 IEIP2 |= 0x04; //允许计时器中断
1142 1 INTVAL = 1; //计时间隔一秒钟
1143 1 }
1144
1145 void TimeCount_INT(void) interrupt 10
1146 {
1147 1 Second++;
1148 1 N++;
1149 1 if(Second==3)
1150 1 {
1151 2 Time1=1;
1152 2 }
1153 1 if(Second==4)
1154 1 {
1155 2 Time=1;
1156 2 }
1157 1 if(T-Tout>80)
1158 1 {
1159 2 Time2=1;
1160 2 }
1161 1 if(Second==6)
1162 1 {
1163 2 // I++;
1164 2 /* if(I>=1)
1165 2 {
1166 2 Time5=1;
1167 2 I=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -