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

📄 play.lst

📁 基于c8051f单片机的工控机的开发
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.07   PLAY                                                                  04/24/2003 17:03:47 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE PLAY
OBJECT MODULE PLACED IN play.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.exe play.c DB OE

stmt level    source

   1          //*********************************************************************
   2          #include<c8051F120.h>
   3          //*********************************************************************
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          #define ulong unsigned long
   7          //*********************************************************************
   8          //*********************************************************************
   9          //此处的变量均是在程序中将要修改的值。
  10          #define MUL 0.0167548825//与油缸直径有关的比例系数,此值的修改要根据油缸的直径来计算
  11          #define PY  805         //此值为偏移值,与MUL配合使用,确定输出压力与油缸直径的关系
  12          #define BL  0.2        //此值为实时压力在显示压力中的权重值,这里取0.2,表示在显示压力时,真实值
  13                                  //占0.2的权重,那么理论压力值的权重就为(1-0.2)=0.8,换句话说,只要
  14                                                          //设定了真实压力值的权重BL值,那么理论压力值的权重在程序中自动就会为:
  15                                                          //(1-BL)。
  16          //基本上只要修改以上3个变量即可。
  17          //*********************************************************************
  18          //*********************************************************************
  19          //在LCD Flash中的各种预置画面的调用参数设定
  20          #define WELCOMESCR 0x00//欢迎界面
  21          #define MENUSELECT 0x01//菜单选择画面
  22          #define PIDPARASET 0x04//PID参数设定画面
  23          #define CLOSSYSTEM 0x06//关机画面
  24          #define PARAUPLOAD 0x07//工艺参数上载画面
  25          #define SENPARASET 0x0A//传感器温度、压力设置画面
  26          #define NOWATERALM 0x0C//断水警告画面
  27          #define PROPARASET 0x0E//工艺参数设定画面
  28          #define WORKSCREEN 0x14//工作画面
  29          #define COMMUERROR 0x19//与808P表通信错误画面
  30          #define PRONUMSELT 0x1B//工艺序号选择画面
  31          #define POWERERROR 0x1D//压力传感器错误画面
  32          #define LOADINPARA 0x1F//正在上载参数画面
  33          //AI808P
  34          #define AIADDR 1//808P地址定义
  35          //温度、压力参数初始化
  36          #define HITEMP 1200
  37          #define LOTEMP 400
  38          #define HIPOWER 255
  39          #define LOPOWER 13
  40          //*********************************************************************
  41          //P0.0 is UART0 TX0,P0.1 is UART0 RX0;
  42          //P0.2 is UART1 TX1,P0.3 is UART1 RX1;
  43          //P0.4 is /INT0,P0.5 is /INT1 
  44          //P0.6 is IIC SCL, P0.7 is IIC SDA;
  45          sbit LCDDTR=P0^3;//LCD DTR
  46          sbit NOWATER=P0^4;//water is bad
  47          sbit DISTANCE=P0^5;//行程开关
  48          sbit SCL=P0^6;
  49          sbit SDA=P0^7;
  50          sbit KEYY0=P1^0;
  51          sbit KEYY1=P1^1;
  52          sbit KEYY2=P1^2;
  53          sbit KEYY3=P1^3;
  54          sbit KEYY4=P1^4;
  55          sbit KEYY5=P1^5;
