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

📄 water.lst

📁 详细介绍了怎么利用单片机实现自身温度控制的程序!通过了实验验证!效果不错!
💻 LST
📖 第 1 页 / 共 5 页
字号:
 580   4                                      {
 581   5                                              DataChflag=0;
 582   5                                      }
 583   4                                      else
 584   4                                      {
 585   5                                              DataChflag++;
 586   5                                      }
 587   4                                      if(DataChflag==0)   
 588   4                                      {
 589   5                              //              DataChflag = 0;//退出更改数据模式
 590   5                                              StoreData2();
 591   5                                              write7279(SEGOFF,  LED_Enter);
 592   5                                              //刷新页面
 593   5                                              DispPage(Page); 
 594   5                                      }
 595   4                                      if(DataChflag==1)
 596   4                                      {
 597   5                                              Option=0;
 598   5                                              Page=0;
 599   5                                              write7279(SEGON,  LED_Enter);
 600   5                                              DispPage(Page); 
 601   5                                              lcd_LineChoose(2);
 602   5                                      }
 603   4              /*
 604   4                                      if(DataChflag==2)
 605   4                                      {
 606   4                                      //      DataChflag = 1;   //进入更改数据模式
 607   4                                              Option=1;
 608   4                                              Page=1;
 609   4                                              write7279(SEGON,  LED_Enter);
 610   4                                              DispPage(Page); 
 611   4                                              lcd_LineChoose(2);
 612   4                                      }*/
 613   4                              }
C51 COMPILER V7.06   WATER                                                                 10/28/2007 09:52:35 PAGE 11  

 614   3                              else
 615   3                              {
 616   4                                      nop();
 617   4                              }
 618   3                      }break;
 619   2                      case KEY_MODE:
 620   2                      {
 621   3                              Moder++;
 622   3                              if(Moder >= 2)
 623   3                              {
 624   4                                      Moder = 0;
 625   4                              }
 626   3                          DispPage(Page);     
 627   3                              if(Moder==0)
 628   3                              {
 629   4                                      DataChflag=0;
 630   4                                      begin=0;
 631   4                                      write7279(SEGOFF,  LED_Standby);
 632   4                                      write7279(SEGOFF,  LED_Enter);
 633   4                                      write7279(SEGOFF,  LED_Internal);
 634   4                                      write7279(SEGON,  LED_External);
 635   4                                      ExTempSet();
 636   4                                      delay(1000);
 637   4                              }
 638   3                              if(Moder==1)
 639   3                              {
 640   4                                      write7279(SEGON,  LED_Internal);
 641   4                                      write7279(SEGOFF,  LED_External);
 642   4                                      StoreData2();
 643   4                              }
 644   3                      }
 645   2                      default : break;
 646   2              }
 647   1      }
 648          
 649          void key_detect()                     
 650          {
 651   1              int key_number;
 652   1              uint i = 0;
 653   1              longflag = 0;
 654   1              KEY = 1;
 655   1              if(!KEY)
 656   1              {
 657   2                      delay(6000);
 658   2                      key_number = read7279(CMD_READ);
 659   2                      key_process(key_number);
 660   2                  delay(65000);
 661   2                      delay(64000);
 662   2                  delay(63000);
 663   2                      delay(62000);
 664   2                  delay(61000);
 665   2                  delay(60000);
 666   2                  KEY = 1;
 667   2                      while(!KEY)                                             //加减键长按连续调整
 668   2                      {
 669   3                              i++;
 670   3                              delay(200);
 671   3                              if(i >= 1000)
 672   3                              {
 673   4                                      i = 0;
 674   4                                      key_number = read7279(CMD_READ);
 675   4                                      if(key_number == KEY_SUB || key_number == KEY_ADD)
C51 COMPILER V7.06   WATER                                                                 10/28/2007 09:52:35 PAGE 12  

 676   4                                      {
 677   5                                              longflag = 1;
 678   5                                              key_process(key_number);
 679   5                                      }
 680   4                              }       
 681   3                      }       
 682   2              }
 683   1      }
 684          void Lcd_Start()
 685          {
 686   1              uint  i=0;
 687   1              LCD_init();     
 688   1              lcd_Clear();
 689   1      
 690   1              lcd_DispString(0, 0, "    E0-WC150    ");   
 691   1              lcd_DispString(1, 0, "  Water Chiller ");  
 692   1              lcd_DispString(2, 0, "    NO.:  01    ");
 693   1          lcd_DispString(3, 0, "  Warming Up... ");
 694   1       
 695   1      
 696   1              lcd_DelayMs(6510);
 697   1              lcd_DelayMs(6430);
 698   1              lcd_DelayMs(6550);
 699   1              Page=0;
 700   1              
 701   1              send_byte(CMD_RESET);         //7279 reset
 702   1              delay(50000);
 703   1              send_byte(CMD_RESET);  
 704   1              write7279(SEGON,  LED_Power);
 705   1              write7279(SEGON,  LED_External);
 706   1              EA = 1;  
 707   1              lcd_DelayMs(500);
 708   1              delay(1);       
 709   1      }
 710          
 711          /*******************************************测温测流量***********************************/
 712          uint GetADCData(uchar channel)
 713          {       
 714   1              uchar xdata dth,dtl;
 715   1              uint xdata sump = 0;
 716   1              uint xdata i;   
 717   1              for(i=0; i<20; i++)
 718   1              {
 719   2                      ADCCON2 = channel;   //select channel to convert
 720   2                      SCONV = 1;
 721   2                      while(SCONV);
 722   2                      dth = ADCDATAH;
 723   2                      dtl = ADCDATAL;
 724   2                      dth = dth&0x0f;
 725   2                      sump += dtl+dth*256;
 726   2                      delay(50);
 727   2              }
 728   1              return sump / 20;
 729   1      }
 730          
 731          uint filter(uchar channel)       //递推平均滤波法
 732          { 
 733   1          char  count;
 734   1          uint  sum = 0;
 735   1              if(channel == 0)
 736   1              {
 737   2                      filter0_buf[array0++] = GetADCData(0);
C51 COMPILER V7.06   WATER                                                                 10/28/2007 09:52:35 PAGE 13  

 738   2                      if (array0 == N0)  array0 = 0;  
 739   2                      for (count=0;count<N0;count++)
 740   2                      {
 741   3                         sum += filter0_buf[count]/10.0;
 742   3                      }
 743   2                      return (uint)(sum/N0*10.0);
 744   2              }
 745   1              else if(channel == 2)
 746   1              {
 747   2                      filter2_buf[array2++] = GetADCData(2);
 748   2                      if (array2 == N2)  array2 = 0;  
 749   2                      for (count=0;count<N2;count++)
 750   2                      {
 751   3                         sum += filter2_buf[count];
 752   3                      }
 753   2                      return (uint)(sum/N2);
 754   2              }
 755   1              else if(channel == 3)
 756   1              {
 757   2                      filter3_buf[array3++] = GetADCData(3);
 758   2                      if (array3 == N3)  array3 = 0;  
 759   2                      for (count=0;count<N3;count++)
 760   2                      {
 761   3                         sum += filter3_buf[count];
 762   3                      }
 763   2                      return (uint)(sum/N3);
 764   2              }
 765   1              else if(channel == 4)
 766   1              {
 767   2                      filter4_buf[array4++] = GetADCData(4);
 768   2                      if (array4 == N4)  array4 = 0;  
 769   2                      for (count=0;count<N4;count++)
 770   2                      {
 771   3                         sum += filter4_buf[count];
 772   3                      }
 773   2                      return (uint)(sum/N4);
 774   2              }
 775   1              else if(channel == 5)
 776   1              {
 777   2                      filter5_buf[array5++] = GetADCData(5);
 778   2                      if (array5 == N5)  array5 = 0;  
 779   2                      for (count=0;count<N5;count++)
 780   2                      {
 781   3                         sum += filter5_buf[count];
 782   3                      }
 783   2                      return (uint)(sum/N5);
 784   2              }
 785   1              else if (channel == 6)
 786   1              {
 787   2                      filter6_buf[array6++] = GetADCData(6);
 788   2                      if (array6 == N6)  array6 = 0;  
 789   2                      for (count=0;count<N6;count++)
 790   2                      {
 791   3                         sum += filter6_buf[count];
 792   3                      }
 793   2                      return (uint)(sum/N6);
 794   2              }
 795   1              else if (channel == 7)
 796   1              {
 797   2                      filter7_buf[array7++] = GetADCData(7);
 798   2                      if (array7 == N7)  array7 = 0;  
 799   2                      for (count=0;count<N7;count++)
C51 COMPILER V7.06   WATER                                                                 10/28/2007 09:52:35 PAGE 14  

 800   2                      {
 801   3                         sum += filter7_buf[count];
 802   3                      }
 803   2                      return (uint)(sum/N7);
 804   2              }               
 805   1      }
 806          
 807          
 808          void GetTemTout()                              //测出水温度
 809          {
 810   1              uint  adresult;
 811   1              float  v,tem,logval;
 812   1              float  m,n,z;
 813   1      
 814   1              adresult = filter(3);   
 815   1              v = adresult*5.0/4095.0; 
 816   1              logval = log(v/CUR);
 817   1              m = 1.120332914398244e-003 ;
 818   1              n = 2.354891980894096e-004*logval;
 819   1              z = 8.289547029771934e-008*logval*logval*logval;
 820   1              tem = 1.0/(m + n + z) - 273.15+0.11;    
 821   1              nop();  
 822   1              Tout= tem*100;      
 823   1      }
 824          
 825          
 826          void GetTemTin()                                                        //测入水温度
 827          {
 828   1              uint  adresult;
 829   1              float  v,tem,logval;
 830   1              float  m,n,z;
 831   1      
 832   1              adresult = filter(2);   
 833   1              v = adresult*5.0/4095.0; 
 834   1              logval = log(v/CUR);
 835   1              m = 1.120332914398244e-003 ;
 836   1              n = 2.354891980894096e-004*logval;
 837   1              z = 8.289547029771934e-008*logval*logval*logval;
 838   1              tem = 1.0/(m + n + z) - 273.15+0.11;
 839   1              nop();  
 840   1              Tin= tem*100;     
 841   1      }
 842          
 843          void GetTemset()                                                                //测量外控时的设定温度
 844          {
 845   1              uint  idata adresult;
 846   1              float idata v;
 847   1              adresult = filter(4);   
 848   1              v = adresult*5.0/4095.0; 
 849   1              nop();  
 850   1              TsetB= v*1000;      //温控1实际温度
 851   1      }
 852          /**************************************DA转换****************************************/
 853          void SendTout()      //电流设定,DAC0,
 854          {
 855   1              int  DAcode;                        //5v--6A需确认
 856   1              float v;
 857   1              v = Tout/1000.0;
 858   1              DAcode = (int)(4095/5.0*v);
 859   1              if(DAcode>4095)
 860   1              {
 861   2                      DAcode = 4095;
C51 COMPILER V7.06   WATER                                                                 10/28/2007 09:52:35 PAGE 15  

 862   2              }
 863   1              else if(DAcode<0)
 864   1              {
 865   2                      DAcode = 0;
 866   2              }
 867   1              DAC1H = DAcode/256;
 868   1              DAC1L = DAcode%256;
 869   1      }
 870          void SendLim()      //电流设定,DAC0,
 871          {
 872   1              int  DAcode;                        //5v--6A需确认

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -