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

📄 water.lst

📁 太阳能热水器自动上水控制器
💻 LST
字号:
C51 COMPILER V8.08   WATER                                                                 03/29/2008 20:23:36 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE WATER
OBJECT MODULE PLACED IN water.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE water.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2                      太阳能热水器自动上水控制  V3.4
   3          
   4          V3.2   使用中断加定时方式开关阀,增看门狗、空闲模式
   5          V3.3   修正V3.2缺陷,增60min上水总时间控制
   6          V3.4   修正V3.3的错误,经实地安装试用。
   7          
   8             LED 上水开阀时闪烁,开阀完成上水时闪亮(长时间灭,瞬间亮),水满
   9                 后关阀闪烁,结束后灭。
  10             Beep完成一个操作后鸣叫
  11          ********************************************************************/
  12          #include<reg51.h>
  13          #define uchar unsigned char
  14          #define uint unsigned int
  15          sfr AUXR   = 0x8E;                 //定义AT89S51扩展寄存器
  16          sfr WDTRST = 0xA6;
  17          //sbit  led1=P1^6;
  18          //sbit  K1 =P1^1;           //上水控制键P3.2 INT0        *ledkeyP3.2
  19          //sbit  YS =P1^0;           //水满后溢水信号P3.3 INT1   *ledkeyP3.3
  20          sbit  LED =P0^7;           //操作批示灯P0.7      *ledkeyP1.0
  21          sbit  KF=P2^6;             //开阀线P2.6          *ledkeyP1.2
  22          sbit  GF=P2^7;             //关阀线P2.7          *ledkeyP1.3
  23          sbit  KFdw=P2^2;           //开阀到位P2.2        *ledkeyP3.4
  24          sbit  GFdw=P2^3;           //关阀到位P2.3        *ledkeyP3.5
  25          sbit  Beep =P2^5 ;         //蜂鸣器,开关阀结束时鸣叫提示P2.5    *ledkeyP1.7
  26          void  Dog();
  27          void  delayms(uchar ms);
  28          void  delayled(uchar ll);
  29          void  MingJiao();
  30          void  TingZhi();
  31          bit FMKGbz=1;             //阀门开关标志位,1可开,0可关
  32          bit led_bz=0;                     //瞬闪LED允许位
  33          bit Nbz=0;
  34          bit KongXianbz=0;                 //进入空闲模式允许位
  35          
  36          
  37          //sbit  LED =P1^0;           //操作批示灯P0.7
  38          //sbit  KF=P1^2;             //开阀线P2.6
  39          //sbit  GF=P1^3;             //关阀线P2.7
  40          //sbit  KFdw=P3^4;           //开阀到位P2.2
  41          //sbit  GFdw=P3^5;           //关阀到位P2.3
  42          //sbit  Beep =P1^7 ;         //蜂鸣器,开关阀结束时鸣叫提示
  43          //void  Dog();
  44          //void  delayms(uchar ms);
  45          //void  delayled(uchar ll);
  46          //void  MingJiao();
  47          //void  TingZhi();
  48          //bit FMKGbz=1;             //阀门开关标志位,1可开,0可关
  49          //bit led_bz=0;                   //瞬闪LED允许位
  50          //bit Nbz=0;
  51          //bit KongXianbz=0;               //进入空闲模式允许位
  52          
  53          
  54          uchar S_timer=0;
  55          uint M_timer=0; 
