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

📄 sysmain.lst

📁 一款性能稳定的DMX512液晶显示控制系统,包括标准的数据输出,多级的菜单显示,通道可以任意设置
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V6.23a  SYSMAIN                                                               05/22/2003 17:10:26 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE SYSMAIN
OBJECT MODULE PLACED IN SysMain.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe SysMain.c DB OE SMALL ROM(LARGE) 

stmt level    source

   1          #include "d:\design\SysMain.h"
   2          
   3          //#define _debug
   4          
   5          void KeyExplain(unsigned char key);
   6          void SendDmx512(unsigned char outStartCode);
   7          void ChangeLV_SelfCheck();
   8          void ChangeLV_CharseCheck();
   9          void SystemInit();
  10          void VariableInit();
  11          void HardWareInit();
  12          void LcdInit();
  13          
  14          
  15          /*---------菜单函数申明------------*/
  16          void DspMain();
  17          
  18          void DspAddrMenu();
  19          void DspCH_ModeMenu();
  20          void DspSCheckMenu();
  21          void DspCharseMenu();
  22          void DspCSaveMenu();
  23          void DspCDeleMenu();
  24          void DspCRcallMenu();
  25          
  26          void DspAddrSel();
  27          void DspChannelSel();
  28          void DspTimeSel();
  29          void DspCueNumSel();
  30          
  31          void AddrLefInc();
  32          void AddrLefDec();
  33          void AddrRgtInc();
  34          void AddrRgtDec();
  35          void AddrLefSav();
  36          void AddrRgtSav();
  37          
  38          void ChannelInc();
  39          void ChannelDec();
  40          void DspModeSel();
  41          void CH_ModeInc();
  42          void CH_ModeDec();
  43          void ModeSave();
  44          void ChSelfCheck();
  45          void TimeCoutInc();
  46          void TimeCoutDec();
  47          void CharseCheck();
  48          void CueNumInc();
  49          void CueNumDec();
  50          void SaveNumCue();
  51          void DeleNumCue();
  52          void RcallNumCue();
  53          
  54          /*---------菜单字符串定义----------------*/
  55          unsigned char code      cdItoA[16]      =   /*int-char转换*/
