📄 sysmain.lst
字号:
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 + -