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

📄 12.lst

📁 由P89V51RB2单片机控制小车在翘翘板上寻找平衡点,装载倾角传感器.
💻 LST
📖 第 1 页 / 共 5 页
字号:
 311   1      {
 312   2      for(i=0;i<8-j;i++)
 313   2      {
 314   3      if(value_buf[i]>value_buf[i+1])
 315   3      {
 316   4      temp=value_buf[i];
 317   4      value_buf[i]=value_buf[i+1];
 318   4      value_buf[i+1]=temp;
 319   4      }
 320   3      }
 321   2      }
 322   1       b_out = value_buf[3];
 323   1         
 324   1      }
 325          
 326          void deal_BLB(void)
 327          { 
 328   1       if(b_out<1300)
 329   1       {
 330   2       c_0++;
 331   2       if(c_0>15)flag=1;
 332   2       }
 333   1           
 334   1       if(b_out>1350)
 335   1        {
 336   2         c_1++;
 337   2         if(c_1>15)flag = 0;
 338   2      
 339   2        }
 340   1       if((b_out<1350)&&(b_out>1300))
 341   1       { 
 342   2         c_2++;
 343   2         c_0=0;
 344   2         c_1=0;
 345   2         flag = 2;
 346   2       }
 347   1      }
 348          
 349          void T0INT( )  interrupt 1
 350          { 
 351   1        TH0 = 0x3C;
 352   1        TL0 = 0xAF;
 353   1        tick ++;
 354   1        if(tick>=19)
 355   1          { 
 356   2            tick =0;
 357   2            second++ ; 
 358   2                if(second>=60)
 359   2              {
 360   3               second=0;
 361   3               minute++;
 362   3              }
 363   2           }
 364   1        BLB(); deal_BLB();
 365   1      } 
C51 COMPILER V8.02   12                                                                    10/10/2008 16:00:14 PAGE 7   

 366          
 367          //*****************获取按键状态函数******************
 368          unsigned char keyscan(void)      
 369          {
 370   1         uchar recode,sccode;
 371   1         KEYROW=0xE0;       //将行都设置为低电平
 372   1         recode=KEYCOLUM;   //获取列的状态
 373   1          if((recode&0x0F)!=0x0F)  //判断是否有键按下和延时去抖动
 374   1           {
 375   2            // delay(60);        
 376   2           if((recode&0x0F)!=0x0F)
 377   2             {
 378   3              sccode=0xFE;          //设置行扫描的初始值
 379   3              while((sccode&0x20)!=0)     //判断并逐行扫描
 380   3               {   
 381   4                   KEYROW=sccode;
 382   4                   recode=KEYCOLUM;
 383   4                   if((recode&0x0F)!=0x0F)
 384   4                    {
 385   5                       recode=(recode&0x0F)|0xF0;  //记录列号
 386   5                       sccode=~sccode;               //记录行号
 387   5                               sccode=sccode<<4;       //把行号方到高四位
 388   5                               keystate=(sccode)+(~recode);  //记录行列状态,高四位为行号,低四位为列号
 389   5                                       return keystate;             
 390   5                               break; 
 391   5                     }
 392   4                    else
 393   4                     sccode=(sccode<<1)|0x01;        //行扫描后没找到按键状态则转到下一行
 394   4               }
 395   3             } 
 396   2          }
 397   1        return(0); 
 398   1      } 
 399          //**********************按键对应的显示字符**********************************
 400          unsigned char Gatkey(char keystate)
 401          {
 402   1      
 403   1       switch (keystate)
 404   1       {
 405   2         case 0x11: keyin='a';
 406   2                    break;
 407   2         case 0x12: keyin='b';
 408   2                    break;
 409   2         case 0x14: keyin='c';
 410   2                    break;
 411   2         case 0x18: keyin='d';
 412   2                    break;
 413   2         case 0x21: keyin='e';
 414   2                    break;
 415   2         case 0x22: keyin='f';
 416   2                    break;
 417   2         case 0x24: keyin='g';
 418   2                    break;
 419   2         case 0x28: keyin='h';
 420   2                    break;
 421   2         case 0x41: keyin='i';
 422   2                    break;
 423   2         case 0x42: keyin='j';
 424   2                    break;
 425   2         case 0x44: keyin='k';
 426   2                    break;
 427   2         case 0x48: keyin='l';
C51 COMPILER V8.02   12                                                                    10/10/2008 16:00:14 PAGE 8   

 428   2                    break;
 429   2         case 0x81: keyin='m';
 430   2                    break;
 431   2         case 0x82: keyin='n';
 432   2                    break;
 433   2         case 0x84: keyin='0';
 434   2                    break;
 435   2         case 0x88: keyin='p';
 436   2                    break;
 437   2         case 0x01: keyin='q';
 438   2                    break;
 439   2         case 0x02: keyin='r';
 440   2                    break;
 441   2         case 0x04: keyin='s';
 442   2                    break;
 443   2         case 0x08: keyin='t';
 444   2                    break;
 445   2         default: keyin='N' ;
 446   2         }
 447   1         return keyin;
 448   1      
 449   1      }
 450          
 451          void Setpwm(char channel,  unsigned char pwmval)
 452          {
 453   1         switch (channel )
 454   1         {
 455   2              case 0:
 456   2                CCAP0L = pwmval;
 457   2                CCAP0H = pwmval;
 458   2                break;
 459   2              case 1:
 460   2                CCAP1L = pwmval;
 461   2                CCAP1H = pwmval;
 462   2                break;
 463   2              default:
 464   2                CCAP0L = pwmval;
 465   2                CCAP0H = pwmval;
 466   2      
 467   2         }
 468   1          
 469   1      
 470   1      }
 471          //*****************************************
 472          void back(long speed, int no)
 473          {
 474   1      int i;
 475   1      for(i=0;i<no;i++)
 476   1        {
 477   2        HC573C1 = mai[i%8];
 478   2        delay(speed);
 479   2        }
 480   1      }
 481          
 482          void go(long speed, int no)
 483          {
 484   1      int i;
 485   1      for(i=no;i>0;i--)
 486   1        {
 487   2        HC573C1 = mai[i%8];
 488   2        delay(speed);
 489   2        }
C51 COMPILER V8.02   12                                                                    10/10/2008 16:00:14 PAGE 9   

 490   1      }
 491          
 492          void go_left(long speed, int no)                 //750为90度转弯
 493          {
 494   1      int i;
 495   1      for(i=no;i>0;i--)
 496   1        {
 497   2        HC573C1 = mai[i%8]&0x0F+0x10;
 498   2        delay(speed);
 499   2        }
 500   1      }
 501          
 502          void go_right(long speed, int no)           //750为90度转弯
 503          {
 504   1      int i;
 505   1      for(i=no;i>0;i--)
 506   1        {
 507   2        HC573C1 = mai[i%8]&0xF0+0x01;
 508   2        delay(speed);
 509   2        }
 510   1      }
 511          
 512          void deal_go(void)
 513          {
 514   1        char mid;
 515   1        mid=HC245C1%4;  
 516   1        if(mid==2)go_left(250,30);
 517   1        if(mid==1)go_right(250,30);
 518   1        if(mid==3)go(250,50);
 519   1        if(mid==0)go(250,50);
 520   1      }
 521          
 522          void deal_bi(void)
 523          {
 524   1        char mid;
 525   1        mid=HC245C2%4;  
 526   1        if(mid==2)go_left(250,50);
 527   1        if(mid==1)go_right(250,30);
 528   1        if(mid==3)go(250,50);
 529   1        if(mid==0)go(250,30); 
 530   1      }
 531          
 532          
 533          
 534          //*****************************************
 535          void main()
 536          {
 537   1         
 538   1        unsigned int ADs,c,i;
 539   1        unsigned int b1=0,b2;
 540   1        char ADval[10];
 541   1        unsigned int BB=3000;
 542   1      
 543   1         SpiInit();
 544   1         LCDInit();
 545   1         DisplayString(0,0,"Hello World");
 546   1         // delay(10000);  
 547   1         HC573C1 = 0x01;
 548   1         HC573C2 = 0x0F;
 549   1         KEYROW = 0x00;
 550   1         P1 = 0x01;
 551   1      
C51 COMPILER V8.02   12                                                                    10/10/2008 16:00:14 PAGE 10  

 552   1         TMOD = 0x01;
 553   1         TL0 = 0xAF;
 554   1         TH0 = 0x3C;
 555   1         ET0 = 1;
 556   1         TR0 = 1;
 557   1         EA = 1;
 558   1         EX0 = 1;
 559   1      
 560   1         CMOD = 0x02;  
 561   1         CCAPM0 = 0x4A; 
 562   1         CL =0;
 563   1         CCAP0H = 16;
 564   1         CCON = 0x40;
 565   1        
 566   1         LcdWCMD( 0x01) ;  //显示清屏
 567   1      /*
 568   1      b1 = (HC245C1/16)%4;
 569   1      while(b1==3)
 570   1      {
 571   1      deal_go();
 572   1      b1 = (HC245C1/16)%4;
 573   1      }
 574   1      delay(50000);
 575   1      go_right(250,750);
 576   1      delay(50000); 
 577   1      b1 = (HC245C1/16)%4;
 578   1      while(b1==3)
 579   1      {
 580   1      deal_bi();
 581   1      b1 = (HC245C1/16)%4;
 582   1      }
 583   1      delay(50000); 
 584   1      go_left(250,750);
 585   1      
 586   1      delay(50000);
 587   1       
 588   1      b1 = (HC245C1/16)%4;
 589   1      while(b1==3)
 590   1      {
 591   1      deal_bi();
 592   1      b1 = (HC245C1/16)%4;
 593   1      }
 594   1      
 595   1      delay(50000); 
 596   1      go_left(250,750);
 597   1      
 598   1      i=1100;
 599   1      while(i) 
 600   1      {
 601   1        if(HC245C2%4==3)
 602   1        {
 603   1        HC573C1 = mai[i%8];
 604   1        delay(250);
 605   1        i--;
 606   1        }
 607   1        if(HC245C2%4==2)go_left(250,10);
 608   1        if(HC245C2%4==1)go_right(250,10);
 609   1      }
 610   1      delay(50000); 
 611   1      
 612   1      go_right(250,750);
 613   1      
C51 COMPILER V8.02   12                                                                    10/10/2008 16:00:14 PAGE 11  

 614   1      delay(50000);
 615   1      go(250,800);
 616   1      
 617   1      LcdWCMD( 0x01) ;
 618   1      while(1){
 619   1         DisplayString(11,0,"m   s ");
 620   1        sprintf(ADval,"%d",second);
 621   1        DisplayString(13,0,ADval);
 622   1        sprintf(ADval,"%d",minute);
 623   1        DisplayString(10,0,ADval);
 624   1      }
 625   1      */
 626   1      
 627   1      HC573C1 = 0x00;
 628   1      EA = 0;
 629   1      go(180,1420);

⌨️ 快捷键说明

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