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

📄 fuzzy_pid.lst

📁 针对被控对象存在的大惯性、纯滞后的特点,采用了模糊控制方式的控制策略,设计了一种高精度温度控制算法
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   FUZZY_PID                                                             01/17/2007 13:01:08 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE FUZZY_PID
OBJECT MODULE PLACED IN fuzzy_PID.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fuzzy_PID.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*********************************************************************************************************
             -******
   2                                                                                                          水箱温度模糊控制系统设计
   3          
   4          设计思路:
   5                                  将程序划分为三个模式:1 随机模式(随机显示温度)
   6                                                                            2 修改模式(修改参数设定值)
   7                                                                            3 测控模式(每个周期测一次温度并显示出来,输出通电脉冲 )
   8                                                          
   9          调试现象:
  10                                  1 LED显示有问题
  11                                          原因:温度转换时间过长(超过1S)
  12                                          解决办法:去除1S延时
  13                                          结果:LED正常显示,但是亮度不够  
  14          
  15          温度传感器DS1820测量温度
  16                                                                                                                                                                                  2007/01/15
  17                                                                                                                                                                                  8:56
  18                                                                                                                                                                                          
  19                                                                                                                                                                                                  致用楼311实验室 
  20          **********************************************************************************************************
             -******/
  21          
  22          #include <reg52.h>
  23          #include <absacc.h>
  24          #include<stdio.h>
  25          
  26          #define led_data XBYTE[0xe000]    /*显示数据端口*/
  27          #define led_sel XBYTE[0xc000]     /*显示器选择端口*/
  28          #define key XBYTE[0xa000]     /*键盘端口*/
  29          #define uchar unsigned char
  30          #define uint unsigned int 
  31          #define Temp_max 80
  32          
  33          sbit ddata=P1^0;                //输入温度数据端 
  34          sbit outPCM=P1^7;               //输出通电脉冲
  35          sbit LED1=P1^1;                 //上限温度报警指示灯 
  36          sbit LED2=P1^2;                 //采样周期指示灯 
  37          sbit LED3=P1^3;                 //通电指示灯 
  38          
  39          sbit LED4=P1^4;                 //测控模式指示灯
  40          sbit LED5=P1^5;                 //修改模式指示灯
  41          sbit LED6=P1^6;                 //随机模式指示灯 
  42          
  43          uchar code table[13]={ 0x3F,0x06,0x5B,0x4F,0x66,
  44                                   0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x63,0};                                 //LED显示变换   C O 灭 
  45          
  46          uchar code ttable[16]={0x0,0x01,0x01,0x02,0x03,0x03,
  47                                                           0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};   //小数位表,一位 
  48          
  49          uchar code Ucontrol[7][7]={{6,6,6,5,5,4,3},                                                                              //输出控制规则表 
  50                                                                  {6,5,4,3,3,2,1},
  51                                                                  {4,3,2,1,0,0,0},
  52                                                                  {3,2,1,0,0,0,0},
  53                                                                  {3,2,1,0,0,0,0},
C51 COMPILER V7.06   FUZZY_PID                                                             01/17/2007 13:01:08 PAGE 2   

  54                                                                  {2,1,0,0,0,0,0},
  55                                                                  {1,0,0,0,0,0,0}};
  56          
  57          uchar Temp[7];                  //存储温度
  58                                                          //0 十位
  59                                                          //1 个位
  60                                                          //2 小数位
  61                                                          //3 温度标号 C 
  62                                                          //4 前次温度
  63                                                          //5 当前温度 
  64          
  65          uchar para[5]={6,8,1,50,1};     //存储参数       0 Ts 采样周期
  66                                                                                                  //1 TT 温度常数 ,改变论域 T0 
  67                                                                                                  //2 Ku  通电时间常数 Ton
  68                                                                                                  //3 TR 给定温度
  69                                                                                                  //4 Kec 温度变化常数 K 
  70          
  71          uchar count[3];                                                         //中断次数
  72                                                                                                  //count[0]输出控制时间的中断次数 ;
  73                                                                                                  //count[1]采样中断次数 ;
  74                                                                                                  //count[2]记录中断次数
  75          bit serial_flag;                                                                        //开启串口发送数据标志
  76          bit read_flag;                                                          //采样标志 
  77          uchar outTime=0;                                                        //输出控制时间 
  78          uchar button;                                                           //按键1,2,3,4 分别表示K1 ,K2,K3,K4  
  79          uchar parameter=0;                                                      //参数标号
  80          uchar show_LED[7]={2,0,0,7,0,1,12};                     //LED灯显示值
  81          /**************************************************************************************************
  82                                                                                                          延时子程序
  83          说明:uchar t 最多可延时256ms (uint t可用于更长时间的延时)
  84          ***************************************************************************************************/
  85          void delay(uchar t)
  86          {
  87   1              uchar i;
  88   1              while(t--)
  89   1                   {
  90   2                              for(i=0;i<125;i++)
  91   2                                 {
  92   3                                 }
  93   2                        }
  94   1      }
  95          /***************************************************************************************************
  96                                                                                                          LED显示子程序 
  97          功能:
  98          ***************************************************************************************************/
  99          void show(void)
 100          {
 101   1               uchar i;
 102   1               uchar led_settle=0xfe;
 103   1               for(i=0;i<7;i++)
 104   1                      {
 105   2                              led_sel=led_settle;
 106   2                              if(i==1)
 107   2                                      led_data=table[show_LED[i]]+0x80;       
 108   2                              else
 109   2                                      led_data=table[show_LED[i]];
 110   2                              led_settle=(led_settle<<1)|(led_settle>>7);
 111   2                              delay(1);
 112   2                      }       
 113   1      /*      led_sel=0xfe;                                   //显示十位
 114   1              led_data=table[show_LED[0]];
 115   1              delay(1);
C51 COMPILER V7.06   FUZZY_PID                                                             01/17/2007 13:01:08 PAGE 3   

 116   1      
 117   1              led_sel=0xfd;
 118   1              led_data=table[show_LED[1]]+0x80;               //显示个位
 119   1              delay(1);
 120   1      
 121   1              led_sel=0xfb;                                           //显示小数位
 122   1              led_data=table[show_LED[2]];
 123   1              delay(1);
 124   1      
 125   1      
 126   1              led_sel=0xf7;                                   //显示温度表号 C
 127   1              led_data=table[show_LED[3]];
 128   1              delay(1);
 129   1      
 130   1              led_sel=0xef;                                    
 131   1              led_data=table[show_LED[4]];
 132   1              delay(1);
 133   1      
 134   1      
 135   1              led_sel=0xdf;                                   //显示输出通电时间 
 136   1              led_data=table[show_LED[5]];
 137   1              delay(1); */
 138   1      
 139   1      }
 140          /***************************************************************************************************
 141                                                                                                                                  键盘扫描子程序
 142          ***************************************************************************************************/
 143          void keyscan(void)                    
 144          {   
 145   1       //   uchar i;
 146   1      //      uchar key_settle=0xfe;
 147   1              key=0xff;                        //为输入键盘信息作准备
 148   1          led_sel=0xfe;
 149   1      //    led_data=0;
 150   1      
 151   1      /*      for(i=1;i<5;i++)
 152   1                      {
 153   1                              delay(4);
 154   1                              if(key==key_settle)
 155   1                                      {
 156   1                                              button=i;
 157   1                                              while(key==key_settle);
 158   1                                      }
 159   1                              key_settle=(key_settle<<1)|(key_settle>>7);
 160   1                      }       
 161   1              button=0; */
 162   1      
 163   1          if(key==0xfe) 
 164   1                 {
 165   2                // for (i=0; i<500; i++);
 166   2                         delay(4);
 167   2                         button=1;  
 168   2                         while(key==0xfe);
 169   2                 }
 170   1      
 171   1                else if(key==0xfd) 
 172   1                 {  
 173   2                // for (i=0; i<500; i++);
 174   2                         delay(4);
 175   2                 button=2;  
 176   2                 while(key==0xfd);
 177   2                 }
C51 COMPILER V7.06   FUZZY_PID                                                             01/17/2007 13:01:08 PAGE 4   

 178   1      
 179   1                else if(key==0xfb) 
 180   1                 {  
 181   2                 //for (i=0; i<500; i++);
 182   2                 delay(4);
 183   2                         button=3; 
 184   2                 while(key==0xfb);
 185   2                 }
 186   1                else if(key==0xf7) 
 187   1                 {  
 188   2                 //for (i=0; i<500; i++);
 189   2                 delay(4);
 190   2                         button=4; 
 191   2                 while(key==0xf7);
 192   2                 }
 193   1                 else
 194   1                              button=0;        
 195   1                 
 196   1      }
 197          /***************************************************************************************************
 198                                                                                                          初始化DS18B20子
 199          产生复位脉冲
 200          ***************************************************************************************************/
 201           void TxReset(void)
 202           {
 203   1              uint i;
 204   1              ddata=0;
 205   1      
 206   1              i=100;                                                    //拉低约900us
 207   1              while(i>0)
 208   1                   {
 209   2                              i--;
 210   2                        }
 211   1      
 212   1              ddata=1;
 213   1              i=4;
 214   1              while(i>0)
 215   1                   {
 216   2                              i--;
 217   2                        }
 218   1      }
 219          
 220          /***************************************************************************************************
 221                                                                                                            等待子程序
 222          等待应答脉冲
 223          ***************************************************************************************************/
 224          void RxWait(void)
 225          {
 226   1              uint i;
 227   1              while(ddata);
 228   1              while(~ddata);
 229   1              i=4;
 230   1              while(i>0)
 231   1                      {
 232   2                              i--;
 233   2                      }
 234   1      }
 235          /***************************************************************************************************
 236                                                                                                          读取一位数据子程序
 237          
 238          ***************************************************************************************************/
 239          bit RdBit(void)

⌨️ 快捷键说明

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