📄 111.lst
字号:
290 1 counter1=170;
291 1 counter2=50;
292 1 chazhi=2;
293 1 EA=1;
294 1 while(1)
295 1 {
296 2 LEDG=~LEDG;
297 2 avge=pingjun();
298 2 if(xianshi==1)
299 2 {BCD_H_L(avge-200,0); }
300 2 a=IN0;
301 2 bb=IN1;
302 2 c=IN2;
303 2 //d=IN3;
C51 COMPILER V8.02 111 09/06/2007 03:49:33 PAGE 6
304 2 //e=IN4;
305 2 f=IN5;
306 2 g=IN6;
307 2 if(backward==1)
308 2 {
309 3 START=1;
310 3 LASTS=0;
311 3 BACK=0;
312 3 LASTB=1;
313 3 LASTF=1;
314 3 counter2=0;
315 3 judgementback(90,20,20,1);
316 3 }
317 2 if(forward==1)
318 2 {
319 3 START=1;
320 3 LASTS=0;
321 3 BACK=1; //前进
322 3 LASTB=0;
323 3 LASTF=0;
324 3 judgement(90,20,20);
325 3 }
326 2 if(black==1)
327 2 {
328 3 START=1;
329 3 LASTS=0;
330 3 TR1=1; //开定时器
331 3 time2=0;
332 3 judgement(90,20,20);
333 3 }
334 2 if(keykey==1)
335 2 {
336 3 speedchange(40,1);
337 3 speedchange(40,0);
338 3 chazhi1=abs((int)(avge-avge0));
339 3 if(wending==1)
340 3 {
341 4
342 4
343 4
344 4 if(chazhi1>chazhi) //chazhi1>=20
345 4 {
346 5 START=1;
347 5 LASTS=0;
348 5 counter2=50;
349 5
350 5 if(avge>avge0-1)
351 5 {
352 6 BACK=0;//后退
353 6 LASTB=1;
354 6 LASTF=1;
355 6 delayms(3);
356 6 judgementback(40,1,15,0);
357 6 }
358 5 if(avge<avge0)
359 5 {
360 6
361 6 BACK=1; //前进
362 6 LASTB=0;
363 6 LASTF=0;
364 6 delayms(3);
365 6 judgement(40,1,15);
C51 COMPILER V8.02 111 09/06/2007 03:49:33 PAGE 7
366 6
367 6 }
368 5
369 5 }
370 4
371 4 else
372 4 {
373 5 START=0;
374 5 LASTS=1;
375 5 delayms(500);
376 5 TR1=1; //开定时器
377 5 time1=0;
378 5 time2=1;
379 5
380 5 }
381 4
382 4 }
383 3 else
384 3 {
385 4 START=0;
386 4 LASTS=1;
387 4 }
388 3
389 3
390 3 }
391 2
392 2 }
393 1 }
394 /*PCA中断子程序*/
395 void PCA_ISR (void) interrupt 9
396 {
397 1
398 1 CCF0 = 0; /*清匹配中断标志*/
399 1
400 1 }
401 /*键盘中断子程序*/
402 void led(void) interrupt 19
403 {
404 1 uchar key,t;
405 1 EA=0;
406 1 key=CH452_Read();
407 1 if(0x62==key)
408 1 {
409 2 delayms(2);
410 2 avge0=avge;
411 2 black=0;
412 2 BCD_H_L(avge0-200,1);
413 2 }
414 1 else if(0x63==key)
415 1 {
416 2 delayms(2);
417 2 black=1;
418 2 xianshi=0;
419 2 TR0=1;
420 2 for(t=0;t<8;t++)
421 2 CH452_Write((CH452_DIG0+ (t<<8))|16);
422 2 CH452_Write(CH452_DIG1);
423 2 stage_clk_start();
424 2 }
425 1 else if(0x7A==key)
426 1 {
427 2 delayms(2);
C51 COMPILER V8.02 111 09/06/2007 03:49:33 PAGE 8
428 2 counter1=counter1+10;
429 2 CH452_Write(CH452_DIG3 | 1);
430 2 }
431 1 else if(0x7B==key)
432 1 {
433 2 delayms(2);
434 2 counter1=counter1-10;
435 2 CH452_Write(CH452_DIG3 | 0);
436 2 }
437 1 else if(0x50==key)
438 1 {
439 2 delayms(2);
440 2 transform=1;
441 2 CH452_Write(CH452_DIG7 | 1);
442 2
443 2 }
444 1 else if(0x58==key)
445 1 {
446 2 delayms(2);
447 2 transform=0;
448 2 CH452_Write(CH452_DIG7 | 2);
449 2 }
450 1 else if(0x78==key)
451 1 {
452 2 delayms(2);
453 2 chazhi=chazhi+1;
454 2 CH452_Write(CH452_DIG7 | chazhi);
455 2 }
456 1 else ;
457 1 EA=1;
458 1 }
459
460 /*定时器0中断子程序*/
461 void T0_ISR(void) interrupt 1 using 0
462 {
463 1 TR0=0;
464 1 TF0=0;
465 1 TH0=0x7D ;
466 1 TL0=0xCC ; //0xCC由0xCB+1得来
467 1 TR0=1;
468 1 if(T0_OF<10)
469 1 T0_OF++;
470 1 else
471 1 {
472 2
473 2 if(sec<59)
474 2 sec++;
475 2 else
476 2 {
477 3 sec=0;
478 3 min++;
479 3 CH452_Write(CH452_DIG3 | min); //先写min,因为人眼分辨不出
480 3 CH452_Write(0x1FB);
481 3 }
482 2 CH452_Write(CH452_DIG1 | (sec%10));
483 2 CH452_Write(CH452_DIG2 | (sec/10));
484 2 if(stage_clk_flag)
485 2 {
486 3 stage_sec++;
487 3 CH452_Write(CH452_DIG4 | (stage_sec%10));
488 3 if(stage_sec/10) CH452_Write(CH452_DIG5 | (stage_sec/10));
489 3 }
C51 COMPILER V8.02 111 09/06/2007 03:49:33 PAGE 9
490 2 T0_OF=0;
491 2 }
492 1 if(--counter3==0)
493 1 {
494 2 counter3=2;
495 2 look=1;
496 2
497 2 }
498 1
499 1 }
500
501 /*定时器1中断子程序*/
502 void TIMER1_ISR (void) interrupt 3 using 1
503 {
504 1 uchar i;
505 1 TR1=0;
506 1 TF1=0;
507 1 TH1=0x7D;
508 1 TL1=0xFB;
509 1 TR1=1;
510 1 if(time1==1) //执行黑线判断程序17s
511 1 {
512 2 if(--counter1==0)
513 2 {
514 3 TR1=0; //关定时器
515 3 time1=0; //标志
516 3 black=0; //不执行黑线判断程序
517 3 START=0;
518 3 keykey=1;//执行角度黑线判断程序
519 3 }
520 2
521 2 }
522 1 if(time2==1) //判断3s后5s显示
523 1 {
524 2 if(--counter2==0)
525 2 {
526 3 TR1=0; //关定时器
527 3 time2=0;//标志
528 3 keykey=0;
529 3 counter2=0;
530 3 stage_clk_flag=0;//stage_clk_stop();//显示平衡的时间
531 3 CH452_Write(CH452_SELF_BCD|0x39);
532 3 CH452_Write(CH452_DIG0|0x1E);
533 3 CH452_Write(CH452_TWINKLE | 0x31);
534 3 for(i=5;i>0;i--)
535 3 {
536 4 CH452_Write(CH452_DIG7 | i);
537 4 SPOKER=1;
538 4 delay_s(1);
539 4 SPOKER=0;
540 4 delay_s(1);
541 4 }
542 3 CH452_Write(CH452_DIG7);//计数显示
543 3 stage_clk_start();
544 3 CH452_Write(CH452_DIG0|16);
545 3 if(transform==0)
546 3 {
547 4 forward=0;
548 4 backward=0;
549 4 black=0;
550 4 xianshi=0;
551 4 transform=0;
C51 COMPILER V8.02 111 09/06/2007 03:49:33 PAGE 10
552 4 keykey=1;
553 4
554 4 }//循环角度判断
555 3 if(transform==1)
556 3 {
557 4 keykey=0;
558 4 black=0;
559 4 backward=0;
560 4 xianshi=0;
561 4 transform=1;
562 4 forward=1;
563 4
564 4 }//平衡后前进
565 3
566 3 }
567 2 }
568 1
569 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2405 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 60 ----
PDATA SIZE = ---- ----
DATA SIZE = 48 25
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 + -