C51 COMPILER V8.08   WATER                                                                 03/29/2008 20:23:36 PAGE 2   

  56          uint ledoff_timer=20000;//led熄灭时长
  57          
  58          void main()
  59          {
  60   1              uint N=0;
  61   1      
  62   1              AUXR = 0xff;            // 初始化看门狗相关寄存器
  63   1              Dog();
  64   1              
  65   1              LED=1,KF=1,GF=1,Beep=0;
  66   1              
  67   1              TMOD=0x11;              //赋初值,8M晶振,50ms一次中断,T0初值为7DCB
  68   1              TH0=0x7D;                 
  69   1              TL0=0xCB;
  70   1              TH1=0x15;               //最长允许上水时间定时,90ms一次
  71   1              TL1=0xA0;
  72   1              ET0=1;          //定时器T0中断允许
  73   1              ET1=1;                  //定时器T1中断允许
  74   1              
  75   1              IT0=1;                  //下降沿触发
  76   1              IT1=1;
  77   1              EX0=1;                  //打开中断0,响应上水键K1
  78   1              EX1=0;                  //关闭中断1,不响应溢水信号键
  79   1              EA=1;                   //总中断允许
  80   1      
  81   1              while(1)
  82   1              {
  83   2                      Dog();
  84   2                      if(led_bz)      //瞬闪LED
  85   2                      {
  86   3                              if(Nbz) //上次的延时计数清零
  87   3                              {
  88   4                                      Nbz=0;
  89   4                                      N=0;
  90   4                              }
  91   3                              N++;
  92   3                              if(N > ledoff_timer)
  93   3                              {
  94   4                                      N=0;
  95   4                                      LED=0;
  96   4                                      delayms(50);
  97   4                                      LED=1;
  98   4                              }
  99   3                      }
 100   2                      if(KFdw==0 & FMKGbz==1)  //开阀到位
 101   2                      {
 102   3                              TR0=0;
 103   3                              TH0=0x7D;
 104   3                              TL0=0xCB;
 105   3                              S_timer=0;
 106   3      
 107   3                              TingZhi();
 108   3                              FMKGbz=0;
 109   3                              led_bz=1;
 110   3                              EX1=1;
 111   3                      }
 112   2                      if(GFdw==0 & FMKGbz==0)  //关阀到位
 113   2                      {
 114   3                              TR0=0;
 115   3                              TR1=0;
 116   3                              TH0=0x7D;
 117   3                              TL0=0xCB;
C51 COMPILER V8.08   WATER                                                                 03/29/2008 20:23:36 PAGE 3   

 118   3                              S_timer=0;
 119   3      
 120   3                              TingZhi();
 121   3                              FMKGbz=1;
 122   3                              led_bz=0;
 123   3                              EX0=1;
 124   3                              KongXianbz=1;
 125   3                      }
 126   2                      if(KongXianbz & FMKGbz)
 127   2                      {
 128   3                              PCON=0x00;              //只有在关阀完成后才允许进入空闲模式
 129   3                      }
 130   2                      //        led1=0;               //此三句指示是否进入空闲模式,调试用
 131   2                      //        //delayms(100);
 132   2                      //        led1=1;
 133   2              }
 134   1      }
 135          
 136          
 137          
 138          void Dog(void)
 139          {
 140   1              WDTRST=0x1E;
 141   1              WDTRST=0xE1;//初始化看门狗/喂狗
 142   1      }
 143          
 144          
 145          void  KaiFa(void) interrupt 0    /*INT0*******************************************************/
 146          {
 147   1              EX0=0;
 148   1              EX1=1;
 149   1              KongXianbz=0;   //禁止进入空闲模式
 150   1      
 151   1              ledoff_timer=0; //使led灯长亮
 152   1              KF=1;
 153   1              GF=0;
 154   1              FMKGbz=1;
 155   1      
 156   1              TH0=0x7D;
 157   1              TL0=0xCB;
 158   1              TR0=1;
 159   1      
 160   1              TH1=0x15;               //90ms中断一次
 161   1              TL1=0xA0;
 162   1              TR1=1;                  //开最长允许上水时间定时器60min
 163   1              LED=0;
 164   1              led_bz=1;
 165   1              Nbz=1;
 166   1              M_timer=0;
 167   1      }
 168          
 169          
 170          void  GuanFa(void) interrupt 2   /*INT1*******************************************************/
 171          {
 172   1              //PCON=0;
 173   1              EX0=1;
 174   1              EX1=0;
 175   1      
 176   1              ledoff_timer=0; //使led灯长亮
 177   1              KF=0;
 178   1              GF=1;
 179   1              FMKGbz=0;
C51 COMPILER V8.08   WATER                                                                 03/29/2008 20:23:36 PAGE 4   

 180   1              TR0=1;
 181   1              LED=0;
 182   1              led_bz=0;
 183   1      }
 184          
 185          
 186          void timer0() interrupt 1     /*定时器0中断,4s后停止阀门动作******************/
 187          {
 188   1              TH0=0x7D;
 189   1              TL0=0xCB;
 190   1              S_timer++;
 191   1              if(S_timer==80)       //定时4s后停止阀门动作
 192   1              {
 193   2                      TR0=0;
 194   2                      TingZhi();
 195   2                      FMKGbz=~FMKGbz;
 196   2                      S_timer=0;
 197   2                      KongXianbz=1;     //允许进入空闲模式,下一步进入空闲模式
 198   2      
 199   2                      if(FMKGbz) led_bz=0;//关阀状态时关LED灯
 200   2              }
 201   1      }
 202          
 203          
 204          void timer1() interrupt 3     /*定时器1中断,40000*0.09=3600s后停止阀门动作***最大1小时47分钟*****/
 205          {
 206   1              TH1=0x15;                            //90ms中断一次
 207   1              TL1=0xA0;
 208   1              M_timer++;
 209   1              if(M_timer==40000)
 210   1              {
 211   2                   TR1=0;
 212   2                       if(GFdw)
 213   2                       {  
 214   3                               ledoff_timer=0;        //使led灯长亮
 215   3                               KF=0;
 216   3                           GF=1;
 217   3                           TH0=0x7D;
 218   3                           TL0=0xCB;
 219   3                           TR0=1;
 220   3                           EX0=1;
 221   3                               EX1=0;
 222   3      //                   led_bz=0;
 223   3                       }
 224   2                       M_timer=0;
 225   2              }
 226   1      }
 227          
 228          
 229          void delayms(unsigned char ms)    /*延时子程序**************************************/
 230          {
 231   1              uchar i;
 232   1              while(ms--)
 233   1              {
 234   2                      Dog();                            //此处必须喂狗,否则被复位
 235   2                      for(i = 0 ; i < 120 ; i++);
 236   2              }
 237   1      }
 238          
 239          
 240          void TingZhi(void)                /*阀门动作停止***********************/
 241          {
C51 COMPILER V8.08   WATER                                                                 03/29/2008 20:23:36 PAGE 5   

 242   1              KF=1;
 243   1              GF=1;
 244   1              ledoff_timer=20000;     //使led灯长亮
 245   1      
 246   1              TR0=0;
 247   1              LED=1;
 248   1              MingJiao();
 249   1      
 250   1      }
 251          
 252          
 253          void MingJiao()                   /*鸣叫子程序*************************/
 254          {
 255   1              Beep=1;
 256   1              delayms(100);
 257   1              Beep=0;
 258   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    507    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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