📄 systhree.lst
字号:
295 //**************************************************************************************************
296
297 void main(void)
298 {
299 1
300 1 TMOD = 0x01; //
301 1 TL0 = -2720%256; //定时器中断时间间隔 4ms
302 1 TCON = 0x00;
303 1 TMOD = 0X23;
304 1 TH1=244;
305 1 TL1=244;
306 1 SCON=0x50;//串口方式1,允许接受
307 1
308 1 RCAP2H=0x0B;
309 1 RCAP2L=0xDC;
310 1 PT2 = 1;
311 1 ES = 1;
312 1 ET0 = 1;
313 1 ET1 = 0;
314 1 ET2= 1;
315 1 EX0 = 1;
316 1 EX1 = 1;
317 1 EA = 1;
318 1 TR0 =1;
319 1 TR1 =1;
320 1 TR2 = 1;
321 1
322 1 MotorForward=0;
323 1 MotorBack=0;
324 1
325 1 P1_2 = 0;
326 1
327 1 P1_5 =0;
328 1
329 1 P1_6 =0;
330 1 P1_7 =0;
331 1
332 1 while(1)
333 1 {
334 2 // if(getkey == 1) //判断是否获得有效按键
335 2 {
336 3 getkey = 0;
337 3 led[0]=NOset;
338 3 led[1]=Vset/100;
339 3 led[2]=(Vset%100)/10;
340 3 led[3]=Vset%10;//更新缓冲区各位的应该显示的数字
341 3 // led[5]=Vnow100/10000;
342 3 // led[6]=((Vnow100/100)%100)/10;
343 3 // led[7]=(Vnow100/100)%10;
344 3 led[5]=num_yd_actual/100;
345 3 led[6]=((num_yd_actual)%100)/10;
346 3 led[7]=(num_yd_actual)%10;
347 3 if(alarm == 1) led[4] = 16;
348 3 else led[4] = 17;
349 3 }
350 2 }
351 1 }
352 /***************************************************
353 键盘扫描函数
354 原型: void readkey(void);
355 功能: 当获得有效按键时,令getkey=1,keynum为按键值
356
C51 COMPILER V8.05a SYSTHREE 06/29/2007 12:36:53 PAGE 7
357 ****************************************************/
358 void readkey(void)
359 {
360 1 uchar M_key = 0;
361 1
362 1 first_row = 0;
363 1 second_row = 0;
364 1 M_key = KEY;
365 1 if(M_key != 0xff) //如果有连续两次按键按下,认为有有效按键按下。消除按键抖动
366 1 {
367 2 if(first_getkey == 0)
368 2 {
369 3 first_getkey = 1;
370 3 }
371 2 else //当有有效按键按下时,进一步识别是哪一个按键
372 2 {
373 3 if(keyon == 0) //防止按键冲突,当还有未释放的按键时不对其它按键动作响应
374 3 {
375 4 first_row = 0; //扫描第一行按键
376 4 second_row = 1;
377 4 M_key = KEY;
378 4 if(M_key != 0xff)
379 4 {
380 5 switch(M_key)
381 5 {
382 6 case 0xfe:
383 6 keynum = 0x00;
384 6 break;
385 6 case 0xfd:
386 6 keynum = 0x01;
387 6 break;
388 6 case 0xfb:
389 6 keynum = 0x02;
390 6 break;
391 6 case 0xf7:
392 6 keynum = 0x03;
393 6 break;
394 6 case 0xef:
395 6 keynum = 0x04;
396 6 break;
397 6 case 0xdf:
398 6 keynum = 0x05;
399 6 break;
400 6 case 0xbf:
401 6 keynum = 0x06;
402 6 break;
403 6 case 0x7f:
404 6 keynum = 0x07;
405 6 break;
406 6 }
407 5 }
408 4 else
409 4 {
410 5 second_row = 0; //扫描第二行按键
411 5 first_row = 1;
412 5 M_key = KEY;
413 5 switch(M_key)
414 5 {
415 6 case 0xfe:
416 6 keynum = 0x08;
417 6 break;
418 6 case 0xfd:
C51 COMPILER V8.05a SYSTHREE 06/29/2007 12:36:53 PAGE 8
419 6 keynum = 0x09;
420 6 break;
421 6 case 0xfb:
422 6 keynum = 0x0a;
423 6 break;
424 6 case 0xf7:
425 6 keynum = 0x0b;
426 6 break;
427 6 case 0xef:
428 6 keynum = 0x0c;
429 6 break;
430 6 case 0xdf:
431 6 keynum = 0x0d;
432 6 break;
433 6 case 0xbf:
434 6 keynum = 0x0e;
435 6 break;
436 6 case 0x7f:
437 6 keynum = 0x0f;
438 6 break;
439 6 }
440 5 }
441 4 getkey = 1; //获得有效按键数值
442 4 keyon = 1; //防止按键冲突,当获得有效按键时将其置1
443 4 setvalue (keynum);
444 4 }
445 3 }
446 2 }
447 1 else
448 1 {
449 2 first_getkey = 0;
450 2 keyon = 0; //防止按键冲突,当所有的按键都释放时将其清0
451 2 }
452 1 }
453
454 /***************************************************
455 数码管显示函数
456 原型: void leddisp(void);
457 功能: 每次调用轮流显示一位数码管
458
459 ****************************************************/
460 void leddisp(void)
461 {
462 1 switch(lednum) //选择需要显示的数码位
463 1 {
464 2 case 0:
465 2 LED1 = segtab[led[0]];
466 2 break;
467 2 case 1:
468 2 LED2 = segtab[led[1]];
469 2 break;
470 2 case 2:
471 2 LED3 = segtab[led[2]];
472 2 break;
473 2 case 3:
474 2 LED4 = segtab[led[3]];
475 2 break;
476 2 case 4:
477 2 LED5 = segtab[led[4]];
478 2 break;
479 2 case 5:
480 2 LED6 = segtab[led[5]];
C51 COMPILER V8.05a SYSTHREE 06/29/2007 12:36:53 PAGE 9
481 2 break;
482 2 case 6:
483 2 LED7 = segtab[led[6]];
484 2 break;
485 2 case 7:
486 2 LED8 = segtab[led[7]];
487 2 break;
488 2 }
489 1
490 1 if(lednum == 0) //更新需要现实的数码位
491 1 {
492 2 lednum = 7;
493 2 }
494 1 else
495 1 {
496 2 lednum = lednum-1;
497 2 }
498 1 }
499
500
501
502 /*******************************************************************
503 延时函数
504 函数原型: void delay(uint8 time_nop);
505 功能: 延时time_nop个nop
506
507 ********************************************************************/
508 void delay(uint8 time_nop)
509 {
510 1 uint8 i;
511 1 for(i=0;i<time_nop;i++)
512 1 {
513 2 _nop_();
514 2 }
515 1 }
516
517 void setvalue (unsigned char keynum) {
518 1
519 1 if(state == 0 && keynum == 10) state = 1;
520 1 else if(state == 1 ) { NOset = keynum ;state = 2 ; }
521 1 else if(state == 2 && keynum >= 0 && keynum <= 9 )
522 1 {
523 2 state = 2 ;
524 2 temV = temV*10 + keynum;
525 2
526 2 }
527 1 else if(state == 2 && keynum ==13 )
528 1 {
529 2
530 2
531 2 if(temV>150 || temV<20)
532 2 Vset=255;
533 2 else
534 2 {
535 3 Vset = temV;
536 3 SetMotorTimeT2();
537 3 }
538 2 temV = 0;state = 0 ;
539 2 }
540 1 else {state = 0; temV = 0 ;}
541 1
542 1 if(state != 1 && keynum == 14) alarm = 0;
C51 COMPILER V8.05a SYSTHREE 06/29/2007 12:36:53 PAGE 10
543 1
544 1 if(state != 1 && keynum == 15) alarm = 1;
545 1
546 1 if(state != 1 && keynum == 12) {
547 2 num = 0;
548 2 i = 0;
549 2 vh = 0;
550 2 vl = 0;
551 2
552 2 icount[0]= 0; icount[1]= 0;icount[2]= 0;icount[3]= 0;icount[4]= 0;icount[5]= 0;
553 2
554 2 }
555 1
556 1
557 1 }
558
559 void SetMotorTimeT2()
560 {
561 1 if(Vset >= Vnow) { direction = 1; HMove =(Vset-Vnow); }
562 1 else {direction = 0; HMove = (Vnow-Vset); }
563 1 HMove = HMove*COEF;
564 1 MotorTimer = HMove/MotorV;// S
565 1 MotorTimer = MotorTimer<<1;// S
566 1 T2count = 0;
567 1 MotorStart=1;
568 1 }
569 void sendBuf()
570 {
571 1 uchar a = 0;
572 1
573 1 if(NOset <16 )
574 1 {
575 2 a = alarm ? 16:0 ;
576 2 a += NOset;
577 2 a += 192;
578 2 P1_7 = 1;
579 2 SBUF = a;
580 2 P1_6 = 0;
581 2 P1_7 = 0;
582 2 }
583 1 }
584 /*
585 A \began to set celerate
586 B //cancle set V
587 C began to inital celearte testing ***********
588 D enter
589 E alarm
590 F cancel alarm
591 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1436 ----
CONSTANT SIZE = 18 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 47 4
IDATA SIZE = ---- ----
BIT SIZE = 7 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -