⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd5110.c

📁 诺基亚5110 LCD资料
💻 C
📖 第 1 页 / 共 2 页
字号:
	    // if(led==0)
        //{led=1;}
	    //else led=0;
	  }
      else if(keyval==2&&down==0)
      {
	     down=1;
	   // beep();
         if(beep2==0) {beep2=1;write_string(0,5,"   beep on  ");}
	     else {beep2=0;write_string(0,5,"   beep off  ");}
      }
      else if(keyval==3&&down==0)
      {
	     down=1;
	    //beep();
        LCD_clear();
	    ping();
	    disguan();
	    disscore();
	    disstep();
	  //TR0=1;
	    LCD_set_XY(75,1);
        for(i=0;i<8;i++)
       {LCD_write_byte(fangkuai[i],1);}
	   renew();
	  break;
   }
  }
}

#endif

//////////////////////////////////////////////////////
//刷新游戏区屏幕
//////////////////////////////////////////////////////
void renew()
{
  unsigned char i, j;
  //////new=background then front合并进new///////
  for(j=0;j<3;j++)
  {
    for(i=0;i<58;i++)
	 {new[j][i]=background[j][i];}
  }
  for(j=0;j<3;j++)
  {
     for(i=0;i<8;i++)
	  {
	    new[j][front_x+i-16]|=front[j][i];
	  }
  }
  /////////////显示new////////////
  for(j=3;j>0;j--)
  {
    LCD_set_XY(16,j);
	 for(i=0;i<58;i++)
	 {LCD_write_byte(new[j-1][i],1);}
  } 
}

/////////////////////////////////////////////////
//显示过关画面
/////////////////////////////////////////////////
void disguoguan()
{
  unsigned int i;
  unsigned char j;
  LCD_clear();
  write_string(15,1,"GOOD GAME");
  write_string(18,3,"HAVE FUN");
  write_string(15,5,"GOOD LUCK");
  for(i=0;i<50000;i++)
  { 
      delay(2);
  }	  
  LCD_clear();
  ping();
  disguan();
  disscore();
  disstep();
  LCD_set_XY(75,1);
  for(j=0;j<8;j++)
  {
     LCD_write_byte(fangkuai[j],1);
  }
  renew();
}
/////////////////////////////////////////////////
//欢迎屏幕
/////////////////////////////////////////////////

void welcome(void)
{
//  dishead();
//  while(scakey()==0);
  LCD_clear();
  write(0,0,0);
  write(1,0,1);
  write(2,0,2);
  write(3,0,3);
  write(4,0,4);
  write_string(0,2,"Designed by...");delay(3);
  write_string(7,3,"Duhongxu");delay(2);
  write_string(0,4,"press any key  to start...");
//  while(scakey()==0);
  LCD_clear();
}
/************************************************
       t0控制下降速度 t1产生随机数  
*************************************************/

/////////////////////////////////////////////////////
                   //生成方块
/////////////////////////////////////////////////////
void create()
{
  unsigned char i;
  fknow=suijishu;
  for(i=0;i<8;i++)
  {fangkuai[i]=fk[4*fknow][i];}
  fknext=fknow;
}


/*****************************************************
                   方块初始化
******************************************************/
void fangkuai_init()
{
  unsigned char i;
  load();
  fknow=fknext;
  fknext=suijishu;
  for(i=0;i<8;i++)
  {fangkuai[i]=fk[4*fknext][i];}
  LCD_set_XY(75,1);
  for(i=0;i<8;i++)
  {LCD_write_byte(fangkuai[i],1);}
}
//////////////////////////////////////////////////////
                 //背景 new 赋初值
//////////////////////////////////////////////////////
void bg_init()
{
  unsigned char i,j;
  for(j=0;j<3;j++)
  {
    for(i=0;i<58;i++)
	 {background[j][i]=0;}
  }
  for(j=0;j<3;j++)
	 {background[j][1]=0xff;}   
}
/******************************************************
                  方块装入涂层
******************************************************/
void load(void)
{
   unsigned char i,j;
	for(i=0;i<3;i++)
	{
	  for(j=0;j<8;j++)
	  {
	    front[i][j]=0;//front init
	  }
	}
   for(i=0;i<8;i++)
   {front[1][i]=fangkuai[i];}
}
//////////////////////////////////////////////////////
//刷新游戏区屏幕
//////////////////////////////////////////////////////

