📄 lcd_disp.lst
字号:
594 4 Read_Sel_Figure(3,Figure_Date_New);
595 4 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date_New)) //检测变形后是否干涉
596 4 {Fig_Type=3;
597 5 Read_Sel_Figure(3,Figure_Date);//从内存中读取新的方块数据
598 5 Write_Preview(Clr_Preview);
599 5 Write_Preview(Figure_Date);
600 5 }
601 4 } break;
602 3 case 3:{
603 4 Read_Sel_Figure(2,Figure_Date_New);
604 4 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date_New)) //检测变形后是否干涉
605 4 {Fig_Type=2;
606 5 Read_Sel_Figure(2,Figure_Date);
607 5 Write_Preview(Clr_Preview);
608 5 Write_Preview(Figure_Date);
609 5 }
610 4 } break;
611 3 case 4:{
612 4 Read_Sel_Figure(5,Figure_Date_New);
613 4 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date_New)) //检测变形后是否干涉
C51 COMPILER V8.01 LCD_DISP 06/17/2008 20:51:00 PAGE 11
614 4 {Fig_Type=5;
615 5 Read_Sel_Figure(5,Figure_Date);
616 5 Write_Preview(Clr_Preview);
617 5 Write_Preview(Figure_Date);
618 5 }
619 4 } break;
620 3 case 5:{
621 4 Read_Sel_Figure(6,Figure_Date_New);
622 4 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date_New)) //检测变形后是否干涉
623 4 {Fig_Type=6;
624 5 Read_Sel_Figure(6,Figure_Date);
625 5 Write_Preview(Clr_Preview);
626 5 Write_Preview(Figure_Date);
627 5 }
628 4 } break;
629 3 case 6:{
630 4 Read_Sel_Figure(7,Figure_Date_New);
631 4 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date_New)) //检测变形后是否干涉
632 4 {Fig_Type=7;
633 5 Read_Sel_Figure(7,Figure_Date);
634 5 Write_Preview(Clr_Preview);
635 5 Write_Preview(Figure_Date);
636 5 }
637 4 } break;
638 3 case 7:{
639 4 Read_Sel_Figure(4,Figure_Date_New);
640 4 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date_New)) //检测变形后是否干涉
641 4 {Fig_Type=4;
642 5 Read_Sel_Figure(4,Figure_Date);
643 5 Write_Preview(Clr_Preview);
644 5 Write_Preview(Figure_Date);
645 5 }
646 4 } break;
647 3 case 8:{
648 4 Read_Sel_Figure(9,Figure_Date_New);
649 4 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date_New)) //检测变形后是否干涉
650 4 {Fig_Type=9;
651 5 Read_Sel_Figure(9,Figure_Date);
652 5 Write_Preview(Clr_Preview);
653 5 Write_Preview(Figure_Date);
654 5 }
655 4 } break;
656 3 case 9:{
657 4 Read_Sel_Figure(8,Figure_Date_New);
658 4 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date_New)) //检测变形后是否干涉
659 4 {Fig_Type=8;
660 5 Read_Sel_Figure(8,Figure_Date);
661 5 Write_Preview(Clr_Preview);
662 5 Write_Preview(Figure_Date);
663 5 }
664 4 } break;
665 3 case 10:{
666 4 Read_Sel_Figure(11,Figure_Date_New);
667 4 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date_New)) //检测变形后是否干涉
668 4 {Fig_Type=11;
669 5 Read_Sel_Figure(11,Figure_Date);
670 5 Write_Preview(Clr_Preview);
671 5 Write_Preview(Figure_Date);
672 5 }
673 4 } break;
674 3 case 11:{
675 4 Read_Sel_Figure(10,Figure_Date_New);
C51 COMPILER V8.01 LCD_DISP 06/17/2008 20:51:00 PAGE 12
676 4 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date_New)) //检测变形后是否干涉
677 4 {Fig_Type=10;
678 5 Read_Sel_Figure(10,Figure_Date);
679 5 Write_Preview(Clr_Preview);
680 5 Write_Preview(Figure_Date);
681 5 }
682 4 } break;
683 3 }
684 2 }
685 1 }
686
687 /*--------------------------------------------------
688 *函数名称:Chk_Line_Full
689 *功 能:检查一行是否满
690 *参 数:Y
691 *返 回:0 该行未填满
692 1 该行已经填满
693 ---------------------------------------------------*/
694 uchar Chk_Line_Full(uchar y)
695 {
696 1 if(y<32)
697 1 {
698 2 if(Disp_Buff[y]==0xffffffff)
699 2 return 1;
700 2 else
701 2 return 0;
702 2 }
703 1 return 0;
704 1 }
705 /*--------------------------------------------------
706 *函数名称:Line_Move_Down
707 *功 能:整行下移一行
708 *参 数:Y 开始下移的行坐标
709 *返 回:无
710 ---------------------------------------------------*/
711 void Line_Move_Down(uchar y)
712 {
713 1 while(y)
714 1 {
715 2 Disp_Buff[y+1]=Disp_Buff[y];
716 2 y--;
717 2 }
718 1 Disp_Buff[y+1]=Disp_Buff[y];
719 1
720 1 }
721
722 /*--------------------------------------------------
723 *函数名称:Move_Down
724 *功 能:图形下移子程序
725 *参 数:无
726 *返 回:无
727 ---------------------------------------------------*/
728 void Move_Down(void)
729 { uchar i;
730 1 if(Y_Coor==0)
731 1 Write_Preview(Figure_Date); //刷新预览区
732 1 Y_Coor=Y_Coor+1;
733 1
734 1 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date)) //检查是否能下落
735 1 {
736 2 if(Y_Coor>1) //初始状态没有方块可清除
737 2 {
C51 COMPILER V8.01 LCD_DISP 06/17/2008 20:51:00 PAGE 13
738 3 Clr_Figure(X_Coor,Y_Coor-1,Figure_Date_Old); //清除上一个方块
739 3 Exchange(Figure_Date,Figure_Date_Old);
740 3 }
741 2 Write_4x4Ram(X_Coor,Y_Coor,Figure_Date); //写入新的方块
742 2 }
743 1 else
744 1 {Y_Coor--;
745 2 Update_Disp_Buff(Figure_Date); //如果不能继续下落,将方块写入背景
746 2 Clr_Figure(X_Coor,Y_Coor,Figure_Date_Old);
747 2 Write_4x4Ram(X_Coor,Y_Coor,Figure_Date);
748 2 for(i=0;i<4;i++) //检查是否满行
749 2 {
750 3 if(Chk_Line_Full(Y_Coor-3+i))
751 3 {Line_Move_Down(Y_Coor-4+i);
752 4 Disp_Update();
753 4 SUM=SUM+10; //总分加十
754 4 if(SUM>10) //如果总分超过200,速度加一
755 4 {SUM=0;
756 5 speed++;
757 5 if(speed>6)
758 5 speed=0;
759 5 Move_Down_Delay=(5-speed)*10 ;
760 5 Disp_Num(speed,0);
761 5 }
762 4 Disp_Num(SUM,1);
763 4 }
764 3 }
765 2 if(Y_Coor==0) //第0行即存在干涉游戏结束
766 2 Game_Over=0;
767 2 else
768 2 {Y_Coor=0; //方块重新落下
769 3 X_Coor=25;
770 3 Fig_Type=Ran(); //读取随机数,产生新的方块
771 3 Read_Sel_Figure(Fig_Type, Figure_Date); //根据形状代码读取方块
772 3 Write_Preview(Clr_Preview); //清除预览区
773 3 Exchange(Figure_Date,Figure_Date_Old); //上一个方块存储当前方块
774 3 Write_Preview(Figure_Date); //刷新预览区
775 3 }
776 2 }
777 1 }
778
779 /*--------------------------------------------------
780 *函数名称:Move_Left
781 *功 能:图形左移子程序
782 *参 数:无
783 *返 回:无
784 ---------------------------------------------------*/
785 void Move_Left(void)
786 {
787 1 //Figure(X_Coor,Y_Coor,Figure_Date);
788 1 X_Coor--;
789 1 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date)) //检测是否能够向左移动
790 1 {Clr_Figure(X_Coor+1,Y_Coor,Figure_Date); //能够移动清除上一个方块
791 2 Write_4x4Ram(X_Coor,Y_Coor,Figure_Date); //在新的位置写入新的方块
792 2 }
793 1 else
794 1 X_Coor=X_Coor+1; //不能移动,坐标停止自减
795 1 }
796 /*--------------------------------------------------
797 *函数名称:Move_Right
798 *功 能:图形右移子程序
799 *参 数:无
C51 COMPILER V8.01 LCD_DISP 06/17/2008 20:51:00 PAGE 14
800 *返 回:无
801 ---------------------------------------------------*/
802 void Move_Right(void)
803 {
804 1 //Clr_Figure(X_Coor,Y_Coor,Figure_Date);
805 1 X_Coor++;
806 1 if(!Check_Interfc(X_Coor,Y_Coor,Figure_Date)) //检测是否能够向右移动
807 1 {Clr_Figure(X_Coor-1,Y_Coor,Figure_Date);
808 2 Write_4x4Ram(X_Coor,Y_Coor,Figure_Date);
809 2 }
810 1 else
811 1 X_Coor=X_Coor-1;
812 1 }
813 /*--------------------------------------------------
814 *函数名称:Delay
815 *功 能:控制加速下落的延时
816 *参 数:无
817 *返 回:无
818 ---------------------------------------------------*/
819 void Delay(void)
820 {
821 1 unsigned char i,j,k;
822 1 for(k=2;k>0;k--)
823 1 for(i=20;i>0;i--)
824 1 for(j=248;j>0;j--);
825 1 }
826 /*--------------------------------------------------
827 *函数名称:Key_Manage
828 *功 能:按键管理子程序
829 *参 数:无
830 *返 回:无
831 ---------------------------------------------------*/
832 void Delay10ms()
833 { uchar a,b;
834 1 for(a=100;a>0;a--)
835 1
836 1 for(b=225;b>0;b--);
837 1
838 1 }
839 void Key_Manage(void)
840 {
841 1 if(!KEY_Left)
842 1 {Delay10ms();
843 2 if(!KEY_Left)
844 2 Move_Left();}
845 1 if(!KEY_Right)
846 1 {Delay10ms();
847 2 if(!KEY_Right)
848 2 Move_Right();}
849 1 if(!KEY_Transf)
850 1 { Delay10ms();
851 2 if(!KEY_Transf)
852 2 Trans(Fig_Type);
853 2 }
854 1 if(!KEY_Speedup)
855 1 {
856 2 while(!KEY_Speedup)
857 2 {
858 3 TR0=0; //关闭定时器,下落改由延时程序来控制
859 3 Move_Down();
860 3 Delay();
861 3 }
C51 COMPILER V8.01 LCD_DISP 06/17/2008 20:51:00 PAGE 15
862 2 TR0=1;
863 2 }
864 1 }
865
866
867
868
869
870
871
872
873
874
875
876
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2773 ----
CONSTANT SIZE = 460 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 22 91
IDATA SIZE = 128 ----
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 + -