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

📄 111.lst

📁 开发环境Keil 51
💻 LST
字号:
C51 COMPILER V7.06   111                                                                   03/19/2007 22:42:42 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 111
OBJECT MODULE PLACED IN 111.OBJ
COMPILER INVOKED BY: D:\soft\keil\C51\BIN\C51.EXE 111.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //////////////////////////////////////
   2          //////////智能抽水系统软件更新设计
   3          ///////////      2007-3-18
   4          ///////// /        杨峰
   5          ///////////////////////////////////////
   6          
   7              #include "89s51.h"
   8                  #include "LCD.H"
   9                  #define uint unsigned int
  10              #define  K1   P0_4       // 水位上限加
  11              #define  K2   P0_3       // 水位上限减
  12                  #define  K3   P0_2       // 水位下限加
  13              #define  K4   P0_1       // 水位下限减
  14                  #define  K5   P0_0       //应急键 按下则强制停止抽水
  15          
  16              long int juli;
  17                  unsigned char second;
  18                  unsigned char shang=100,xia=1  ;    //初始化  最高水位限制 为100 最低水位1 
  19                  static long int Recieve_Time;
  20                  void Caculate_juli(void);               //计算距离
  21          /////////////////////////////////////////////////////////////////////   
  22          
  23             void delay(char m)                   //超声波发送延时
  24                  {
  25   1               unsigned char i,j;
  26   1               for(i=0;i<m;i++)
  27   1                      for(j=0;j<80;j++);
  28   1          }
  29          
  30          ///////////////////////////////////////////////////////////////////
  31                  void Delay1ms(int n)              //LCD显示延时
  32                  {
  33   1              int i,j;
  34   1              for(i=0;i<n;i++)
  35   1                      for(j=0;j<125;j++);
  36   1              }
  37          
  38          
  39          ///////////////////////////////////////////////////////////
  40                  void intet0(void) interrupt 1 using 1  //T0益出中断,得到超声波返回时间 
  41                  {
  42   1                TH0=0X00;  //重新赋值
  43   1                TL0=0X00;
  44   1            second++; // T0益出中断次数++
  45   1              }
  46          
  47          /////////////////////////////////////////////////////////////
  48                  void intex1(void) interrupt 2 using 1//  外部中断1服务程序
  49                  {
  50   1              union {unsigned int time;unsigned char t[2];}count;//定义一个共用体,用来存放T0的值,将TH0 TL0的值整合在一
             -起
  51   1              IE=0;
  52   1              TR0=0;
  53   1              count.t[0]=TH0;
  54   1          count.t[1]=TL0;             //读取时间,计数多少则为多少US
C51 COMPILER V7.06   111                                                                   03/19/2007 22:42:42 PAGE 2   

  55   1              Recieve_Time=count.time;
  56   1              TH0=0;      //T0重新赋初值
  57   1              TL0=0;
  58   1              IE=0x8e;                //开启中断      
  59   1              Caculate_juli();//计算距离
  60   1              }
  61          ////////////////////////////////////////////////////////////
  62                  void Caculate_juli(void)                //计算距离
  63                  {
  64   1              unsigned char i;                //secondT0溢出次数
  65   1              int Speed=170;          // 340/2=170
  66   1              juli=Recieve_Time*Speed;//Recieve_Time(us)*340(m/s)*10-6  
  67   1              //juli/=2000000;         //若是 Speed=340;       则如此 
  68   1              for(i=0;i<second;i++)
  69   1              {
  70   2                      juli+=11140000;         //11.14为T0溢出一次对应距离      补齐八位是为了方便拆开显示
  71   2                      //juli/=1000000;
  72   2              }
  73   1              second=0;        //中断记数器清零
  74   1              }
  75          //////////////////////////////////////////////////////////////
  76                  void Initial_display()   //显示初始化
  77                  {
  78   1          WriteInstruct(0x80);
  79   1          WriteString("shuiwei:"); 
  80   1              }
  81          ////////////////////////////////////////////////////////////
  82                  void display()//显示程序
  83                  {
  84   1              long int temp;
  85   1              unsigned char i;
  86   1              unsigned char value[8]; //存放JULI
  87   1              for(i=0;i<8;i++)        //逐一拆字 方便LCD显示
  88   1              {
  89   2                      value[i]=temp%10;
  90   2                      temp/=10;
  91   2              }
  92   1              WriteInstruct(0x89); //在 shuiwei 后显示距离
  93   1              WriteData(value[7]+0x30);//从高位向地位逐一显示 只显示四位 精度为CM
  94   1              WriteData(value[6]+0x30); 
  95   1              WriteString(".");       //小数点显示
  96   1              WriteData(value[5]+0x30);
  97   1              WriteData(value[4]+0x30);       //显示两位小数,精度到CM
  98   1              //Write_Data(value[3]+0x30); //后四位丢弃
  99   1              //Write_Data(value[2]+0x30);
 100   1              //Write_Data(value[1]+0x30);
 101   1              //Write_Data(value[0]+0x30);
 102   1      
 103   1         /* WriteInstruct(0xc0);  // 显示格式控制
 104   1              WriteData(juli/10+'0');
 105   1          WriteData(juli%10+'0');
 106   1              WriteString(":");*/
 107   1              WriteInstruct(0xc0);
 108   1              WriteData(shang/10+'0');
 109   1          WriteData(shang%10+'0');
 110   1          WriteString(":");
 111   1          WriteData(xia/10+'0');
 112   1          WriteData(xia%10+'0');
 113   1          WriteString(":"); // 空格有影响 " : "
 114   1         
 115   1              }
 116          
C51 COMPILER V7.06   111                                                                   03/19/2007 22:42:42 PAGE 3   

 117          
 118          ////////////////////////水位设定////////////////////////////
 119          
 120                   void keyboard()      //键盘程序
 121                   {
 122   1                     if(K1==0)           //最高水位限制为: 60---100
 123   1                         { 
 124   2                              Delay1ms(10);  //键消抖
 125   2                          while(!K1)     //P3.0连续低电平时shang连续加1
 126   2                                      {  
 127   3                                      if(shang!=100) //最高水位限制为100
 128   3                                   {   
 129   4                                       shang++;
 130   4                                       display();
 131   4                                       Delay1ms(200);
 132   4                                       }
 133   3                                   else 
 134   3                                      { 
 135   4                                            shang=60;        //shang等于100时,shang=60
 136   4                                            display();
 137   4                                                Delay1ms(200);
 138   4                                          }
 139   3                                  }
 140   2                      }
 141   1                 
 142   1                              if(K2==0)
 143   1                         { 
 144   2                              Delay1ms(10);
 145   2                          while(!K2)       //P3.0连续低电平时shang连续减一
 146   2                                      {  
 147   3                                      if(shang!=60)
 148   3                                   {   
 149   4                                       shang--;
 150   4                                       display();
 151   4                                       Delay1ms(200);
 152   4                                       }
 153   3                                   else 
 154   3                                      { 
 155   4                                            shang=100;   //shang等于60时,shang=100
 156   4                                            display();
 157   4                                                Delay1ms(200);
 158   4                                          }
 159   3                                  }
 160   2                      }
 161   1      
 162   1                              if(K3==0)      /// 最低水位限制为  1-20
 163   1                              { 
 164   2                              Delay1ms(10);
 165   2                          while(!K3)  //P3.0连续低电平时xia连续加1
 166   2                                      {  
 167   3                                      if(xia!=20)
 168   3                                   {   
 169   4                                      xia++;
 170   4                                              display();
 171   4                                              Delay1ms(200);
 172   4                                       }
 173   3                                   else 
 174   3                                    { 
 175   4                                            xia=0;       //xia等于20时,day=1
 176   4                                            display();
 177   4                                                Delay1ms(200);
 178   4                                         }
C51 COMPILER V7.06   111                                                                   03/19/2007 22:42:42 PAGE 4   

 179   3                                  }
 180   2                      }
 181   1      
 182   1                              if(K4==0)
 183   1                              { 
 184   2                              Delay1ms(10);
 185   2                          while(!K4)           //P3.0连续低电平时xia连续-1
 186   2                                      {  
 187   3                                       if(xia!=1)
 188   3                                    {   
 189   4                                 xia--;
 190   4                                         display();
 191   4                                         Delay1ms(200);
 192   4                                        }
 193   3                                    else 
 194   3                                      { 
 195   4                                            xia=200;      //xia等于1时,xia=60
 196   4                                            display();
 197   4                                                Delay1ms(200);
 198   4                                          }
 199   3                                  }
 200   2      
 201   2                      }
 202   1      
 203   1                        if(K5==0)     
 204   1                        {
 205   2                          Delay1ms(10);
 206   2                      while(!K5)  
 207   2                          {
 208   3                         
 209   3                             P2_1=1; //强制关机。
 210   3                         
 211   3                          }
 212   2                        }
 213   1                      
 214   1                              
 215   1      }
 216          
 217          //////////////////////////////////////////////////////////////////
 218          //////////////////////系统主程序/////////////////////////////////
 219          
 220           
 221              void mian(void)
 222                  {
 223   1           IE=0x86;   // EA=1  允许外中断1 T0 中断
 224   1           TMOD=0x01; //T0模式一
 225   1           TH0=0x00;  //定时初值
 226   1           TL0=0x00;  //大于65536以后又需要重新开始记数了  中断一次则标志位加一(65536US)再算时间时候标志位乘以6
             -5536
 227   1               IP=0x04;
 228   1               Initial_LCD();  //  初始化函数调用
 229   1           Initial_display();//
 230   1           display();
 231   1           while(1)
 232   1           {
 233   2              keyboard();             //调用键盘
 234   2                      display();              //
 235   2                      P0_6=1; //发送超声波
 236   2              TR0=1;          //启动定时器0 测量超声波发射到接收的时间
 237   2              delay(5);       // 延时,抗干扰 必须小于超声波回波时间
 238   2              P0_6=0; //停止发送
 239   2              if(juli<xia)    //现在测量的距离小于设定距离 则启动电机抽水
C51 COMPILER V7.06   111                                                                   03/19/2007 22:42:42 PAGE 5   

 240   2              {
 241   3                      P2_0=1;         // 启动电机抽水
 242   3              }
 243   2            
 244   2              if(juli>shang) //现在距离大于设定抽水上限 则停止抽水
 245   2              {
 246   3                       P2_1=1; //停止 电机停止抽水
 247   3              }
 248   2            } 
 249   1              }
 250          
 251          ////////////////////////////////////END/////////////////////////////////////////////    
 252                  


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    768    ----
   CONSTANT SIZE    =     13    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      18
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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