C51 COMPILER V6.23a  SYSMAIN                                                               05/22/2003 17:10:26 PAGE 2   

  56          {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  57          unsigned char code   Main1[]            ={"   Welcome    Use   "};
  58          unsigned char code   Main2[]            ={"      KTG  3S-96    "};   
  59          unsigned char code   ChildPromptStr[ ]  ={" Quit            Ok "};
  60          unsigned char code   MainPromptStr[ ]   ={" Return      Select "};
  61          //Main Menu String
  62          unsigned char code MenuString[][21]={
  63          /*"12345678901234567890"*/
  64            " 1-Address Setup    ",
  65            " 2-Channel Mode     ",
  66            " 3-Self Check       ",
  67            " 4-Charse Check     ",
  68            " 5-Save Current Cue ",
  69            " 6-Delete Cue       ",
  70            " 7-Recall Cue       "};
  71          //Address Setup Menu String             /*"12345678901234567890"*/
  72          unsigned char code AddrSetupStr[21]     ={"  Address: xxx--yyy "};
  73          unsigned char code CHSelectStr[21]      ={" CH-Select:     xxx "};
  74          unsigned char code ModeStr[21]          ={" xxx CH Mode:  xxxx "}; 
  75          unsigned char code TimeCountStr[21]     ={"Charse Time:     xx "};
  76          unsigned char code SelfCheckStr[21]     ={" Self Checking  xx% "};
  77          unsigned char code CharseCheckStr[21]   ={" Charse Checking... "};
  78          unsigned char code CueNumStr[21]        ={"Select Cue Num:  xx "};
  79          unsigned char code SettingSaved[21]     ={"  Settings   Saved  "};
  80          unsigned char code CueSavedStr[21]      ={"     Cue    Saved   "};
  81          unsigned char code CueDeleStr[21]       ={"    Cue    Erased   "};
  82          unsigned char code CurveStr[4][5]       ={
  83                                                    "Line",
  84                                                    " Exp",
  85                                                    " Log",
  86                                                    "  On"};    
  87          unsigned char code AllStr[4]            ={"All"};
  88          
  89          /*----------系统设置参数定义---------------------*/
  90          unsigned char xdata             dmx_inbuf[512];         /*DMX数据接收缓冲区*/
  91          unsigned char xdata             dmx_outbuf[512];        /*DMX数据发送缓冲区*/
  92          unsigned char xdata             chMode[512];            /*每一回路模式*/
  93          unsigned char xdata             SavedCue[CUE_MAX][512]; /*场记录数据区*/
  94          unsigned int  xdata             AddrBegin       = 1;    /*立柜接收起始地址*/
  95          unsigned int  xdata             AddrEnd         = 96;   /*立柜接收结束地址*/
  96          unsigned int  xdata             DmxLength       = 96;   /*立柜的回路数*/
  97          unsigned int  xdata             TimeCout        = 10;   /*跑灯间隔时间100ms的倍速*/
  98          /*----------为减少参数传递时间,采用全局变量交换数据-------*/
  99          
 100          unsigned int  data              DmxLengthTmp    = 0;    /*总共接收多少路数据*/
 101          unsigned int  data              AddrBeginTmp    = 0;    /*菜单使用的起始地址临时变量*/
 102          unsigned int  data              AddrEndTmp      = 0;    /*菜单使用的结束地址临时变量*/
 103          unsigned int  data              SIOAddrBegin    = 0;    /*串行收发使用的起始地址临时变量*/
 104          unsigned int  data              SIOAddrEnd      = 0;    /*串行收发使用的结束地址临时变量*/
 105          unsigned int  data              CueNumTmp       = 0;    /*菜单使用的场号临时变量*/
 106          unsigned int  data              idmxIndex       = 0;    /*当前接收数据包的数据号*/ 
 107          unsigned int  data              odmxIndex       = 0;    /*当前发送数据包的数据号*/
 108          unsigned char data              CueNum          = 1;
 109          unsigned char data              ModeTmp         = 0;
 110          unsigned int  data              ChannelSel      = 0;
 111          unsigned int  data              LV              = 0;    /*自检时用的灯光数据*/
 112          unsigned char data              RcvStartCode    = 0;    /*接收到的DMX数据包数据头*/
 113          unsigned char bdata             bit_key_flag;
 114          sbit                            bOutEnd=bit_key_flag^0;         
 115          sbit                            bBeginRcv=bit_key_flag^1;               
 116          sbit                            bDataReady=bit_key_flag^2;      /*标志是否有数据需要处理*/
 117          sbit                            bLocalControl=bit_key_flag^3;
C51 COMPILER V6.23a  SYSMAIN                                                               05/22/2003 17:10:26 PAGE 3   

 118          sbit                            bSelfCheck=bit_key_flag^4;
 119          sbit                            bCharseCheck=bit_key_flag^5;
 120          typedef void (*pFunc)();                        /*函数类型定义*/
 121          /*------有限状态机之——状态转移表------*/
 122          typedef struct _tagKT{
 123                  unsigned char   NextJmp;
 124                  unsigned char   KeyMenu;
 125                  unsigned char   KeyUp;  
 126                  unsigned char   KeyDn;  
 127                  unsigned char   KeyEnter;       
 128                  pFunc           pKeyFunc;               /*按键对应函数*/
 129          }KT;
 130          unsigned char   data cNextJmp = 0;
 131          unsigned char   data cExpect  = 0;
 132          void             (*funLcd)();
 133          KT code KeyTab [] =
 134          {
 135          /*       NextJpm|KEY_MENU|KEY_UP|KEY_DN|KEY_ENTER|funLcd */
 136                  {0,      1,       1,     1,     1,         (DspMain)    },
 137                
 138                  {1,      0,       7,     2,     11,        (DspAddrMenu)    },
 139                  {2,      0,       1,     3,     12,        (DspCH_ModeMenu) },
 140                  {3,      0,       2,     4,     13,        (DspSCheckMenu)  },
 141                  {4,      0,       3,     5,     14,        (DspCharseMenu)  },
 142                  {5,      0,       4,     6,     15,        (DspCSaveMenu)   },
 143                  {6,      0,       5,     7,     16,        (DspCDeleMenu)   },
 144                  {7,      0,       6,     1,     17,        (DspCRcallMenu)  },
 145                
 146                  {11,     1,       111,    112,  113,       (DspAddrSel)    },//Address setup
 147                  {12,     2,       121,    122,  123,       (DspChannelSel) },//for Mode Channel
 148                  {13,     3,       131,    132,  133,       (DspChannelSel) },//for Self Check CH
 149                  {14,     4,       141,    142,  143,       (DspTimeSel)    },//Charse Time count
 150                  {15,     5,       151,    152,  153,       (DspCueNumSel)  },//for Save Cue
 151                  {16,     6,       161,    162,  163,       (DspCueNumSel)  },//for Dele Cue
 152                  {17,     7,       171,    172,  173,       (DspCueNumSel)  },//for Recall Cue
 153                  
 154                  {111,    1,       111,    112,  113,       (AddrLefInc) },
 155                  {112,    1,       111,    112,  113,       (AddrLefDec) },
 156                  {113,    1,       114,    115,  116,       (AddrLefSav) },
 157                  {114,    1,       114,    115,  116,       (AddrRgtInc) },
 158                  {115,    1,       114,    115,  116,       (AddrRgtDec) },
 159                  {116,    1,       111,    112,  113,       (AddrRgtSav) },
 160                  {121,    2,       121,    122,  123,       (ChannelInc) }, /*回路选择*/ 
 161                  {122,    2,       121,    122,  123,       (ChannelDec) },
 162                  {123,    2,       124,    125,  126,       (DspModeSel) }, 
 163                  {124,    2,       124,    125,  126,       (CH_ModeInc) },/*模式选择*/
 164                  {125,    2,       124,    125,  126,       (CH_ModeDec) },
 165                  {126,    2,       121,    122,  123,       (ModeSave)   },
 166                  {131,    3,       131,    132,  133,       (ChannelInc) },
 167                  {132,    3,       131,    132,  133,       (ChannelDec) },
 168                  {133,    3,       133,    133,  133,       (ChSelfCheck)},/*系统自检*/
 169                  {141,    4,       141,    142,  143,       (TimeCoutInc)},
 170                  {142,    4,       141,    142,  143,       (TimeCoutDec)},
 171                  {143,    4,       143,    143,  143,       (CharseCheck)},/*跑灯自检*/
 172                  {151,    5,       151,    152,  153,       (CueNumInc)  },/*场记录号选择*/
 173                  {152,    5,       151,    152,  153,       (CueNumDec)  },  
 174                  {153,    5,       151,    152,  153,       (SaveNumCue) },/*保存为第CueNum场*/
 175                  {161,    6,       161,    162,  163,       (CueNumInc)  },
 176                  {162,    6,       161,    162,  163,       (CueNumDec)  },    
 177                  {163,    6,       161,    162,  163,       (DeleNumCue) },/*删除第CueNum场*/
 178                  {171,    7,       171,    172,  173,       (CueNumInc)  },   
 179                  {172,    7,       171,    172,  173,       (CueNumDec)  },
C51 COMPILER V6.23a  SYSMAIN                                                               05/22/2003 17:10:26 PAGE 4   

 180                  {173,    7,       171,    172,  173,       (RcallNumCue)}/*再现第CueNum场*/
 181          };//end tab
 182          
 183          struct Deque key_buf;           /*键盘缓冲队列*/
 184          /////////////////////////////////////////////////////////////////////////////////////////////
 185          void main()
 186          {
 187   1              unsigned char data key;
 188   1              SystemInit();
 189   1              do{
 190   2                      if(GetMessage(&key_buf,&key))
 191   2                              KeyExplain(key);
 192   2                      if(bLocalControl == False)
 193   2                      {
 194   3                        if(bDataReady == True)                /*bDataReady == True表明有数据需要处理、发送*/
 195   3                        {
 196   4                           for(idmxIndex=0;idmxIndex<DmxLength;idmxIndex++)
 197   4                               dmx_outbuf[idmxIndex]=curve_line[chMode[idmxIndex]][dmx_inbuf[idmxIndex]];
 198   4                              
 199   4                           bDataReady= False;         /*处理完毕,没有数据需要处理了*/
 200   4                           idmxIndex = 0;
 201   4                           IE0 = 0;                   /*处理完毕允许接收下一帧数据*/
 202   4                           EX0 = 1;
 203   4                           SendDmx512(RcvStartCode);
 204   4                         }
 205   3                      }else{
 206   3                              if(bSelfCheck == True)
 207   3                              {
 208   4                                 ChangeLV_SelfCheck();
 209   4                                 SendDmx512(0x00);
 210   4                              }
 211   3                              if(bCharseCheck == True)
 212   3                              {
 213   4                                 ChangeLV_CharseCheck();
 214   4                                 SendDmx512(0x00);
 215   4                              }
 216   3                      }       
 217   2              }while(1);
 218   1              
 219   1      }
 220          
 221          /*---------------系统初始化函数----------------*/
 222          void SystemInit()
 223          {
 224   1              
 225   1              VariableInit();
 226   1              HardWareInit();
 227   1      #ifdef _debug 
                      while(1){
                              Lcd_PutCmd(0xc1);
                              Lcd_PutData('A');
                              Lcd_PutData('B');
                              Lcd_PutData('C');
                              Lcd_PutData('D');       
                              Lcd_PutCmd(0x81);
                              Lcd_PutData('1');
                              Lcd_PutData('2');
              
                      }
              #endif          
 240   1              //debug
 241   1      //      PrintStr_xy(0,0,Main1);
C51 COMPILER V6.23a  SYSMAIN                                                               05/22/2003 17:10:26 PAGE 5   

 242   1      //      PrintStr_xy(0,1,Main2);
 243   1              
 244   1      }
 245          /*----------------按键解释程序----------------*/
 246          void KeyExplain(unsigned char key)
 247          {
 248   1              //static unsigned int data MenuID;
 249   1              switch(key){
 250   2                      case KEY_UP:
 251   2                              for( cExpect = 0; cExpect != 255; cExpect++){
 252   3                                      if(KeyTab[cExpect].NextJmp == KeyTab[cNextJmp].KeyUp)
 253   3                                              break;                          
 254   3                              }//end while
 255   2                              //cNextJmp = cExpect;
 256   2                              break;
 257   2                      case KEY_DOWN:
 258   2                              for( cExpect = 0; cExpect != 255; cExpect++){
 259   3                                      if(KeyTab[cExpect].NextJmp == KeyTab[cNextJmp].KeyDn)
 260   3                                              break;                          
 261   3                              }//end while
 262   2                              //cNextJmp = cExpect;
 263   2                              break;
 264   2                      case KEY_UP5:
 265   2                              
 266   2                                                      
 267   2                              break;
 268   2                      case KEY_DOWN5:
 269   2                              
 270   2                              break;
 271   2                      case KEY_OK:
 272   2                              for( cExpect = 0; cExpect != 255; cExpect++){
 273   3                                      if(KeyTab[cExpect].NextJmp == KeyTab[cNextJmp].KeyEnter)
 274   3                                              break;                          
 275   3                              }//end while
 276   2                              //cNextJmp = cExpect;
 277   2                              break;
 278   2                      case KEY_RETURN:
 279   2                              for( cExpect = 0; cExpect != 255; cExpect++){
 280   3                                      if(KeyTab[cExpect].NextJmp == KeyTab[cNextJmp].KeyMenu)
 281   3                                              break;                          
 282   3                              }//end while
 283   2                              //cNextJmp = cExpect;
 284   2                              break;
 285   2                      case KEY_NULL:
 286   2                              if(cNextJmp==0) DspMain();

⌨️ 快捷键说明

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