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

📄 sysmain.lst

📁 一款性能稳定的DMX512液晶显示控制系统,包括标准的数据输出,多级的菜单显示,通道可以任意设置
💻 LST
📖 第 1 页 / 共 3 页
字号:
 580          {
 581   1              if(ModeTmp == 3)
 582   1                      ModeTmp = 0;
 583   1              else ModeTmp++;
 584   1              PrintStr_xy(15,0,CurveStr[ModeTmp]);
 585   1      }
 586          void CH_ModeDec()
 587          {
 588   1              if(ModeTmp == 0)
 589   1                      ModeTmp = 3;
 590   1              else ModeTmp++;
 591   1              PrintStr_xy(15,0,CurveStr[ModeTmp]);
 592   1      }
 593          void ModeSave()
 594          {
 595   1              unsigned int data i;
 596   1              EA = 0;
 597   1              if(ChannelSel == 0 )
 598   1              {
 599   2                      for(i=1;i<513;i++)
 600   2                      chMode[i] = ModeTmp;
 601   2              }
 602   1              else
 603   1                      chMode[ChannelSel] = ModeTmp;
 604   1              EA = 1;
 605   1              PrintStr_xy(0,0,SettingSaved);
 606   1      }
 607          void ChSelfCheck()
 608          {
 609   1              PrintStr_xy(0,0,SelfCheckStr);
 610   1              bLocalControl=True;             /*置标志由主程序根据标志调用相应函数自检*/
 611   1              bSelfCheck = True;
 612   1              LV = 0;
 613   1      }
C51 COMPILER V6.23a  SYSMAIN                                                               05/22/2003 17:10:26 PAGE 11  

 614          void TimeCoutInc()
 615          {
 616   1              if(TimeCout == 20)
 617   1                      TimeCout = 1;
 618   1              else    TimeCout++;
 619   1              PrintNum2_xy(17,0,TimeCout);
 620   1              Cursor_xy(17,0);
 621   1      }
 622          void TimeCoutDec()
 623          {
 624   1              if(TimeCout == 1)
 625   1                      TimeCout = 20;
 626   1              else    TimeCout--;
 627   1              PrintNum2_xy(17,0,TimeCout);
 628   1              Cursor_xy(17,0);
 629   1      }
 630          void CharseCheck()
 631          {
 632   1              unsigned int i;
 633   1              PrintStr_xy(0,0,CharseCheckStr);
 634   1              while(bOutEnd == False);
 635   1              for(i=0;i<512;i++)
 636   1                      dmx_outbuf[i]=0;
 637   1              bLocalControl = True;           /*置标志由主程序根据标志调用相应函数自检*/
 638   1              bCharseCheck  = True;
 639   1      }
 640          void CueNumInc()
 641          {
 642   1              if(CueNum == CUE_MAX)
 643   1                      CueNum = 1;
 644   1              else    CueNum++;
 645   1              PrintNum2_xy(17,0,CueNum);
 646   1              Cursor_xy(17,0);
 647   1      }
 648          void CueNumDec()
 649          {
 650   1              if(CueNum == 1)
 651   1                      CueNum =CUE_MAX;
 652   1              else    CueNum--;
 653   1              PrintNum2_xy(17,0,CueNum);
 654   1              Cursor_xy(17,0);
 655   1      }
 656          void SaveNumCue()
 657          {
 658   1              unsigned int data i;
 659   1              for(i=0;i<512;i++)
 660   1                      SavedCue[CueNum-1][i]=dmx_outbuf[i];
 661   1              PrintStr_xy(0,0,CueSavedStr);
 662   1      }
 663          void DeleNumCue()
 664          {
 665   1              unsigned int data i;
 666   1              for(i=0;i<512;i++)
 667   1                      SavedCue[CueNum-1][i]=0;
 668   1              PrintStr_xy(0,0,CueDeleStr);
 669   1      }
 670          void RcallNumCue()
 671          {
 672   1              unsigned int data i;
 673   1              while(bOutEnd == False);
 674   1              EA=0;
 675   1              for(i=0;i<512;i++)
C51 COMPILER V6.23a  SYSMAIN                                                               05/22/2003 17:10:26 PAGE 12  

 676   1                      dmx_outbuf[i] = SavedCue[CueNum-1][i];
 677   1              EA=1;
 678   1              //
 679   1      }
 680          void ChangeLV_SelfCheck()
 681          {       unsigned int i;
 682   1              if(ChannelSel == 0)
 683   1              {
 684   2                      for(i=0;i<DmxLength;i++)
 685   2                      dmx_outbuf[i]=LV;
 686   2              }
 687   1              else
 688   1                      dmx_outbuf[ChannelSel]=LV;
 689   1              PrintNum_xy(16,0,turn_ff_to_99[LV]);
 690   1              LV++;
 691   1      }
 692          void ChangeLV_CharseCheck()
 693          {
 694   1              unsigned char data t=TimeCout;
 695   1              unsigned int data i;
 696   1              while(t--)
 697   1              {
 698   2                      TF1 = 0;
 699   2                      TH1 = TIME50MSH;
 700   2                      TL1 = TIME50MSL;
 701   2                      TR1 = 1;
 702   2                      while(TF1 == 0);
 703   2                      TR1 = 0;
 704   2              }
 705   1              for(i=0;i<DmxLength;i++)
 706   1              {
 707   2                      dmx_outbuf[i]=255;
 708   2                      if(i==0)
 709   2                              dmx_outbuf[DmxLength-1]=0;
 710   2                      else 
 711   2                              dmx_outbuf[i-1]=0;
 712   2              }
 713   1      }
 714                  
 715          void SendDmx512(unsigned char outStartCode)
 716          {
 717   1              odmxIndex = 0;          /*缓冲区索引号*/
 718   1              while(bOutEnd != True); /*上一帧数据还没有发送完毕等待*/
 719   1              bOutEnd = False;        /*这一帧数据刚开始发送,当然没有发送完毕*/
 720   1              P3_1=0;                 /*发送同步头信号*/
 721   1              TF1 = 0;
 722   1              TH1 = TIME88USH;
 723   1              TL1 = TIME88USL;
 724   1              TR1 = 1;
 725   1              while(TF1 == 0);
 726   1              TR1 = 0;
 727   1              P3_1=1;
 728   1              TI=0;
 729   1              ES=1;
 730   1              SBUF=outStartCode;      /*发送数据头,将启动串行发送中断*/
 731   1              /*while(1)
 732   1              {
 733   1              while(TI==0);
 734   1              
 735   1                      TI=0;
 736   1                      SBUF=dmx_outbuf[odmxIndex];
 737   1                      odmxIndex++;
C51 COMPILER V6.23a  SYSMAIN                                                               05/22/2003 17:10:26 PAGE 13  

 738   1                      if(odmxIndex==512) 
 739   1                      {
 740   1                              bOutEnd = True;         /*发送完毕标志位/
 741   1                              odmxIndex=0;
 742   1                              ES=1;
 743   1                              return;
 744   1                      }
 745   1              //return;
 746   1              
 747   1              }*/
 748   1      }
 749          
 750          void Ex0_Dmx512_interrupt(void) interrupt 0         
 751          {
 752   1              P1_7=~P1_7;
 753   1              SIOAddrBegin = AddrBegin;
 754   1              SIOAddrEnd   = AddrEnd;
 755   1              REN=1;
 756   1              EX0=0;
 757   1      }
 758          
 759          void Timer0_interrupt(void)     interrupt 1                 
 760          {/*
 761   1      50ms进入,扫描键盘,键值入键盘缓冲区
 762   1      */
 763   1              
 764   1              unsigned char KeyOldValue,KeyValue;
 765   1              P1_6=~P1_6; 
 766   1              KeyOldValue=P1&0x3f;                    //00111111
 767   1              if(KeyOldValue==0x3f)                   /*判断有无键按下*/
 768   1              {
 769   2                      InsertMsg(&key_buf,KEY_NULL);
 770   2                      return;
 771   2              }
 772   1      /*有键按下,延时10毫秒*/
 773   1              TF1 = 0;
 774   1              TH1 = TIME10MSH;
 775   1              TL1 = TIME10MSL;
 776   1              TR1 = 1;
 777   1              while(TF1 == 0);
 778   1              TR1 = 0;
 779   1              
 780   1              KeyValue=P1&0x3f;
 781   1              switch(KeyValue)                /*判断是否是有效键,无效退出中断。亦起到去抖作用*/
 782   1              {       
 783   2                      case 0x3e:       
 784   2                      case 0x3d:
 785   2                      case 0x3b:
 786   2                      case 0x37:
 787   2                      case 0x2f:
 788   2                      case 0x1f:
 789   2                              break;
 790   2                      default:
 791   2                              return;
 792   2              }
 793   1              while(((P1&0x3f)&0x3f)!=0x3f);     /*判断按键是否释放*/ 
 794   1              InsertMsg(&key_buf,KeyValue);
 795   1              return;
 796   1      }
 797          
 798          void Ex1_interrupt(void)                interrupt 2            
 799          {
C51 COMPILER V6.23a  SYSMAIN                                                               05/22/2003 17:10:26 PAGE 14  

 800   1      
 801   1      }
 802          
 803          void Timer1_interrupt(void)     interrupt 3
 804          {
 805   1      
 806   1      }
 807          
 808          void Serial_interrupt(void)     interrupt 4            
 809          {
 810   1              if(RI)
 811   1              {
 812   2               RI=0;
 813   2                      if(bBeginRcv == False)
 814   2                      {
 815   3                              if(idmxIndex == 0)      
 816   3                                      RcvStartCode=SBUF; 
 817   3                              idmxIndex++;
 818   3                              if(SIOAddrBegin == idmxIndex)           
 819   3                              bBeginRcv = True;
 820   3                              return ;        
 821   3                      }//begin recv need data
 822   2                      dmx_inbuf[idmxIndex-SIOAddrBegin]=SBUF;
 823   2                      if(idmxIndex!=SIOAddrEnd)
 824   2                      {
 825   3                              idmxIndex++;
 826   3                              return;                         
 827   3                      }
 828   2                      /*运行到此已经接收完毕*/
 829   2                      idmxIndex = 0;
 830   2                      bBeginRcv = False;
 831   2                      bDataReady        = True;       /*接收完毕,有数据需要处理了*/
 832   2                      REN = 0;                        /*接收完毕不需要接收了*/
 833   2                      
 834   2              }   
 835   1              if(TI/*&&(odmxIndex<512)*/)
 836   1              {
 837   2                      TI=0;
 838   2                      if(bOutEnd == False)
 839   2                      {
 840   3                              SBUF=dmx_outbuf[odmxIndex];
 841   3                              odmxIndex++;
 842   3                      }
 843   2                      if(odmxIndex==512) 
 844   2                      {       
 845   3                              bOutEnd = True;         /*发送完毕标志位*/
 846   3                              odmxIndex=0;
 847   3                      }
 848   2              return;
 849   2              }
 850   1              
 851   1      }
 852          
 853          void Timer2_interrupt(void)     interrupt 5
 854          {
 855   1      
 856   1      }
 857          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2896    ----
C51 COMPILER V6.23a  SYSMAIN                                                               05/22/2003 17:10:26 PAGE 15  

   CONSTANT SIZE    =   2097    ----
   XDATA SIZE       =  27144    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     51       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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