/////////////////////////////////////////////////////
//front和background作与运算                        //
//参数x为background的参与运算位置                  //
//返回值 1允许移动 0到边界                         //
/////////////////////////////////////////////////////
unsigned char allow(unsigned char x)
{
  unsigned char i,j,k;
  for(j=0;j<3;j++)
  {
    for(i=0;i<8;i++)
	 {
	   k=fronttemp[j][i]&background[j][x+i-16];
		if(k!=0) return 0;
	 }
  }
  return 1;
}
////////////////////////直接用front
unsigned char allow2(unsigned char x)
{
  unsigned char i,j,k;
  for(j=0;j<3;j++)
  {
    for(i=0;i<8;i++)
	 {
	   k=front[j][i]&background[j][x+i-16];
		if(k!=0) return 0;
	 }
  }
  return 1;
}
/////////////////////////////////////////////////////
//上移
/////////////////////////////////////////////////////
void up()
{
 unsigned char i,j;
  unsigned char k;
  for(i=0;i<8;i++)
  {
    if(front[0][i]&1)
    {
	 k=0;break;
	 }
	 k=1;
  }
  if(k==1)
  {
    for(i=0;i<2;i++)
	 {
	   for(j=0;j<8;j++)
		{
		  fronttemp[i][j]=(front[i][j]>>2)|(front[i+1][j]<<6);
		}
	 }
	 for(j=0;j<8;j++)
	 {fronttemp[2][j]=front[2][j]>>2;}
    if(allow(front_x))
    {
       for(i=0;i<3;i++)
	    {
	      for(j=0;j<8;j++)
		   {
		     front[i][j]=fronttemp[i][j];
		   }
	    }
		 moved-=1;
		 disstep();
	 }
  }
//  TR0=1;
}
////////////////////////////////////////////////////
//下移
////////////////////////////////////////////////////
void godown()
{
  unsigned char i,j;
  unsigned char k;
//  TR0=0;
  for(i=0;i<8;i++)
  {
    if(front[2][i]&0x80)
    {
	 k=0;break;
	 }
	 k=1;
  }
  if(k==1)
  {
    for(i=2;i>0;i--)
	 {
	   for(j=0;j<8;j++)
		{
		  fronttemp[i][j]=(front[i][j]<<2)|(front[i-1][j]>>6);
		}
	 }
	 for(j=0;j<8;j++)
	 {fronttemp[0][j]=front[0][j]<<2;}
    if(allow(front_x))
    {
       for(i=0;i<3;i++)
	    {
	      for(j=0;j<8;j++)
		   {
		     front[i][j]=fronttemp[i][j];
		   }
	    }
		 moved+=1;
		 disstep();
	 }
  }
//  TR0=1;
}
//////////////////////////////////////////////////
//move up 和上移一样 只少了 moved-=1;
///////////////////////////////////////////////////
void move_up()
{
 unsigned char i,j;
  unsigned char k;
  for(i=0;i<8;i++)
  {
    if(front[0][i]&1)
    {
	 k=0;break;
	 }
	 k=1;
  }
  if(k==1)
  {
    for(i=0;i<2;i++)
	 {
	   for(j=0;j<8;j++)
		{
		  fronttemp[i][j]=(front[i][j]>>2)|(front[i+1][j]<<6);
		}
	 }
	 for(j=0;j<8;j++)
	 {fronttemp[2][j]=front[2][j]>>2;}
       for(i=0;i<3;i++)
	    {
	      for(j=0;j<8;j++)
		   {
		     front[i][j]=fronttemp[i][j];
		   }
	    }
  }
}
///////////////////////////////////////////////////
//move down 和下移一样 只少了 moved+=1;
///////////////////////////////////////////////////
void move_down()
{
  unsigned char i,j;
  unsigned char k;
  for(i=0;i<8;i++)
  {
    if(front[2][i]&0x80)
    {
	 k=0;break;
	 }
	 k=1;
  }
  if(k==1)
  {
    for(i=2;i>0;i--)
	 {
	   for(j=0;j<8;j++)
		{
		  fronttemp[i][j]=(front[i][j]<<2)|(front[i-1][j]>>6);
		}
	 }
	 for(j=0;j<8;j++)
	 {fronttemp[0][j]=front[0][j]<<2;}
        for(i=0;i<3;i++)
	    {
	      for(j=0;j<8;j++)
		   {
		     front[i][j]=fronttemp[i][j];
		   }
	    }
  }
}
///////////////////////////////////////////////////
//换向
///////////////////////////////////////////////////
void change(void)
{
  unsigned char i,j,temp[8];
//  TR0=0;
  for(i=0;i<8;i++)
  {temp[i]=fk[4*fknow+bianhuan][i];}
  bianhuan++;
  if(bianhuan==4){bianhuan=0;}
  //load temp as fangkuai
	for(i=0;i<3;i++)
	{
	  for(j=0;j<8;j++)
	  {
	    front[i][j]=0;
	  }
	}
   for(i=0;i<8;i++)
   {front[1][i]=temp[i];}
  //move to where it is before  
  if(moved<10)
  {
    for(i=0;i<(10-moved);i++)
    {
       move_up();
    }
  }
  else if (moved>10)
  {
    for(i=0;i<(moved-10);i++)
	 {
       move_down();
	 }
  }
  renew();
//  TR0=1;
}
///////////////////////////////////////////////////
//由定时器控制涂层下降
///////////////////////////////////////////////////
void move()
{
    if(allow2(front_x-2))
	 {
	   front_x-=2;
		disstep();
      renew();
	 }
   else
  {
    win();
  }
}
///////////////////////////////////////////////////
//消层
///////////////////////////////////////////////////
void cut1(unsigned char i,unsigned char j)
{
    unsigned char k;
    for(k=j;k<(56-j);k++)
	 {
	   background[i][k]=background[i][k+2];
	 }
}
void cut(unsigned char j)
{
  unsigned char i;
//  TR0=0;
  for(i=0;i<3;i++)
  {
    cut1(i,j);
  }
  for(i=0;i<3;i++)
  {
    background[i][56]=0;
    background[i][57]=0;
  }
//  TR0=1;
}
///////////////////////////////////////////////////
//GAME OVER
///////////////////////////////////////////////////
void game_over()
{
//   TR0=0;
   disover();
	LCD_clear();
   ping();
  	bg_init(); 
   create();
	fangkuai_init();
	renew();
	score=0;
	guan=1;
	step=0;
	speed=6;
	disscore();
	disguan();
//	TR0=1;
}
///////////////////////////////////////////////////
//得分判断
///////////////////////////////////////////////////
//////////消层/////////////
void xiao()
{
  unsigned char i,j,k,l;
 for(i=2;i<58;i++)
 {
    l=0;
    for(j=0;j<3;j++)
	{
      k=background[j][i]&0xff;
      if(k==0xff) l+=1;
    }
		 if(l==3) 
		 {
		    cut(i);
			score+=20;
			disscore();
			if(score%100==0)
		   {
			  guan+=1;
			  disguoguan();
			  if((speed-2)>1)
			  {
			  speed-=2;
			  }
			  disguan();
			}
		 }
  }
}
void win(void)
{
  //////////front合并进background///////////
  unsigned char i,j;
//  TR0=0;
  for(j=0;j<3;j++)
  {
     for(i=0;i<8;i++)
	  {
	    background[j][front_x+i-16]|=front[j][i];
	  }
  }
  xiao();
  xiao();
  if(front_x==66)
  {
    game_over();
  }
  front_x=66;
  ping();
  fangkuai_init();
  moved=10;
//  TR0=1;
  renew();
}

