⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 water.lst

📁 详细介绍了怎么利用单片机实现自身温度控制的程序!通过了实验验证!效果不错!
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -