📄 keil00.lst
字号:
259 1 if(Command)
260 1 {
261 2 TX[2]='M';
262 2 switch(Command)
263 2 {
264 3 case 0x22: State=4;TX[4]=0x22;TX[5]=0x14;Transmit();ErrorNO=0;break; /*B仓返回完成*/
265 3 case 0x25: State=7;ErrorNO=0x25;break; /*B仓返回卡牌*/
266 3 default: State=6;ErrorNO=0x2a;break; /*B仓通讯错误*/
267 3 }
268 2 }
269 1 OUTremnantexit:
270 1 Command=0;
271 1 }
272 /***********************************
273 *-------清牌程序--------------*
274 ***********************************/
275 void ClrCard(void)
276 {
277 1 unsigned char x1,Bbox;
278 1 bit CaPaibit,Box1ok,Box2ok,Bclrbit;
279 1
280 1 switch(azimuth)
281 1 {
282 2 case 0x7f: Bbox=0x42; break; /*当前接牌盒位置判断*/
283 2 case 0xef: Bbox=0x42; break; /*Place--位置变量*/
284 2 case 0xbf: Bbox=0x43; break; //
285 2 case 0xdf: Bbox=0x43; break; //
286 2 default: break;
287 2 }
288 1 A3986_EN=0;
289 1 OPTOV=0; /*开有无牌传感器*/
290 1 Delay50ms();
291 1 CaPaibit=0;
292 1 Box1ok=0;
293 1 Box2ok=0;
294 1 BboxErr=0;
295 1 Bclrbit=1;
296 1
297 1 TX[2]='B';
298 1 TX[4]=0x04;
299 1 Transmit();
300 1 TXok();
301 1 if(BboxErr) /*B通讯错误退出*/
302 1 goto Clrexit;
303 1
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 6
304 1 TX[2]='C';
305 1 TX[4]=0x04;
306 1 Transmit();
307 1 TXok();
308 1 if(BboxErr) /*B通讯错误退出*/
309 1 goto Clrexit;
310 1
311 1 while(!Back_OPTO||Count_OPTO) /*有牌则清牌*/
312 1 {
313 2 Back_motor=0;
314 2 Front_motor=0;
315 2 if(Bclrbit)
316 2 {
317 3 for(x1=0;x1<40;x1++)
318 3 {
319 4 Delay50ms();
320 4 }
321 3 Bclrbit=0;
322 3 TX[2]=Bbox; /*B清牌*/
323 3 TX[4]=0x04;
324 3 Transmit();
325 3 TXok();
326 3 }
327 2 }
328 1 Back_motor=1;
329 1 Front_motor=1;
330 1 OPTOV=1;
331 1 //TX[2]=Bbox; /*B清牌*/
332 1 //TX[4]=0x04;
333 1 //Transmit();
334 1 //TXok();
335 1 Clrexit:
336 1 A3986_EN=1;
337 1 LED=1;
338 1 }
339 /***********************************
340 *-------A类出牌程序--------------*
341 ***********************************/
342 void Out1(void)
343 {
344 1 unsigned int x,y;
345 1
346 1 BoxNO=1; /*固定发牌位置*/
347 1 Turn();
348 1
349 1 TX[2]='B';
350 1 TX[4]=0x02; /*0x02一次把牌发完命令*/
351 1 TX[5]=0x11;
352 1 TX[6]=0x11;
353 1 Transmit();
354 1 TXok();
355 1 Delay50ms();
356 1 if(ErrorNO)
357 1 goto RemOUT;
358 1 TX[2]='C';
359 1 TX[4]=0x02; /*0x02一次把牌发完命令*/
360 1 TX[5]=0; /*三家游戏底牌不出*/
361 1 TX[6]=0x11;
362 1 Transmit();
363 1 TXok();
364 1 x=0;y=0;
365 1 while(1)
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 7
366 1 {
367 2 Delay50ms();
368 2 if(Command==0x22) /*等待B仓发牌完成*/
369 2 {
370 3 y++;
371 3 Command=0;
372 3 }
373 2 if(y==2) break;
374 2 x++;
375 2 if(x>200) break;
376 2 }
377 1 RemOUT:
378 1 Delay50ms();
379 1 }
380 /***********************************
381 *-------A类洗牌程序--------------*
382 ***********************************/
383 void Riffle1(void)
384 {
385 1 unsigned char Ya,Cou0; //man,x
386 1 unsigned char AllCardbak,RemnantCardbak;
387 1 bit xbit;
388 1
389 1 AllCardbak=AllCard;
390 1 RemnantCardbak=RemnantCard;
391 1 xbit=0;
392 1 ShaoCardBit=0; /*少牌标志*/
393 1 Cou0=0;
394 1 Box1data=0;
395 1 Box2data=0;
396 1 Box3data=0;
397 1 Box4data=0;
398 1
399 1 if(Mandata==3)
400 1 {
401 2 RemnantBox=3;
402 2 } /*3人时底牌盒为3*/
403 1 else
404 1 RemnantBox=TL2%4+1; /*用计数器数据来计算随机底牌盒*/
405 1
406 1 OPTOV=0; //+
407 1 Delay50ms();
408 1 while(1)
409 1 {
410 2 Card_data=TL2%3+1;
411 2 BoxNO=TH2%4+1;
412 2 while(BoxNO==Cou0)
413 2 {
414 3 BoxNO=TH2%4+1;
415 3 } /*取首个接牌盒位置*/
416 2
417 2 if(AllCard>0x54)
418 2 AllCard=0;
419 2 if(AllCard-RemnantCard<Card_data*Mandata) /*检查总牌数是否够发一轮牌*/
420 2 {
421 3 Card_data=(AllCard-RemnantCard)/Mandata;
422 3 }
423 2 for(Ya=0;Ya<Mandata;Ya++) /*发牌一轮*/
424 2 {
425 3 if(Command==0x04) /*清牌*/
426 3 {
427 4 Ya=Mandata;
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 8
428 4 }
429 3 else
430 3 {
431 4 if(Mandata==3) /*判断是否为3人游戏*/
432 4 {
433 5 if(BoxNO==3)
434 5 {
435 6 BoxNO=4;
436 6 }
437 5 }
438 4 if(Cou0==BoxNO) //*****
439 4 {
440 5 BoxNO++; //*****
441 5 if(BoxNO>=5) //*****
442 5 {
443 6 BoxNO=1;
444 6 } //*****
445 5 } //*****
446 4 Turn(); /*转动*/
447 4 Cou0=BoxNO; /*保存当前位置*/
448 4 OPTOV=0; //+
449 4 Delay50ms();
450 4 CarBak=Card_data; /*发牌数bak*/
451 4 OutCard(); /*发牌*/
452 4 if(ShaoCardBit)
453 4 {
454 5 ShaoCar();
455 5 } /*少牌处理*/
456 4 AllCard=AllCard-CarBak; /*Card_data总牌数更新*/
457 4 switch(BoxNO)
458 4 {
459 5 case 1: Box1data=Box1data+Card_data; break; /*牌盒牌数更新*/
460 5 case 2: Box2data=Box2data+Card_data; break; //
461 5 case 3: Box3data=Box3data+Card_data; break; //
462 5 case 4: Box4data=Box4data+Card_data; break; //
463 5 default: break;
464 5 }
465 4 BoxNO++; /*转动方位变化*/
466 4 if(BoxNO>4) //
467 4 {
468 5 BoxNO=1;
469 5 } //
470 4 }
471 3 }
472 2 if(Command==0x04) /*清牌*/
473 2 {
474 3 ClrBit=1;
475 3 break;
476 3 }
477 2 if((RemnantCard!=0)||(AllCard==RemnantCard)) /*发底牌程序*/
478 2 {
479 3 if(RemnantBox!=Cou0||AllCard==RemnantCard) /*底牌等于总牌数?*/
480 3 {
481 4 BoxNO=RemnantBox;
482 4 Turn();
483 4 if(RemnantCard<Card_data||AllCard==RemnantCard)
484 4 {
485 5 Card_data=RemnantCard;
486 5 }
487 4 CarBak=Card_data; /*发牌数bak*/
488 4 OutCard(); /*发牌*/
489 4 if(ShaoCardBit)
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 9
490 4 {
491 5 ShaoCar();
492 5 } /*少牌处理*/
493 4 if(Command==0x04) /*清牌*/
494 4 {
495 5 ClrBit=1;
496 5 break;
497 5 }
498 4 RemnantCard=RemnantCard-CarBak; /*底牌数更新*/
499 4 AllCard=AllCard-CarBak; /*总牌数更新*/
500 4 switch(RemnantBox)
501 4 {
502 5 case 1: Box1data=Box1data+CarBak; break; /*牌盒牌数更新*/
503 5 case 2: Box2data=Box2data+CarBak; break; //
504 5 case 3: Box3data=Box3data+CarBak; break; //
505 5 case 4: Box4data=Box4data+CarBak; break; //
506 5 default: break;
507 5 }
508 4 }
509 3 }
510 2 if(AllCard==0||AllCard>54)
511 2 {
512 3 OPTOV=0; //+
513 3 Delay50ms();
514 3 while(!Back_OPTO||Count_OPTO) /*总牌数为0时如有牌报牌多,无牌退出*/
515 3 {
516 4 if(!xbit)
517 4 {
518 5 TX[2]='M';
519 5 TX[4]=0x26; /*多牌报警*/
520 5 Transmit();
521 5 xbit=1;
522 5 }
523 4 if(Command==0x04)
524 4 {
525 5 ClrBit=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -