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

📄 main.lst

📁 此程序实现任意波形发生器的菜单选择操作及向FPGA发送控制命令
💻 LST
📖 第 1 页 / 共 3 页
字号:
 460   1              //freqH=((freq&0xff00)>>8);//取出频率控制字高8位
 461   1              //freqL=(freq&0x00ff);//取出频率控制字低8位
 462   1              //cycleH=((cycle_count&0xff00)>>8);
 463   1              //cycleL=(cycle_count&0x00ff);
 464   1              
 465   1      //      W_FPGA=0
 466   1              *A_FPGA=freqL;
 467   1      //      W_FPGA=1
 468   1              *(A_FPGA+1)=freqH;
 469   1              *(A_FPGA+2)=cycleL;
 470   1              *(A_FPGA+3)=cycleH;
 471   1              *(A_FPGA+4)=0;
 472   1              *(A_FPGA+5)=0;
 473   1               
 474   1      }
 475          
 476          
 477          
 478          //按ok键响应函数
 479          void action(uchar bo_type)
 480          {
 481   1         if(bo_type==3)
 482   1           create_combin(mag,freq,a,b,c);
 483   1         else 
 484   1            create_base(mag,freq,bo_type);
 485   1            
 486   1      }
 487          
 488          ///////////////////////////////////////////////////////////////////////////////
 489          
 490          //读取键盘数据,返回当前被按下的键号
 491          uchar keyin(void)
 492          {
 493   1              uchar i;
 494   1              COM=0x40;
 495   1              i=DAT;
 496   1              i=i&0x7f; //取键盘数据低7位
 497   1              return(i);
 498   1      }
 499          
 500          
 501          ////////////////////////////////////////////////////////////////////////////////主函数
 502          void main(void)
 503          {
 504   1       
 505   1              uchar i,j,k;
 506   1          
 507   1              
 508   1              //////////////////////////////////////////////////////////////////////////////
 509   1              //初始化单片机
C51 COMPILER V7.20   MAIN                                                                  08/24/2007 11:29:03 PAGE 10  

 510   1              AUXR = 0x02;/*STC单片机关内部RAM和开ALE*/
 511   1              for(i=0;i<5;i++)
 512   1              {
 513   2                      for(j=0;j<100;j++)
 514   2                      {
 515   3                              for(k=0;k<100;k++);
 516   3                      }
 517   2              }
 518   1      
 519   1              //////////////////////////////////////////////////////////////////////////////
 520   1              //初始化8279
 521   1              COM=0xd1;//1101 0001b 清除所有显示
 522   1              do{ACC=COM;}
 523   1              while(clflag==1);   //清除起来比较慢,所以一条指令执行的时间不足以完成所有清除,故需等待
 524   1              COM=0x01;COM=0x02;  
 525   1              IE=0x81;TCON=0x01;
 526   1              //////////////////////////////////////////////////////////////////////////////
 527   1          for(i=0;i<8;i++)
 528   1              {
 529   2                      COM=0X80+i;
 530   2                      DAT=seg[0];
 531   2              }
 532   1          //大循环
 533   1              while(1)
 534   1              {  
 535   2                      while(int_flag==0)  /*等待中断*/
 536   2                   {
 537   3                         ;//后台程序
 538   3                       }
 539   2                      
 540   2                      int_flag=0;
 541   2                      if(ok==1) {ok=0;EA=0;action(state0);EA=1;}
 542   2                      //if(ok==1) {ok=0;action(state0);}
 543   2      
 544   2              //根据键值调用键盘响应函数
 545   2                      switch(state0)
 546   2                      {
 547   3                              case 0:switch(state1)
 548   3                              {
 549   4                                 case 0:switch(state2)
 550   4                                        {
 551   5                                          case 0:freq++;display();delay();break;
 552   5                                          case 1:freq--;display();delay();break;
 553   5                                          case 2:freq+=100;display();delay();break;
 554   5                                                                              case 3:freq-=100;display();delay();break;
 555   5                                                                              case 4:break;
 556   5                                        }break;
 557   4                                                        
 558   4                                 case 1:switch(state2)
 559   4                                        {
 560   5                                          case 0:mag+=5;display();delay();break;
 561   5                                          case 1:mag-=5;display();delay();break;
 562   5                                                                              case 2:break;
 563   5                                        }break;
 564   4                                 case 2:break;
 565   4                                                       }
 566   3                                     break;
 567   3                         case 1:switch(state1)
 568   3                              {
 569   4                                 case 0:switch(state2)
 570   4                                        {
 571   5                                          case 0:freq++;display();delay();break;
C51 COMPILER V7.20   MAIN                                                                  08/24/2007 11:29:03 PAGE 11  

 572   5                                          case 1:freq--;display();delay();break;
 573   5                                                                              case 2:freq+=100;display();delay();break;
 574   5                                                                              case 3:freq-=100;display();delay();break;
 575   5                                                                              case 4:break;
 576   5                                        }break;
 577   4                                 case 1:switch(state2)
 578   4                                        {
 579   5                                          case 0:mag+=5;display();delay();break;
 580   5                                          case 1:mag-=5;display();delay();break;
 581   5                                                                              case 2:break;
 582   5                                                                              case 3:break;
 583   5                                                                              case 4:break;
 584   5                                        }break;
 585   4                                                       }
 586   3                                         break;
 587   3                              case 2:switch(state1)
 588   3                              {
 589   4                                 case 0:switch(state2)
 590   4                                        {
 591   5                                          case 0:freq++;display();delay();break;
 592   5                                          case 1:freq--;display();delay();break;
 593   5                                                                              case 2:freq+=100;display();delay();break;
 594   5                                                                              case 3:freq-=100;display();delay();break;
 595   5                                                                              case 4:break;
 596   5                                        }break;
 597   4                                 case 1:switch(state2)
 598   4                                        {
 599   5                                          case 0:mag+=5;display();delay();break;
 600   5                                          case 1:mag-=5;display();delay();break;
 601   5                                                                              case 2:break;
 602   5                                                                              case 3:break;
 603   5                                                                              case 4:break;
 604   5                                        }break;
 605   4                                                       }
 606   3                                          break;
 607   3                               case 3:switch(state1)
 608   3                              {
 609   4                                 case 0:switch(state2)
 610   4                                        {
 611   5                                          case 0:freq++;display();delay();break;
 612   5                                          case 1:freq--;display();delay();break;
 613   5                                                                              case 2:freq+=100;display();delay();break;
 614   5                                                                              case 3:freq-=100;display();delay();break;
 615   5                                                                              case 4:break;
 616   5                                        }break;
 617   4                                 case 1:switch(state2)
 618   4                                        {
 619   5                                          case 0:mag+=5;display();delay();break;
 620   5                                          case 1:mag-=5;display();delay();break;
 621   5                                                                              case 2:break;
 622   5                                                                              case 3:break;
 623   5                                                                              case 4:break;
 624   5                                        }break;
 625   4                                                       }
 626   3                                          break;
 627   3                  case 4:{EA=0;read_bo();EA=1;} 
 628   3                              default:break;
 629   3                      }
 630   2               state2=4;
 631   2              }
 632   1      }
 633          
