📄 board.lst
字号:
207 2 CLK=0;
208 2 DI=led_show_bit;
209 2 CLK=1;//人工模拟时钟,在上升沿锁存
210 2 led_show_data=led_show_data>>1;//将显示代码进行移位处理,以便8个位都进行输出
211 2 }
212 1 RCK=0;
213 1 RCK=1;//人工模拟锁存输出信号,在上升沿将锁存器的值输出
214 1 led_show_data=P2|0xf8;//将5根共阳控制线状态重新读取回来
215 1 led_show_data=led_show_data&led_show_number;//将要点亮的那位数码管的共阳极选通(即通电)
216 1 P2=led_show_data;//输出5根共阳控制线,给需要点亮的那位数码管进行通电
217 1 }
218 //=================================================================
219 //程序说明:通讯发送子程序,其中需要保证每次发送时没有数据正在发送;
220 //并且发送按照优先级高低进行;一类数据发送不能中断;下一类数据的发送
221 //必须在前一类数据已收到应答或20ms没有收到应答后自动重发
222 //=================================================================
223 void send() //发送子程序
224 {
225 1 char temp_kind=0;
226 1 char send_temp=0;
227 1
228 1 if(send_on_flag==0)//一个8位还未发送完成,不进行下一个8位的发送
229 1 {
230 2 if(send_success_flag==0)//还未连接上,需要先发送握手协议
231 2 {
232 3 if(send_kind==SEND_HAND)
233 3 {
234 4 send_kind=send_kind&0xfe;//握手协议会定时发送,因此可以在这里清除发送标志
235 4 send_on_flag=1;
236 4 SBUF=HAND_CMD;
237 4 send_over_kind=0;
C51 COMPILER V7.06 BOARD 03/19/2009 21:23:59 PAGE 5
238 4 }
239 3 }
240 2 else //已经连接上,根据优先集高低发送应用类数据
241 2 {
242 3 if(send_over_kind==0)//发送前,需要验证上次一类数据是否主机已经接收到
243 3 {
244 4 if(send_on_kind==0)//判断一类数据是否发完,非0表示还未发完
245 4 {
246 5 if((send_kind&0x2)==0x2)
247 5 {
248 6 temp_kind=SEND_KEY;
249 6 }
250 5 else
251 5 {
252 6 if((send_kind&0x4)==0x4)
253 6 {
254 7 temp_kind=SEND_SET;
255 7 }
256 6 else
257 6 {
258 7 if((send_kind&0x8)==0x8)
259 7 {
260 8 temp_kind=SEND_FU;
261 8 }
262 7 else
263 7 {
264 8 if((send_kind&0x10)==0x10)
265 8 {
266 9 temp_kind=SEND_FAULT;
267 9 }
268 8 else
269 8 {
270 9 if((send_kind&0x20)==0x20)
271 9 {
272 10 temp_kind=SEND_FAULT_STACK;
273 10 }
274 9 else
275 9 {
276 10 if((send_kind&0x40)==0x40)
277 10 {
278 11 temp_kind=SEND_SHOW;
279 11 }
280 10 else
281 10 {
282 11 if((send_kind&0x80)==0x80)
283 11 {
284 12 temp_kind=SEND_HEART;
285 12 }
286 11 }//else
287 10 }//else
288 9 } //else
289 8 }//else
290 7 }//else
291 6 }//else
292 5 }//if
293 4 else//有类数据在连续发送时,需要先发送该类数据
294 4 {
295 5 switch(send_on_kind)
296 5 {
297 6 case SET_CMD:
298 6 {
299 7 temp_kind=SEND_SET;
C51 COMPILER V7.06 BOARD 03/19/2009 21:23:59 PAGE 6
300 7 break;
301 7 }
302 6 case SHOW_CMD:
303 6 {
304 7 temp_kind=SEND_SHOW;
305 7 break;
306 7 }
307 6 case SET_FU_CMD:
308 6 {
309 7 temp_kind=SEND_FU;
310 7 break;
311 7 }
312 6 case FAULT_STACK_CMD:
313 6 {
314 7 temp_kind=SEND_FAULT_STACK;
315 7 break;
316 7 }
317 6 default:break;
318 6 }
319 5 }
320 4 switch(temp_kind)//根据上面的优先集排序,进行相关类数据的发送,每次发送时保证同类数据发送完成
321 4 {
322 5 case SEND_SET:
323 5 {
324 6 send_on_flag=1; //正在发送标志位
325 6 switch(send_point)
326 6 {
327 7 case 0:
328 7 {
329 8 SBUF=SET_CMD;
330 8 send_point++;
331 8 send_on_kind=SET_CMD;
332 8 break;
333 8 }
334 7 case 1:
335 7 {
336 8 SBUF=led_data;
337 8 send_point++;
338 8 send_on_kind=SET_CMD;
339 8 break;
340 8 }
341 7 case 2:
342 7 {
343 8 SBUF=set_data>>8;
344 8 send_point++;
345 8 send_on_kind=SET_CMD;
346 8 break;
347 8 }
348 7 case 3:
349 7 {
350 8 SBUF=set_data&0xff;
351 8 send_point++;
352 8 send_on_kind=SET_CMD;
353 8 break;
354 8 }
355 7 case 4:
356 7 {
357 8 send_temp=set_data>>8;
358 8 send_or_number=SET_CMD^led_data^send_temp;
359 8 send_temp=set_data&0xff;
360 8 send_or_number=send_or_number^send_temp;
361 8 SBUF=send_or_number;
C51 COMPILER V7.06 BOARD 03/19/2009 21:23:59 PAGE 7
362 8 send_point=0;
363 8 send_over_kind=SET_CMD;//提示该类数据已经发送完,需要等待接收,或延时10s还未收到时,继续发送
364 8 send_over_flag=1;//一类数据已经发送完成标志位
365 8 send_on_kind=0;
366 8 break;
367 8 }
368 7 default:break;
369 7 }
370 6 break;
371 6 }
372 5 case SEND_SHOW:
373 5 {
374 6 send_on_flag=1;//正在发送标志位
375 6 switch(send_point)
376 6 {
377 7 case 0:
378 7 {
379 8 SBUF=SHOW_CMD;
380 8 send_point++;
381 8 send_on_kind=SHOW_CMD;
382 8 break;
383 8 }
384 7 case 1:
385 7 {
386 8 SBUF=led_data;
387 8 send_point++;
388 8 send_or_number=SHOW_CMD^led_data;
389 8 send_on_kind=SHOW_CMD;
390 8 break;
391 8 }
392 7 case 2:
393 7 {
394 8 SBUF=send_or_number;
395 8 send_point=0;
396 8 send_over_kind=SHOW_CMD;//同上
397 8 send_over_flag=1;//同上
398 8 send_on_kind=0;
399 8 break;
400 8 }
401 7 default:break;
402 7 }
403 6 break;
404 6 }
405 5 case SEND_FU:
406 5 {
407 6 send_on_flag=1;
408 6 switch(send_point)
409 6 {
410 7 case 0:
411 7 {
412 8 SBUF=SET_FU_CMD;
413 8 send_point++;
414 8 send_on_kind=SET_FU_CMD;
415 8 break;
416 8 }
417 7 case 1:
418 7 {
419 8 SBUF=led_data;
420 8 send_point++;
421 8 send_or_number=SET_FU_CMD^led_data;
422 8 send_on_kind=SET_FU_CMD;
423 8 break;
C51 COMPILER V7.06 BOARD 03/19/2009 21:23:59 PAGE 8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -