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

📄 systhree.lst

📁 省电子竞赛做品
💻 LST
📖 第 1 页 / 共 2 页
字号:

 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 + -