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

📄 sunpcontrol_main.lst

📁 采用lpc935控制的太阳能控制器
💻 LST
📖 第 1 页 / 共 2 页
字号:
 226          {
 227   1              EA = 0;
 228   1              WFEED1 = 0xa5;
 229   1              WFEED2 = 0x5a;
 230   1              EA = 1;
 231   1      }
 232          
 233          void ChargControl(uchar battervoltage,uchar solarvoltage)
 234          {
 235   1              if((battervoltage < CHARG_OUT_LOW) && (solarvoltage >= battervoltage) && CHARG_OUT)
 236   1              {
 237   2                      CHARG_OUT = 0;
 238   2                      led_mode = 3;
 239   2              }
 240   1              else if(((battervoltage >= CHARG_OUT_HIGH)  || (solarvoltage < battervoltage)) && !CHARG_OUT)
 241   1              {
C51 COMPILER V8.05a   SUNPCONTROL_MAIN                                                     06/06/2008 12:42:38 PAGE 5   

 242   2                      CHARG_OUT = 1;
 243   2                      led_mode = 0;
 244   2              }
 245   1      }
 246          
 247          uchar TimerLen()
 248          {
 249   1              uchar time_len;
 250   1              time_len = 0;
 251   1              if(!SD1)
 252   1                      time_len += 1;
 253   1              if(!SD2)
 254   1                      time_len += 2;
 255   1              if(!SD3)
 256   1                      time_len += 3;
 257   1              if(!SD4)
 258   1                      time_len += 4;
 259   1              if(!time_len)
 260   1                      time_len = 1;
 261   1      //      printf ("定时时间 = %d  ",(int)time_len);
 262   1              return time_len;
 263   1      }
 264          
 265          
 266          //
 267          
 268          bit SenserIn()                          
 269          {
 270   1              static bit last_state;
 271   1              if(SENSE_IN != last_state)
 272   1                      last_state = SENSE_IN;
 273   1              else
 274   1              {
 275   2      //              printf ("传感器 = %d  ",(int)last_state);
 276   2                      return last_state;
 277   2              }
 278   1              return 1;
 279   1      }
 280          
 281          
 282          void  OutControl(uchar out_put_value)
 283          {
 284   1      
 285   1              if(out_put_value == 0)
 286   1              {
 287   2                      OUT_PUT3 = 1;
 288   2                      OUT_PUT2 = 1;
 289   2                      OUT_PUT1 = 1;
 290   2              }
 291   1              if(out_put_value & 0x01)
 292   1                      OUT_PUT1 = 0;
 293   1              if((out_put_value & 0x02))
 294   1                      OUT_PUT2 = 0;
 295   1              else
 296   1                      OUT_PUT2 = 1;
 297   1              if((out_put_value & 0x04))
 298   1                      OUT_PUT3 = 0;
 299   1              else
 300   1                      OUT_PUT3 = 1;
 301   1      }
 302          
 303          bit is_daytime_or_night;                                //1:表示白天,0:表示夜晚
C51 COMPILER V8.05a   SUNPCONTROL_MAIN                                                     06/06/2008 12:42:38 PAGE 6   

 304          bit is_batter_low;                                              //1:电池正常,0:电池欠压
 305          bit is_sense_in;
 306          static uchar solarvoltage;                              //太阳能电池电压
 307          static uchar battervoltage;                             //蓄电池电压
 308          static uchar out_put_value;                             //输出状态
 309          static uchar is_light_state;                    //1:表示点灯状态,0:表示熄灯状态(包括白天熄灯和过放电熄灯)
 310          static uchar delay_len;
 311          
 312          
 313          uchar SaveAndRead(uchar eeprom_value,bit is_save)
 314          {
 315   1              if(is_save)
 316   1              {
 317   2                      printf("写入标志值= %d  \n",(int)eeprom_value);
 318   2                      DEECON=0x00;                    //初始化DEECON
 319   2                      DEEDAT=eeprom_value;                    //赋值DEEDAT
 320   2                      DEEADR=0x10;                    //赋值DEEADR
 321   2                      
 322   2                      while((DEECON&0x80)==0);        //等待写完成
 323   2      
 324   2                      DEECON=DEECON&0x7F;             //清0写完成标志位
 325   2              }
 326   1              DEECON=0x00;                    //初始化DEECON
 327   1              DEEADR=0x10;                    //赋值DEEADR
 328   1              while((DEECON&0x80)==0);        //等待
 329   1      
 330   1              eeprom_value=DEEDAT;                    //将读出的值赋给Temp
 331   1              return eeprom_value;
 332   1      }
 333          
 334          
 335          main()
 336          {
 337   1              uint last_second,last_minute,sense_delay_time,i,j;              
 338   1              DeviceInit();
 339   1              printf ("Program is Starting\n");
 340   1              is_batter_low = 1;
 341   1              SaveAndRead(1,1);
 342   1      //      printf ("eeprom_value = %d\n",(int)SaveAndRead(0xff,0));
 343   1              for(i=0;i<20;i++)
 344   1              {
 345   2                      for(j=0;j<1000;j++);
 346   2                      is_sense_in = SenserIn();
 347   2                      battervoltage = BatterVolGet();
 348   2                      IrfVolGet();
 349   2                      solarvoltage = SolarVolGet();
 350   2                      delay_len = TimerLen();
 351   2              }
 352   1              printf("定时时间 = %d ,LED显示模式= %d ,电池欠压情况= %d , 输出状态= %d \n",(int)delay_len,(int)led_mode,
             -(int)is_batter_low,(int)out_put_value);
 353   1              while(1)
 354   1              {
 355   2                      CLRWD();
 356   2                      if(last_second != clock_time_1s)
 357   2                      {       
 358   3                              delay_len = TimerLen();
 359   3                              is_sense_in = SenserIn();
 360   3      //                      printf("LED显示模式= %d ,电池欠压情况= %d ,延时时间状况= %d , 输出状态= %d  ",(int)led_mode,(int)is_b
             -atter_low,(int)clock_time_1h,(int)out_put_value);
 361   3                              last_second = clock_time_1s;
 362   3                              battervoltage = BatterVolGet();
 363   3      //                      IrfVolGet();
C51 COMPILER V8.05a   SUNPCONTROL_MAIN                                                     06/06/2008 12:42:38 PAGE 7   

 364   3                              solarvoltage = SolarVolGet();
 365   3                      }
 366   2                      is_daytime_or_night = DayAndNightCheck(solarvoltage);
 367   2      
 368   2                      if(is_daytime_or_night)                                                                         //判断是否白天
 369   2                      {
 370   3                              if(battervoltage >= BATTER_VALUE_HIGH && !is_batter_low)//判断电池电压是否正常
 371   3                              {
 372   4                                      printf ("电池电压正常,");
 373   4                                      is_batter_low = 1;
 374   4                              }
 375   3                              if(out_put_value || SaveAndRead(0xff,0))
 376   3                              {
 377   4                                      printf ("已经天亮,关闭所有输出\n");
 378   4                                      SaveAndRead(0,1);
 379   4                                      out_put_value = 0;                                                                      //关闭输出
 380   4                                      led_mode = 0;                                                                           //指示灯显示关闭状态
 381   4                              }
 382   3                              last_minute = clock_time_1m = clock_time_1h = 0;
 383   3                      }else
 384   2                      {
 385   3                              if(battervoltage < BATTER_VALUE_LOW && is_batter_low)   //判断电池电压是否过低
 386   3                              {
 387   4                                      printf ("电池电压过低,进入电池欠压状态\n");
 388   4                                      SaveAndRead(1,1);
 389   4                                      is_batter_low = 0;
 390   4                              }
 391   3                              if(is_batter_low)                               //电池是否欠压
 392   3                              {
 393   4                                      if(!out_put_value && !SaveAndRead(0xff,0))
 394   4                                      {
 395   5                                              printf ("已经天黑,打开光控输出\n");
 396   5                                              out_put_value |= 0x01;
 397   5                                              led_mode = 1;
 398   5                                      }
 399   4                                      if(clock_time_1h < delay_len && !(out_put_value & 0x02) && !SaveAndRead(0xff,0))
 400   4                                      {
 401   5                                              printf ("打开时间控制输出\n");
 402   5                                              out_put_value |= 0x02;
 403   5                                      }
 404   4                                      else if(clock_time_1h >= delay_len && (out_put_value & 0x02))
 405   4                                      {
 406   5                                              printf ("关闭时间控制输出\n");
 407   5                                              SaveAndRead(1,1);
 408   5                                              out_put_value &= 0xFD;
 409   5                                      }
 410   4                                      if(!is_sense_in)
 411   4                                      {
 412   5                                              sense_delay_time = clock_time_1m;
 413   5                                              if(!(out_put_value & 0x04))
 414   5                                              {
 415   6                                                      printf ("打开传感器控制输出\n");
 416   6                                                      out_put_value |= 0x04;
 417   6                                              }
 418   5                                      }
 419   4                                      else
 420   4                                      {
 421   5                                              if(clock_time_1m - sense_delay_time >1 && (out_put_value & 0x04))
 422   5                                              {
 423   6                                                      printf ("关闭传感器控制输出\n");
 424   6                                              out_put_value &= 0xFB;
 425   6                                              }
C51 COMPILER V8.05a   SUNPCONTROL_MAIN                                                     06/06/2008 12:42:38 PAGE 8   

 426   5                                      }       
 427   4                              }else
 428   3                              {
 429   4                                      if(out_put_value)
 430   4                                      {
 431   5                                              printf ("电池欠压,关闭所有输出\n");
 432   5                                              out_put_value = 0;                                                                      //关闭输出
 433   5                                              led_mode = 2;                                                                           //指示灯显示电池过放电状态
 434   5                                      }
 435   4                              }
 436   3                      }
 437   2                      ChargControl(battervoltage,solarvoltage);                                       //充电控制
 438   2                      OutControl(out_put_value);
 439   2              }
 440   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1192    ----
   CONSTANT SIZE    =    341    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     50      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      5       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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