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

📄 main.lst

📁 单片机`方波发生器,可调频, 0-1000HZ
💻 LST
📖 第 1 页 / 共 2 页
字号:
 373   4          if(flag==0)
 374   4               {
 375   5                flag=1;
 376   5                frequency=5;
 377   5                }
 378   4          else
 379   4              {
 380   5          frequency=(int)(frequency*10+5);
 381   5                        if(frequency>1000)
 382   5                  {
 383   6                   disbuf[3]=11;
 384   6                       disbuf[2]=disbuf[1]=disbuf[0]=10;
 385   6                       frequency=0;
 386   6                       goto exception;
 387   6               }
 388   5            }
 389   4          while(key5==0);
 390   4          }
 391   3         }
 392   2      
 393   2        if(key6==0)
 394   2        {
 395   3         delay10ms();
 396   3         if(key6==0)
 397   3         {    
 398   4          switch(number)
 399   4          {
 400   5               case 0: 
 401   5                  disbuf[3]=10;
 402   5                  disbuf[2]=10;
 403   5                  disbuf[1]=10; 
 404   5                      disbuf[0]=6;
 405   5                              break;
 406   5               case 1:
 407   5                  disbuf[3]=10;
 408   5                  disbuf[2]=10;
 409   5                      disbuf[1]=disbuf[0];
 410   5                      disbuf[0]=6;
 411   5                              break;
 412   5               case 2:
 413   5                  disbuf[3]=10;
 414   5                      disbuf[2]=disbuf[1];
 415   5                      disbuf[1]=disbuf[0];
 416   5                      disbuf[0]=6;
 417   5                              break;
 418   5           case 3:
 419   5                      disbuf[3]=disbuf[2];
 420   5                      disbuf[2]=disbuf[1];
 421   5                      disbuf[1]=disbuf[0];
 422   5                      disbuf[0]=6;
 423   5                              break;          
 424   5            }
 425   4           number++;
 426   4               if(number==4)
 427   4               number=0;
C51 COMPILER V7.06   MAIN                                                                  12/27/2008 11:09:59 PAGE 8   

 428   4      
 429   4          if(flag==0)
 430   4               {
 431   5                flag=1;
 432   5                frequency=6;
 433   5                }
 434   4          else
 435   4          {
 436   5          frequency=(int)(frequency*10+6);
 437   5                        if(frequency>1000)
 438   5                  {
 439   6                   disbuf[3]=11;
 440   6                       disbuf[2]=disbuf[1]=disbuf[0]=10;
 441   6                       frequency=0;
 442   6                       goto exception;
 443   6               }
 444   5            }
 445   4          while(key6==0);
 446   4          }
 447   3         }
 448   2        if(key7==0)
 449   2        {
 450   3         delay10ms();
 451   3         if(key7==0)
 452   3         {   
 453   4          switch(number)
 454   4          {
 455   5               case 0: 
 456   5                  disbuf[3]=10;
 457   5                  disbuf[2]=10;
 458   5                  disbuf[1]=10; 
 459   5                      disbuf[0]=7;
 460   5                              break;
 461   5               case 1:
 462   5                  disbuf[3]=10;
 463   5                  disbuf[2]=10;
 464   5                      disbuf[1]=disbuf[0];
 465   5                      disbuf[0]=7;
 466   5                              break;
 467   5               case 2:        
 468   5                  disbuf[3]=10;
 469   5                      disbuf[2]=disbuf[1];
 470   5                      disbuf[1]=disbuf[0];
 471   5                      disbuf[0]=7;
 472   5                              break;
 473   5           case 3:
 474   5                      disbuf[3]=disbuf[2];
 475   5                      disbuf[2]=disbuf[1];
 476   5                      disbuf[1]=disbuf[0];
 477   5                      disbuf[0]=7;
 478   5                              break;          
 479   5            }
 480   4           number++;
 481   4               if(number==4)
 482   4               number=0;
 483   4      
 484   4          if(flag==0)
 485   4               {
 486   5                flag=1;
 487   5                frequency=7;
 488   5                }
 489   4          else
C51 COMPILER V7.06   MAIN                                                                  12/27/2008 11:09:59 PAGE 9   

 490   4              {
 491   5           frequency=(int)(frequency*10+7);
 492   5                if(frequency>1000)
 493   5                  {
 494   6                   disbuf[3]=11;
 495   6                       disbuf[2]=disbuf[1]=disbuf[0]=10;
 496   6                       frequency=0;
 497   6                       goto exception;
 498   6               }
 499   5            }
 500   4          while(key7==0);
 501   4          }
 502   3         }
 503   2      
 504   2        if(key8==0)
 505   2        {
 506   3         delay10ms();
 507   3         if(key8==0)
 508   3         {    
 509   4          switch(number)
 510   4          {
 511   5               case 0: 
 512   5                  disbuf[3]=10;
 513   5                  disbuf[2]=10;
 514   5                  disbuf[1]=10; 
 515   5                      disbuf[0]=8;
 516   5                              break;
 517   5               case 1:
 518   5                  disbuf[3]=10;
 519   5                  disbuf[2]=10;
 520   5                      disbuf[1]=disbuf[0];
 521   5                      disbuf[0]=8;
 522   5                              break;
 523   5               case 2:
 524   5                  disbuf[3]=10;
 525   5                      disbuf[2]=disbuf[1];
 526   5                      disbuf[1]=disbuf[0];
 527   5                      disbuf[0]=8;
 528   5                              break;
 529   5           case 3:
 530   5                      disbuf[3]=disbuf[2];
 531   5                      disbuf[2]=disbuf[1];
 532   5                      disbuf[1]=disbuf[0];
 533   5                      disbuf[0]=8;
 534   5                              break;          
 535   5            }
 536   4           number++;
 537   4               if(number==4)
 538   4               number=0;
 539   4      
 540   4          if(flag==0)
 541   4               {
 542   5                flag=1;
 543   5                frequency=8;
 544   5                }
 545   4          else
 546   4              {
 547   5          frequency=(int)(frequency*10+8);
 548   5              if(frequency>1000)
 549   5                {
 550   6                 disbuf[3]=11;
 551   6                 disbuf[2]=disbuf[1]=disbuf[0]=10;
C51 COMPILER V7.06   MAIN                                                                  12/27/2008 11:09:59 PAGE 10  

 552   6                 frequency=0;
 553   6             goto exception;
 554   6                 }
 555   5               }
 556   4          while(key8==0);
 557   4          }
 558   3         }
 559   2      
 560   2        if(key9==0)
 561   2        {
 562   3         delay10ms();
 563   3         if(key9==0)
 564   3         {    
 565   4          switch(number)
 566   4          {
 567   5               case 0:
 568   5                  disbuf[3]=10;
 569   5                  disbuf[2]=10;
 570   5                  disbuf[1]=10;  
 571   5                      disbuf[0]=9;
 572   5                              break;
 573   5               case 1:
 574   5                  disbuf[3]=10;
 575   5                  disbuf[2]=10;
 576   5                      disbuf[1]=disbuf[0];
 577   5                      disbuf[0]=9;
 578   5                              break;
 579   5               case 2:
 580   5                  disbuf[3]=10;
 581   5                      disbuf[2]=disbuf[1];
 582   5                      disbuf[1]=disbuf[0];
 583   5                      disbuf[0]=9;
 584   5                              break;
 585   5           case 3:
 586   5                      disbuf[3]=disbuf[2];
 587   5                      disbuf[2]=disbuf[1];
 588   5                      disbuf[1]=disbuf[0];
 589   5                      disbuf[0]=9;
 590   5                              break;          
 591   5            }
 592   4           number++;
 593   4               if(number==4)
 594   4               number=0;
 595   4      
 596   4          if(flag==0)
 597   4               {
 598   5                flag=1;
 599   5                frequency=9;
 600   5                }
 601   4          else
 602   4              {
 603   5          frequency=(int)(frequency*10+9);
 604   5          if(frequency>1000)
 605   5                 {
 606   6                   disbuf[3]=11;
 607   6                       disbuf[2]=disbuf[1]=disbuf[0]=10;
 608   6                       frequency=0;
 609   6                       goto exception;
 610   6              }
 611   5           }
 612   4          while(key9==0);
 613   4          }
C51 COMPILER V7.06   MAIN                                                                  12/27/2008 11:09:59 PAGE 11  

 614   3         }
 615   2         if(makesure==0)               //确认键
 616   2        {
 617   3         delay10ms();
 618   3         if(makesure==0)
 619   3         {
 620   4          P2_3=0;                     //开确认指示灯
 621   4          pw=500000/frequency;                 //计算脉冲宽度,单位:uS
 622   4          multiple=(unsigned char)(pw/65536);  //计算pw比65536的倍数
 623   4              counter=multiple;
 624   4          rest=(unsigned int)(pw%65536);       //计算pw除以65536所得的余数
 625   4              if(rest>184)
 626   4              rest-=184;                        //线性修正,修正中断响应及中断受阻的时间影响         
 627   4          if(multiple==0)
 628   4          {
 629   5           TH0=(65536-rest)>>8;
 630   5           TL0=65536-rest;
 631   5           }
 632   4          else
 633   4          {
 634   5           TH0=0;
 635   5           TL0=0;
 636   5           }
 637   4          TR0=1;
 638   4          }
 639   3         }
 640   2         if(renew==0)
 641   2         {
 642   3          delay10ms();
 643   3          if(renew==0)
 644   3          {
 645   4           frequency=0;
 646   4           disbuf[0]=disbuf[1]=disbuf[2]=disbuf[3]=0;
 647   4           P2_3=1;           //关确认指示灯
 648   4           }
 649   3          } 
 650   2        }
 651   1      exception:
 652   1        for(;;)
 653   1        {
 654   2         P2_2=0;                 //预置数超过1000报警灯
 655   2         if(renew==0)            //重置频率键按下
 656   2           {
 657   3                delay10ms();
 658   3                if(renew==0)        //重新初始化各变量
 659   3              {
 660   4               disbuf[0]=disbuf[1]=disbuf[2]=disbuf[3]=0;
 661   4               P2_2=1;          //关预置数指示灯
 662   4               flag=0;
 663   4                       buffer=0;
 664   4               goto begin;      //返回按键查询
 665   4               }
 666   3                }
 667   2         }
 668   1       }
 669          
 670          
 671          /***************延时10毫秒子程序*******************/
 672          void delay10ms(void) 
 673          {
 674   1       for(i=20;i>0;i--)
 675   1       for(j=248;j>0;j--);
C51 COMPILER V7.06   MAIN                                                                  12/27/2008 11:09:59 PAGE 12  

 676   1      }
 677          
 678          void t0(void) interrupt 1    //T0中断入口,中断服务程序用来产生方波
 679          {
 680   1       if(counter==0)
 681   1       {
 682   2        P2_0=~P2_0;             //输出方波                            
 683   2        TH0=(65536-rest)>>8;
 684   2        TL0=65536-rest;
 685   2        counter=multiple;
 686   2        }
 687   1       else
 688   1       {
 689   2        TH0=0;
 690   2        TL0=0;
 691   2        counter--;             //软件定时器
 692   2        }
 693   1       }
 694          
 695          void t1(void) interrupt 3   //T1中断入口,此程序用于扫描数码管
 696          {
 697   1       if(buffer==0)
 698   1       
 699   1       { 
 700   2        P0=disp[disbuf[3]];       //段选
 701   2        
 702   2        P2_6=0;
 703   2        P2_7=0;
 704   2        }
 705   1       if(buffer==1)
 706   1       
 707   1        {
 708   2        P0=disp[disbuf[2]];
 709   2        
 710   2        P2_6=0;
 711   2        P2_7=1;
 712   2        }
 713   1       if(buffer==2)
 714   1       
 715   1       {  
 716   2        P0=disp[disbuf[1]];
 717   2        
 718   2        P2_6=1;
 719   2        P2_7=0;
 720   2      
 721   2        }
 722   1       if(buffer==3)
 723   1       
 724   1       {
 725   2        P0=disp[disbuf[0]];
 726   2        
 727   2        P2_6=1;
 728   2        P2_7=1;
 729   2        }
 730   1       
 731   1       buffer++;              //扫描标志
 732   1       if(buffer==4)          //完成一个扫描周期
 733   1       buffer=0;              //开始新的扫描周期
 734   1      
 735   1       TH1=65036>>8;          //定时器重装初值
 736   1       TL1=65036;
 737   1      }
C51 COMPILER V7.06   MAIN                                                                  12/27/2008 11:09:59 PAGE 13  

 738          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1757    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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