C51 COMPILER V7.07   PLAY                                                                  04/24/2003 17:03:47 PAGE 2   

  56          sbit BEEP=P1^7;//Beep pin
  57          sbit WIND=P2^0;//风机
  58          sbit OUT1=P2^2;
  59          sbit OUT2=P2^3;
  60          sbit TG=P2^4;
  61          sbit KEYX0=P2^5;
  62          sbit KEYX1=P2^6;
  63          sbit KEYX2=P2^7;
  64          sbit TR=P3^0;
  65          sbit HDISTANCE=P3^1;//高位行程开关
  66          sbit LDISTANCE=P3^3;//低位行程开关
  67          sbit MOTOR=P3^5;//motor control
  68          sbit TPFC=P3^6;//two phase four cut-through control
  69          //
  70          #define TPFCOFF TPFC=1
  71          #define TPFCON TPFC=0
  72          #define MOTORRUN MOTOR=0
  73          #define MOTORSTOP MOTOR=1
  74          //*********************************************************************
  75          uchar xdata key_temp[3]={0x3F,0x3F,0x3F};//用来记录3排按键值的寄存器组
  76          bit keyturn;//用来防止重复按键标志位
  77          uchar xdata KEY=0xFF;//键值
  78          //
  79          uchar xdata AIBUF[10];//808P表的回送数据缓冲寄存器
  80          uchar xdata AIDATNUM;//808P表接收数据计数器
  81          bit AIOVERFLG;//808P转换完成标志
  82          bit TIMEFLG;//时间超过标志
  83          uchar xdata AITIME;//808P转换时间记录
  84          uchar xdata ERRORNUM;//AI808P错误次数
  85          //
  86          uchar xdata GYNUM=1;//工艺号
  87          //
  88          uint xdata PID_P;//PID参数
  89          uint xdata PID_I;
  90          uint xdata PID_D;
  91          float xdata PrevError=0,PrevDError=0,POWEROUT=0;//PID参数计算时用到的差值种类
  92          //
  93          uint xdata TEMPRATURE_hi=HITEMP;//传感器温度设定最大值
  94          uint xdata TEMPRATURE_lo=LOTEMP;//传感器温度设定最小值
  95          uchar xdata POWER_hi=HIPOWER;//压力传感器压力最高值
  96          uchar xdata POWER_lo=LOPOWER;//压力传感器压力最小值
  97          uchar xdata REALPOWER;//实时压力值无符号字节型
  98          float xdata REALPOWERF;//实时压力值浮点型
  99          //
 100          bit AUTO_MAN;//手动、自动识别为,1表示自动,0表示手动
 101          bit MANFLG=1;//手动按钮轮训识别位
 102          //
 103          uchar xdata T3TIME=0;//定时器3的记数器
 104          bit SAMPLEN=0;//开始采样标志
 105          uint xdata TEMPTIME;//每一段的运行时间
 106          uchar xdata SEGMENT;//当前段号
 107          bit PIDEN=0;//PID计算使能位
 108          //*********************************************************************
 109          struct Process
 110          {
 111                  uchar power[20];
 112                  uint  time[20],temperature[20];
 113          };
 114          struct Process xdata GY[61];//定义61个工艺,每个工艺20段时间、温度、压力
 115          //*********************************************************************
 116          void PID(float POWERSET)
 117          {
C51 COMPILER V7.07   PLAY                                                                  04/24/2003 17:03:47 PAGE 3   

 118   1          float dderror,derror,error;     
 119   1          uint dacvalue;
 120   1          error=POWERSET-REALPOWERF;    
 121   1          derror=error-PrevError;
 122   1              dderror=derror-PrevDError;             
 123   1          POWEROUT+=(float)PID_P/1000.0*derror+(float)PID_I/1000.0*error+(float)PID_D/1000.0*dderror; 
 124   1              if(POWEROUT<0)
 125   1              {
 126   2                      POWEROUT=0;
 127   2              }
 128   1              if(POWEROUT>196360.0)//196350
 129   1              {
 130   2                      POWEROUT=196360.0;
 131   2              }
 132   1              dacvalue=(uint)(POWERSET*MUL+PY);//这里必须有一个dacvalue与POWEROUT的关系比例式
 133   1              DAC0L=dacvalue%256;
 134   1              DAC0H=dacvalue/256;
 135   1              PrevError=error;
 136   1              PrevDError=derror;
 137   1      }
 138          //*********************************************************************
 139          //delay function
 140          void delay1s()
 141          {
 142   1              uchar i,j,k;
 143   1              for(i=0;i<214;i++)
 144   1              for(j=0;j<255;j++)
 145   1              for(k=0;k<125;k++)
 146   1              {}
 147   1      }
 148          void delay100us()
 149          {
 150   1              uchar i,j,k;
 151   1              for(i=0;i<200;i++)
 152   1              for(j=0;j<1;j++)
 153   1              for(k=0;k<1;k++)
 154   1              {}
 155   1      }
 156          void delay200ms()
 157          {
 158   1              uchar i,j,k;
 159   1              for(i=0;i<43;i++)
 160   1              for(j=0;j<255;j++)
 161   1              for(k=0;k<255;k++)
 162   1              {}
 163   1      }
 164          void delay5ms()
 165          {
 166   1              uchar i,j,k;
 167   1              for(i=0;i<1;i++)
 168   1              for(j=0;j<200;j++)
 169   1              for(k=0;k<100;k++)
 170   1              {}
 171   1      }
 172          void delay4us()
 173          {
 174   1              uchar i,j,k;
 175   1              for(i=0;i<2;i++)
 176   1              for(j=0;j<1;j++)
 177   1              for(k=0;k<1;k++)
 178   1              {}
 179   1      }
C51 COMPILER V7.07   PLAY                                                                  04/24/2003 17:03:47 PAGE 4   

 180          //*********************************************************************
 181          //LCD operate
 182          void LCDDAT(uchar dat)
 183          {
 184   1              SFRPAGE=UART1_PAGE;
 185   1              while(LCDDTR){}
 186   1              SBUF1=dat;
 187   1              while(!TI1){}
 188   1              TI1=0;
 189   1              SFRPAGE=LEGACY_PAGE;
 190   1      }
 191          void LCDASIIC()//设置LCD为西文显示
 192          {
 193   1              LCDDAT(0x1B);
 194   1              LCDDAT(0x24);
 195   1      }
 196          void LCDHANZ()//设置汉字
 197          {
 198   1              LCDDAT(0x1B);
 199   1              LCDDAT(0x23);
 200   1      }
 201          void LCDGBCOLOR(uchar fc,bc)//设置光标的前景色和背景色
 202          {
 203   1              LCDDAT(0x1B);
 204   1              LCDDAT(0x38);
 205   1              LCDDAT(fc);//前景色
 206   1              LCDDAT(bc);//背景色
 207   1      }
 208          void LCDXY(uchar x,y)//光标移动到x,y处
 209          {
 210   1              LCDDAT(0x1B);
 211   1              LCDDAT(0x47);
 212   1              LCDDAT(x);
 213   1              LCDDAT(y);
 214   1      }
 215          void LCDFCOLOR(uchar color)//设置前景色
 216          {
 217   1              LCDDAT(0x1B);
 218   1              LCDDAT(0x43);
 219   1              LCDDAT(color);
 220   1      }
 221          void LCDGBOC(uchar ok)//光标显示与否
 222          {
 223   1              LCDDAT(0x1B);
 224   1              LCDDAT(0x57);
 225   1              LCDDAT(ok);//光标显示
 226   1      }
 227          void LCDRSFT(uchar n)//光标右移n个字符
 228          {
 229   1              LCDDAT(0x1B);
 230   1              LCDDAT(0x52);
 231   1              LCDDAT(n);
 232   1      }
 233          void LCDOVERLAP(uchar dat)//覆盖、重叠显示方式选择
 234          {
 235   1              LCDDAT(0x1B);
 236   1              LCDDAT(0x58);
 237   1              LCDDAT(dat);
 238   1      }
 239          void LCDLINE(uchar color,x1l,x1h,y1l,y1h,x2l,x2h,y2l,y2h)//绘制直线
 240          {
 241   1              LCDDAT(0x1B);
C51 COMPILER V7.07   PLAY                                                                  04/24/2003 17:03:47 PAGE 5   

 242   1              LCDDAT(0x46);
 243   1              LCDDAT(color);
 244   1              LCDDAT(x1l);
 245   1              LCDDAT(x1h);
 246   1              LCDDAT(y1l);
 247   1              LCDDAT(y1h);
 248   1              LCDDAT(x2l);
 249   1              LCDDAT(x2h);
 250   1              LCDDAT(y2l);
 251   1              LCDDAT(y2h);
 252   1      }

⌨️ 快捷键说明

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