C51 COMPILER V7.20   MAIN                                                                  08/24/2007 11:29:03 PAGE 12  

 634          
 635          //INT0的中断服务函数
 636          //INT0由8279在键盘按下时发出
 637          //注意关键字interrupt
 638          void int_int0(void) interrupt 0 using 0
 639          {
 640   1              uchar i;
 641   1      
 642   1          //设置标志,告诉主循环中断发生了
 643   1              int_flag=1;
 644   1              //读取键值
 645   1          key_value=keyin();
 646   1              for(i=0;i<=3;i++)
 647   1                if(key_value==tb0[i]) state0=i;
 648   1          for(i=0;i<=2;i++)
 649   1                if(key_value==tb1[i]) state1=i;
 650   1              for(i=0;i<=3;i++)
 651   1                 if(key_value==tb2[i]) state2=i;
 652   1              for(i=0;i<=9;i++)
 653   1                 if(key_value==xishu[i]) 
 654   1                     { value=i;
 655   2                       if(state0==3) {count++;
 656   3                                              if(count==1) {a=value;COM=0X80;DAT=seg[a];}
 657   3                                                      if(count==2) {b=value;COM=0X81;DAT=seg[b];}
 658   3                                                      if(count==3) {c=value;count=0;COM=0X82;DAT=seg[c];}
 659   3                                                      }
 660   2                      
 661   2                                       switch(state0)
 662   2                        {
 663   3                                                case 0:if(state1==2) {count_cycle++;
 664   4                                                                  if(count_cycle==1) {baiwei=value;COM=0X80;DAT=seg[baiwei];cycle_cou
             -nt=baiwei*100;}
 665   4                                                                          if(count_cycle==2) {shiwei=value;COM=0X81;DAT=seg[shiwei];cycle_count+=sh
             -iwei*10;}
 666   4                                                                          if(count_cycle==3) {gewei=value;count_cycle=0;COM=0X82;DAT=seg[gewei];cyc
             -le_count+=gewei;}}
 667   3                                                                        break;
 668   3                                case 1:if(state1==2) {count_cycle++;
 669   4                                                                  if(count_cycle==1) {baiwei=value;COM=0X80;DAT=seg[baiwei];cycle_cou
             -nt=baiwei*100;}
 670   4                                                                          if(count_cycle==2) {shiwei=value;COM=0X81;DAT=seg[shiwei];cycle_count+=sh
             -iwei*10;}
 671   4                                                                          if(count_cycle==3) {gewei=value;count_cycle=0;COM=0X82;DAT=seg[gewei];cyc
             -le_count+=gewei;}}
 672   3                                                                        break;
 673   3                                                        case 2:if(state1==2) {count_cycle++;
 674   4                                                                  if(count_cycle==1) {baiwei=value;COM=0X80;DAT=seg[baiwei];cycle_cou
             -nt=baiwei*100;}
 675   4                                                                          if(count_cycle==2) {shiwei=value;COM=0X81;DAT=seg[shiwei];cycle_count+=sh
             -iwei*10;}
 676   4                                                                          if(count_cycle==3) {gewei=value;count_cycle=0;COM=0X82;DAT=seg[gewei];cyc
             -le_count+=gewei;}}
 677   3                                                                        break;
 678   3                                                        case 3:if(state1==2) {count_cycle++;
 679   4                                                                  if(count_cycle==1) {baiwei=value;COM=0X80;DAT=seg[baiwei];cycle_cou
             -nt=baiwei*100;}
 680   4                                                                          if(count_cycle==2) {shiwei=value;COM=0X81;DAT=seg[shiwei];cycle_count+=sh
             -iwei*10;}
 681   4                                                                          if(count_cycle==3) {gewei=value;count_cycle=0;COM=0X82;DAT=seg[gewei];cyc
             -le_count+=gewei;}}
 682   3                                                                        break;
 683   3                                         }
C51 COMPILER V7.20   MAIN                                                                  08/24/2007 11:29:03 PAGE 13  

 684   2                  }
 685   1          if(key_value==0x18) ok=1;
 686   1      
 687   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2477    ----
   CONSTANT SIZE    =   1568    ----
   XDATA SIZE       =    511    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18      53
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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