📄 sunpcontrol_main.lst
字号:
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 + -