#if 0
/**************************************************
                      中断处理
***************************************************/
void timer1(void) interrupt 3 //suijishu0 to 6
{
  if(suijishu<6)
  suijishu++;
  else
  suijishu=0;
}
void timer0(void) interrupt 1 //dawn speed
{
  if(speedtemp<speed)
  {speedtemp++;}
  else//front dawn
  {
    move();
    speedtemp=0;
  }
}

#endif


void key(void)
{
  unsigned char keyval;
  keyval=scakey();
  if(keyval==0)
  {
     down=0;
	 other=0;
  }
  else if(keyval==1&&down==0)
   {
      down=1;
//	  beep();
	  up();
	  renew();
	}
  else if(keyval==2&&down==0)
   {
	  down=1;
//	  beep();
	  change();
   }
  else if(keyval==3&&down==0)
   {
	  down=1;
//	  beep();
	  godown();
	  renew();
   }
  else if(keyval==12&&other==0)
   {
	  down=1;other=1;
//	  beep();
	  pause();
   }
}

unsigned char  speedtemp=0;

void TIM2_IR(void)
{
    if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
    {
        TIM_ClearFlag(TIM2, TIM_FLAG_Update);
	    if(speedtemp<speed)
        {
		    speedtemp++;
	    }
        else//front dawn
        {
           move();
           speedtemp=0;
        }
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -