📄 function.lst
字号:
482 4 }
483 3 Black_Ground[15]=temp;
484 3 for(i=0;i<16;i++)
485 3 Map[i]=Map[i]|Black_Ground[i];
486 3 NewBlock=1; //一个方块下落完毕,要求重新加载新方块
487 3 Quick_Down=0; //方块快速下落完毕,清除快速下落标志
488 3 Block_Y--;
489 3 I=I1; //将预览中的方块换成下一次要放的方块
C51 COMPILER V7.06 FUNCTION 12/09/2008 01:11:01 PAGE 9
490 3 J=J1;
491 3 }//向下处理 ,将方块加到背景地图中
492 2 }
493 1 keyvalue=keyvalue1=0xff;//查询到没有按键赋值为ff,不要方块以之前的方向一直移动
494 1 //////////////////////////////////////////////////////////////
495 1 /////////////////////////////////////////////////////////////
496 1
497 1 //把变形的方块和背景一起画到Black_Ground数组中
498 1 for(i=0;i<16;i++)
499 1 {
500 2 Black_Ground[i]=Black_Ground[i]|Map[i];
501 2 }
502 1 //把变形的方块和背景一起画到Black_Ground数组中
503 1 }
504
505
506
507
508
509
510
511 uchar Keyscan()
512 {
513 1 temp0=(~temp0)&0xf0;
514 1 temp1=(~temp1)&0x0f;
515 1 temp0=temp0|temp1;
516 1 switch (temp0)
517 1 {
518 2 case 0x11: keyvalue=0;break;
519 2 case 0x21: keyvalue=1;break;
520 2 case 0x41: keyvalue=2;break;
521 2 case 0x81: keyvalue=3;break;
522 2 case 0x12: keyvalue=4;break;
523 2 case 0x22: keyvalue=5;break;
524 2 case 0x42: keyvalue=6;break;
525 2 case 0x82: keyvalue=7;break;
526 2 case 0x14: keyvalue=8;break;
527 2 case 0x24: keyvalue=9;break;
528 2 case 0x44: keyvalue=10;break;
529 2 case 0x84: keyvalue=11;break;
530 2 case 0x18: keyvalue=12;break;
531 2 case 0x28: keyvalue=13;break;
532 2 case 0x48: keyvalue=14;break;
533 2 case 0x88: keyvalue=15;break;
534 2 default : keyvalue=0xff;break;
535 2 }
536 1 return keyvalue;
537 1 }
538
539
540
541
542 void Init_Timer0()
543 {
544 1 EA=1; //开启总中断
545 1 ET0=1; //开定时器0中断
546 1 TMOD=0X01; //定时器0工作与16位的模式一
547 1 TH0=0X77; //定时10MS
548 1 TL0=0Xff;
549 1 TR0=1; //定时器0开启
550 1 TR1=1; //定时器1开启
551 1
C51 COMPILER V7.06 FUNCTION 12/09/2008 01:11:01 PAGE 10
552 1 }
553
554
555 void Key()
556 {
557 1 P2=0xf0;
558 1 temp0=P2;
559 1 if(temp0!=0xf0)
560 1 {
561 2 Delay(9);
562 2 P2=0xf0;
563 2 temp0=P2;
564 2 if(temp0!=0xf0)
565 2 {
566 3 P2=0x0f;
567 3 temp1=P2;
568 3 keyvalue=Keyscan();
569 3 }
570 2 }
571 1 }
572
573 void Score()
574 {
575 1 uchar baiwei,shiwei,gewei;
576 1 gewei=score1%10;
577 1 shiwei=(score1/10)%10;
578 1 baiwei=(score1/100);
579 1 LCD_set_XY(60,4);
580 1 LCD_write_char(baiwei+48);
581 1 LCD_write_char(shiwei+48);
582 1 LCD_write_char(gewei+48);
583 1 }
584
585
586
587 void Cancel_Line()
588 {
589 1 uchar i,z;
590 1 uint16 j=0;
591 1 if(NewBlock) //一个方块下落完毕
592 1 {
593 2 for(i=0;i<16;i++)
594 2 {
595 3 if(Map[i]==0xffff)
596 3 {j=j|1;j=1;score1++;}
597 3 }
598 2 if(j!=0)
599 2 {
600 3 for(i=1;i<16;i++)
601 3 {
602 4 if(Map[i]==0xffff)
603 4 {
604 5 for(z=i;z>0;z--)
605 5 {
606 6 Map[z]=Map[z-1];
607 6 }
608 5 }
609 4 }
610 3 for(i=0;i<16;i++)
611 3 {
612 4 Black_Ground[i]=0;
613 4 Black_Ground[i]=Black_Ground[i]|Map[i];
C51 COMPILER V7.06 FUNCTION 12/09/2008 01:11:01 PAGE 11
614 4 }
615 3 LCD_write_CMD(0x20); // 使用基本命令,采用水平模式
616 3 Score();
617 3 LCD_write_CMD(0x22); // 使用基本命令,采用垂直模式
618 3 LCD_DrawBlackGround();
619 3 }
620 2 }
621 1 }
622
623
624 void Next()
625 {
626 1 uchar i;
627 1 uint16 next,temp0,temp1;
628 1 next=Pic[I1][J1];
629 1 LCD_write_CMD(0x22);
630 1 LCD_set_XY(62,1);
631 1 for(i=0;i<4;i++)
632 1 {
633 2 if(next&(0x8000>>i))
634 2 {temp0=0x000e;temp1=0x000a;}
635 2 else {temp0=0;temp1=0;}
636 2 if(next&(0x0800>>i))
637 2 {temp0=temp0|0x0070;temp1=temp1|0x0050;}
638 2 else {temp0=temp0|0;temp1=temp1|0;}
639 2 if(next&(0x0080>>i))
640 2 {temp0=temp0|0x0380;temp1=temp1|0x0280;}
641 2 else {temp0=temp0|0;temp1=temp1|0;}
642 2 if(next&(0x0008>>i))
643 2 {temp0=temp0|0x5c00;temp1=temp1|0x5400;}
644 2 else {temp0=temp0|0x2000;temp1=temp1|0x2000;}
645 2 LCD_write_Data((uchar)temp0);
646 2 LCD_write_Data((uchar)(temp0>>8));
647 2 LCD_set_XY(63+i*3,1);
648 2 LCD_write_Data((uchar)temp1);
649 2 LCD_write_Data((uchar)(temp1>>8));
650 2 LCD_set_XY(64+i*3,1);
651 2 LCD_write_Data((uchar)temp0);
652 2 LCD_write_Data((uchar)(temp0>>8));
653 2 LCD_set_XY(65+i*3,1);
654 2 }
655 1 }
656
657
658 void Pause()
659 {
660 1 Key();
661 1 if(keyvalue==12)
662 1 {
663 2 LCD_write_CMD(0x20); // 使用基本命令,采用水平模式
664 2 LCD_write_english_string(10,2,"PAUSE!");
665 2 Delay(250);
666 2 keyvalue=0xff;
667 2 while(1)
668 2 {
669 3 Key();
670 3 if(keyvalue==12)
671 3 {keyvalue=0xff;break;}
672 3 }
673 2 LCD_write_CMD(0x22); // 使用基本命令,采用垂直模式
674 2 }
675 1 }
C51 COMPILER V7.06 FUNCTION 12/09/2008 01:11:01 PAGE 12
676
677 /////////////////////////////////////////////////////////
678 /////////////////游戏结束
679 /*void Game_Over()
680 {
681 if(Attack_Block())
682 {
683 LCD_write_CMD(0x20); // 使用基本命令,采用水平模式
684 //LCD_write_CMD(0x0d); // 设定显示模式,c正常显示,d反白显示
685 LCD_write_english_string(13,2,"GAME");
686 LCD_write_english_string(12,3,"OVER!");
687 while(1); //游戏结束,不再运行
688 }
689 }*/
690 /////////////////////////////////////////////////////////
691 /////////////////游戏结束
692 void Game_Over()
693 {
694 1 if(NewBlock)
695 1 {
696 2 if(Block_Y==0)
697 2 {
698 3 LCD_write_CMD(0x20); // 使用基本命令,采用水平模式
699 3 LCD_write_english_string(13,2,"GAME");
700 3 LCD_write_english_string(12,3,"OVER!");
701 3 LCD_write_CMD(0x0d); // 设定显示模式,c正常显示,d反白显示
702 3 while(1); //游戏结束,不再运行
703 3 }
704 2 }
705 1 }
706
707
708
709
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3260 ----
CONSTANT SIZE = 654 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 83 40
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 + -