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

📄 12.lst

📁 08浙江省大学生电子设计竞赛 C题,智能公交系统 获二等奖
💻 LST
📖 第 1 页 / 共 5 页
字号:
*** WARNING C280 IN LINE 281 OF 12.C: 'ucSKey': unreferenced local variable
 304          
 305          //*****************获取按键状态函数******************
 306          unsigned char keyscan(void)      
 307          {
 308   1         uchar recode,sccode;
 309   1         KEYROW=0xE0;       //将行都设置为低电平
 310   1         recode=KEYCOLUM;   //获取列的状态
 311   1          if((recode&0x0F)!=0x0F)  //判断是否有键按下和延时去抖动
 312   1           {
 313   2             delay(6000);        
 314   2           if((recode&0x0F)!=0x0F)
 315   2             {
 316   3              sccode=0xFE;          //设置行扫描的初始值
 317   3              while((sccode&0x20)!=0)     //判断并逐行扫描
 318   3               {   
 319   4                   KEYROW=sccode;
 320   4                   recode=KEYCOLUM;
 321   4                   if((recode&0x0F)!=0x0F)
 322   4                    {
 323   5                       recode=(recode&0x0F)|0xF0;  //记录列号
 324   5                       sccode=~sccode;               //记录行号
 325   5                               sccode=sccode<<4;       //把行号方到高四位
 326   5                               keystate=(sccode)+(~recode);  //记录行列状态,高四位为行号,低四位为列号
 327   5                                       return keystate;             
 328   5                               break; 
 329   5                     }
 330   4                    else
 331   4                     sccode=(sccode<<1)|0x01;        //行扫描后没找到按键状态则转到下一行
 332   4               }
 333   3             } 
 334   2          }
 335   1        return(0); 
 336   1      } 
 337          //**********************按键对应的显示字符**********************************
 338          unsigned char Gatkey(char keystate)
 339          {
 340   1      
 341   1       switch (keystate)
 342   1       {
 343   2         case 0x11: keyin='a';
 344   2                    break;
 345   2         case 0x12: keyin='b';
 346   2                    break;
 347   2         case 0x14: keyin='c';
 348   2                    break;
 349   2         case 0x18: keyin='d';
 350   2                    break;
 351   2         case 0x21: keyin='e';
 352   2                    break;
 353   2         case 0x22: keyin='f';
 354   2                    break;
 355   2         case 0x24: keyin='g';
 356   2                    break;
 357   2         case 0x28: keyin='h';
 358   2                    break;
 359   2         case 0x41: keyin='i';
 360   2                    break;
 361   2         case 0x42: keyin='j';
 362   2                    break;
 363   2         case 0x44: keyin='k';
 364   2                    break;
C51 COMPILER V8.02   12                                                                    10/10/2008 16:05:55 PAGE 7   

 365   2         case 0x48: keyin='l';
 366   2                    break;
 367   2         case 0x81: keyin='m';
 368   2                    break;
 369   2         case 0x82: keyin='n';
 370   2                    break;
 371   2         case 0x84: keyin='0';
 372   2                    break;
 373   2         case 0x88: keyin='p';
 374   2                    break;
 375   2         case 0x01: keyin='q';
 376   2                    break;
 377   2         case 0x02: keyin='r';
 378   2                    break;
 379   2         case 0x04: keyin='s';
 380   2                    break;
 381   2         case 0x08: keyin='t';
 382   2                    break;
 383   2         default: keyin='N' ;
 384   2         }
 385   1         return keyin;
 386   1      
 387   1      }
 388          
 389          void Setpwm(char channel,  unsigned char pwmval)
 390          {
 391   1         switch (channel )
 392   1         {
 393   2              case 0:
 394   2                CCAP0L = pwmval;         //PWMVAL值确定占空比,0X00-0XFF;反比例:
 395   2                CCAP0H = pwmval;CCAPM0 = 0x4A;
 396   2                break;
 397   2              case 1:
 398   2                CCAP1L = pwmval;
 399   2                CCAP1H = pwmval;CCAPM1 = 0x4A;
 400   2                break;
 401   2              default:
 402   2                CCAP0L = pwmval;
 403   2                CCAP0H = pwmval;CCAPM0 = 0x4A ;
 404   2      
 405   2         }
 406   1          
 407   1      
 408   1      }
 409          
 410          //**********************子程序附加*******************
 411          //***********************************
 412             void stop(void)
 413             {
 414   1         HC573C1=0x00;         //停止
 415   1         }
 416          
 417             void go_left(void)
 418             {
 419   1          HC573C1=0x01;                //左转
 420   1         }
 421          
 422             void go_right(void)
 423             {
 424   1          HC573C1=0x04;                //右转
 425   1         }
 426          
C51 COMPILER V8.02   12                                                                    10/10/2008 16:05:55 PAGE 8   

 427             
 428            void go(void)
 429             {
 430   1         HC573C1=0x05;                 //前进
 431   1         }
 432          
 433          
 434                    //*************处理*****************
 435          
 436          void deal_go(void)
 437          { 
 438   1      mid=HC245C1%4;            //寻迹读入
 439   1      
 440   1      if(mid==2)go_left();
 441   1      if(mid==1)go_right();
 442   1      if(mid==3)go();
 443   1      if(mid==0)
 444   1      {
 445   2      t_no++;
 446   2      stop();
 447   2      if((t_no==3)||(t_no==4))
 448   2      {
 449   3      while(mid==0)
 450   3      {
 451   4      go();
 452   4      mid=HC245C1%4;
 453   4      }
 454   3      }
 455   2      else 
 456   2      {
 457   3      go();
 458   3      delay(100);
 459   3      while(mid==0)
 460   3      {
 461   4      go();
 462   4      mid=HC245C1%4;
 463   4      }
 464   3      for(i=0;i<16;i++)
 465   3      { 
 466   4      mid=HC245C1%4;
 467   4      if(mid==2)go_left();
 468   4      if(mid==1)go_right();
 469   4      if(mid==3)go();
 470   4      if(mid==0)go();
 471   4      delay(100);
 472   4      }
 473   3      stop();
 474   3      delay(60000); 
 475   3      HC573C2=0x00;
 476   3      }
 477   2      
 478   2      }
 479   1      
 480   1      }
 481          /*
 482          void deal_go2(void)
 483          
 484          { 
 485          if((P2_0==0)||(P2_1==0))
 486          {
 487          
 488          t_no++;
C51 COMPILER V8.02   12                                                                    10/10/2008 16:05:55 PAGE 9   

 489          flag=1;
 490          t_1=second_1;
 491          }
 492          
 493          }
 494          */
 495          //******************时间显示**************************
 496          void LCD_TIME(void)
 497          {
 498   1        DisplayString(11,0,"m   s ");
 499   1        sprintf(ADval,"%d",second);
 500   1        DisplayString(13,0,ADval);
 501   1        sprintf(ADval,"%d",minute);
 502   1        DisplayString(10,0,ADval);
 503   1      }
 504          void LCD_cesu(void)
 505          {
 506   1       a=TH1*256+TL1;
 507   1       sprintf(ADval,"%d",a);
 508   1       if(a<10000)ADval[4]=' ';
 509   1       if(a<1000)ADval[3]=' ';
 510   1       if(a<100)ADval[2]=' ';
 511   1       if(a<10)ADval[1]=' ';
 512   1       DisplayString(10,1,ADval);
 513   1      }
 514          //********************************平衡************************
 515          
 516          void T0INT( )  interrupt 1
 517          { 
 518   1        EA=0;
 519   1        TH0 = 0x3C;
 520   1        TL0 = 0xAF;
 521   1        tick ++;
 522   1        if(tick>=19)
 523   1          { 
 524   2            tick =0;
 525   2            second++ ; 
 526   2                second_1++;
 527   2                if(second>=60)
 528   2              {
 529   3               second=0;
 530   3               minute++;
 531   3              }
 532   2      
 533   2           }
 534   1                P1=0xff;
 535   1            Setpwm(0,co_2);
 536   1               EA=1;
 537   1      
 538   1      } 
 539           
 540          
 541          
 542          
 543          
 544          
 545          
 546          
 547          //******************************主程序***************************
 548          void main()
 549          {
 550   1         
C51 COMPILER V8.02   12                                                                    10/10/2008 16:05:55 PAGE 10  

 551   1         //int b,c;
 552   1         SpiInit();
 553   1         LCDInit();
 554   1         DisplayString(5,1,"No= ");
 555   1         HC573C1 = 0x0f;
 556   1         HC573C2 = 0x0F;
 557   1         KEYROW = 0x00;
 558   1         P1 = 0x01;
 559   1                                       //0x51--T0计时,T1计数
 560   1         TMOD = 0x51;  //     最高位置1测INTX脚高低电平长短,C/T位(第7位)置1选择计数模式 //*T1* GATE||C/T||M1||M0|
             -*T0*|GATE||C/T||M1||M0||
 561   1         TL0 = 0xAF;
 562   1         TH0 = 0x3C;
 563   1         TL1 = 0X00;
 564   1         TH1 = 0X00;
 565   1         ET0 = 1;
 566   1         ET1 = 1;
 567   1         TR0 = 1;
 568   1         TR1 = 1; 
 569   1         EA  = 1;
 570   1         EX0 = 1;
 571   1      
 572   1         CMOD = 0x02;  
 573   1         CCAPM0 = 0x4A; 
 574   1         CCAPM1 = 0x4A;
 575   1         CL =0;
 576   1         CCAP0H = 16;
 577   1         CCON = 0x40;   
 578   1         
 579   1              //  ADs = ReadAD(0x01);
 580   1              //  sprintf(ADval,"%d",ADs);
 581   1              // DisplayString(0,0,ADval);
 582   1              // DACout(1,ADs);
 583   1              //  DACout(2,ADs);
 584   1          // KEYROW=0xE0;
 585   1          //HC573C1 ^= 0x01;
 586   1          // delay(10000);             //这里加了延时会出现按键不正常
 587   1      
 588   1      
 589   1      
 590   1      //HC573C1=0x01;          //左转
 591   1      //HC573C1=0x04;          //右转
 592   1      //HC573C1=0x05;          //前进
 593   1      //HC573C1=0x00;         //停止 
 594   1      P1=0xff;
 595   1      HC573C2 = 0xff;
 596   1      while(keyin!='a'){;}
 597   1      while(1)
 598   1      {
 599   2      deal_go();
 600   2      
 601   2      LcdWCMD( 0x01) ;  //显示清屏
 602   2      
 603   2      a = TH1*256+TL1;
 604   2      
 605   2      sprintf(ADval,"%d",a);
 606   2      
 607   2      DisplayString(8,0,ADval);
 608   2      
 609   2      sprintf(ADval,"%d",t_no);
 610   2      
 611   2      DisplayString(0,1,ADval);
C51 COMPILER V8.02   12                                                                    10/10/2008 16:05:55 PAGE 11  

 612   2      
 613   2      }

⌨️ 快捷键说明

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