main.c

来自「自己做的单片机Proteus仿真实例」· C语言 代码 · 共 912 行 · 第 1/2 页

C
912
字号
  play16(1,0,2,xing);
  play16(1,2,2,qi);
  vertical(3,63,127);
  vertical(3,63,126);
  vertical(3,63,122);
  vertical(3,63,121);
   for(i=0;i<7;i++)
  {
    dot(121+i,3);
	dot(121+i,63);
  }
  for(i=0;i<12;i++)
  {
    dot(123,8+5*i);
  }
  for(i=0;i<7;i++)
  {
    if(i<4)
	{
	  play16(0,i<<1,3,yanyu+(i<<5));
	}
	if(i>=4)
	{
	  play16(1,(i-4)<<1,3,yanyu+(i<<5));
	}
  }
  init_ds1302();
  init_time();
  flag5=0;
  do
  {
     if(P3&0x04)
     first=1;
     init_ds1302();
     gettime(&realtime);
	 play8(0,2,0,(shu0+(datastring[0]<<4)));
	 play8(0,3,0,(shu0+(datastring[1]<<4)));
	 play8(0,6,0,(shu0+(datastring[2]<<4)));
	 play8(0,7,0,(shu0+(datastring[3]<<4)));
	 play8(1,2,0,(shu0+(datastring[4]<<4)));
	 play8(1,3,0,(shu0+(datastring[5]<<4)));
	 play8(0,0,1,(shu0+(datastring[6]<<4)));
	 play8(0,1,1,(shu0+(datastring[7]<<4)));
	 play8(0,4,1,(shu0+(datastring[8]<<4)));
	 play8(0,5,1,(shu0+(datastring[9]<<4)));
	 play8(1,0,1,(shu0+(datastring[10]<<4)));
	 play8(1,1,1,(shu0+(datastring[11]<<4)));
	 play16(1,4,2,(yi+((datastring[12]-2)<<5)));
	 gettemperature();
	 if(flagg)
	 {
	   play8(0,0,2,fu);
	   play8(1,6,3,fu);
	 }
	 else
	  {
	    clear8(6,4,0);
		play8(1,6,3,zheng);
	  }
	 play8(0,4+flagg,2,dian);
     play8(0,5+flagg,2,C);
	 play8(0,0+flagg,2,(shu0+(temp[0]<<4)));
	 play8(0,1+flagg,2,(shu0+(temp[1]<<4)));
	 play8(0,2+flagg,2,xiao);
	 play8(0,3+flagg,2,(shu0+(temp[2]<<4)));
	 play();
	 dot(124,3);
	 if((k==0x02)&&((P3&0x04)==0x04))
	 {
	   count1++;
	   if(count1==7)
	   count1=0;
	   switch (count1)
	   {
	     case 0:
		        {
                  play16(1,0,2,xing);
                  play16(1,2,2,qi);
				  k=0;break;
				}
	  
	     case 1:
		        {
				  play16_fb(0,4,0);			
				  k=0; break;
				}
		case 2:
		        {
                  play16(0,4,0,nian);
                  play16_fb(1,0,0);
				  k=0;break;				  
				}
	    case 3:
		        {
				  play16(1,0,0,yue);
                  play16_fb(1,4,0); 
				  k=0;break;
				}  
		case 4:
		        {
				  play16(1,4,0,ri);
                  play16_fb(0,2,1);
				  k=0;break;
				}
		case 5:
		        {
				  play16(0,2,1,shi);
                  play16_fb(0,6,1);
				  k=0;break;
				}
		case 6:
		        {
				   play16(0,6,1,fen);
				   play16_fb(1,0,2);
                   play16_fb(1,2,2);
				   k=0;break;
				}
		default:k=0;break;
	   }
	 }
	 if((k==0x03)&&((P3&0x04)==0x04))
	 {
	   switch(count1)
	   {
	     case 1:
		         {
				   setjia(ds1302_year);k=0;break;
				 }
		 case 2:
				 {
				   setjia(ds1302_month);k=0;break;
				 }
		 case 3:
				 {
				   setjia(ds1302_day);k=0;break;
				 }
	   	 case 4:
				 {
				   setjia(ds1302_hour);k=0;break;
				 }
		 case 5:
				 {
				   setjia(ds1302_minute);k=0;break;
				 }
		 case 6:
				 {
				  setjia(ds1302_week);k=0;break;
				 }
	   }
	 }
	 if((k==0x01)&&((P3&0x04)==0x04))
	 {
	   switch(count1)
	   {
	     case 1:
		         {
				   setjian(ds1302_year);k=0;break;
				 }
		 case 2:
				 {
				   setjian(ds1302_month);k=0;break;
				 }
		 case 3:
				 {
				   setjian(ds1302_day);k=0;break;
				 }
	   	 case 4:
				 {
				   setjian(ds1302_hour);k=0;break;
				 }
		 case 5:
				 {
				   setjian(ds1302_minute);k=0;break;
				 }
		 case 6:
				 {
				   setjian(ds1302_week);k=0;break;
				 }
	   }
	}
  }	while(!flag5);
}
/*贪吃蛇子程序*/
void tanchishe(void)													   
{	   
  uchar xdata length[102]={0,8,1,8};	 //存放蛇身的数组;
  uchar food[2]={12,8};
  uchar i,x,y;
  bit flag2,flag3,flag4;
  TMOD=1;	  //定时器工作方式
  IT0=1;	  //边延有效
  IT1=1;
  EA=1;		  //开CPU中断
  ET0=1;	  //开定时器中断
  EX0=1;	  //开外部中断
  EX1=1;
  TL0=0x00;
  TH0=0x00;	  //定时器初值
  TR0=1;	  //启动定时器

  dengji=2;
  p=20;
  direction=1;
  flag5=0;
  
  choose12864(2);
  clear12864();	
  vertical(1,61,30);
  vertical(1,61,127);
  for(i=0;i<98;i++)
  {
    dot(30+i,1);
	dot(30+i,62);
  }
  play16(0,0,0,tan);
  play16(0,0,1,chi);
  play16(0,0,2,she);
  change(length,(length+1));
  change((length+2),(length+3));
  change(food,food+1);
  for(;;)
  {
    do
   {
    first=1;
    while(flag5|!flag1);
    x=*(length);                               
    y=*(length+1);
    switch(direction)			   //右
	{
	  case 1:
	    {
	      for(i=0;i<dengji-1;i++)
	       {
	         *(length+(i<<1))=*(length+(i<<1)+2);
		     *(length+(i<<1)+1)=*(length+(i<<1)+3);
	       }
	       (*(length+(dengji<<1)-2))++;
		   flag=0;
		   break;
	      }
	   	case 2:					  //下
		 {
	      for(i=0;i<dengji-1;i++)
	       {
	         *(length+(i<<1))=*(length+(i<<1)+2);
		     *(length+(i<<1)+1)=*(length+(i<<1)+3);
	       }
		    (*(length+(dengji<<1)-1))++;
			flag=1;
			break;
		  }
		case 3:					//左
		 {
	       for(i=0;i<dengji-1;i++)
	       {
	         *(length+(i<<1))=*(length+(i<<1)+2);
		     *(length+(i<<1)+1)=*(length+(i<<1)+3);
	       }
	       (*(length+(dengji<<1)-2))--;
		   flag=0;
		   break;
		 }
		case 4:
		 {			//上
		 for(i=0;i<dengji-1;i++)
	       {
	         *(length+(i<<1))=*(length+(i<<1)+2);
		     *(length+(i<<1)+1)=*(length+(i<<1)+3);
	       }
		    (*(length+(dengji<<1)-1))--;
			flag=1;
			break;
		 }
	 }
	 flag4=((*(length+(dengji<<1)-2))==food[0])&&((*(length+(dengji<<1)-1))==food[1]);
	 if(flag4)	//
	 {
		for(i=dengji;i>0;i--)
		{
		  *(length+(i<<1))=*(length+(i<<1)-2);
		  *(length+(i<<1)+1)=*(length+(i<<1)-1);
		}
		*length=x;
		*(length+1)=y;
		dengji++;
		do
		{
		  flag3=0;
		  food[0]=TL0%24;
	      food[1]=TL0%15;
		  for(i=0;i<dengji-1;i++)	 //食物是否在蛇身身上
		  {
		    if((*(length+(i<<1)))==food[0]&&((*(length+(i<<1)+1))==food[1]))
			{
			  flag3=1;
			  break;
			 }
		  }
		}while(flag3);
		change(food,food+1); 
	 }
     flag2=1;	  //蛇头没有遇到蛇身
	 for(i=0;i<dengji-1;i++)
        {
		   if(*(length+(i<<1))==*(length+(dengji<<1)-2)&&(*(length+(i<<1)+1)==*(length+(dengji<<1)-1)))
		   {
		     flag2=0;
			 break;
			}
		}
	  flag2=flag2&&*(length+(dengji<<1)-2)>=0&&*(length+(dengji<<1)-2)<24;//蛇头是否出边界
	  flag2=flag2&&*(length+(dengji<<1)-1)>=0&&*(length+(dengji<<1)-1)<15;
	  if(flag2)
	   {
	    clear(&x,&y); 
		
	    
	     {
	       change(length+(dengji<<1)-2,length+(dengji<<1)-1);
	     }
		 if(flag4)
		 {
		   change(&x,&y);
		  }
	    flag1=0;
	    play8(0,0,3,shu0+((dengji/10)<<4));
	    play8(0,1,3,shu0+(((dengji)%10)<<4));
	   }
   }
   while(flag2);
   delay1ms(450);
   delay1ms(450);
   choose12864(2);
   clear12864();
   play16(0,4,1,over);
   play16(0,6,1,over+32);
   play16(1,0,1,over+64);
   play16(1,2,1,over+96);
   delay1ms(450);
   delay1ms(450);
   break;
  }
}
//////////////////////////////
main(void)
{
 uchar i;
 uchar count=0;
 P2=0xff;
  EA=1;		  //开CPU中断
  //ET0=1;	  //开定时器中断
  EX0=1;	  //开外部中断
  EX1=1;
 choose12864(2);
 init12864();
 clear12864();
 ////////////////////
 play16(0,4,0,tan);
 play16(0,6,0,chi);
 play16(1,0,0,she);
 ///////////////////
 play16(0,4,1,els);
 play16(0,6,1,els+32);
 for(i=0;i<3;i++)
 {
   play16(1,i<<1,1,(els+64+(i<<5)));
 }
 //////////////////

 play16(0,4,2,wnl);
 play16(0,6,2,wnl+32);
 play16(1,0,2,wnl+64);
 
 //////////////////
 for(;;)
  {
    if((k==0x03)&&((P3&0x04)==0x04))
   {
	count++;
	k=0;
	if(count==4)
	count=1;
	switch(count)
	{
	  case 1:
	         {
			    play16(0,4,2,wnl);
                play16(0,6,2,wnl+32);
                play16(1,0,2,wnl+64);
				play16_fb(0,4,0);
                play16_fb(0,6,0);
                play16_fb(1,0,0);
			 };break;
	  case 2: {
	  		   	 play16(0,4,0,tan);
                 play16(0,6,0,chi);
                 play16(1,0,0,she);
				 play16_fb(0,4,1);
                 play16_fb(0,6,1);
                 for(i=0;i<3;i++)
                 {
                   play16_fb(1,i<<1,1);
                  }
 	           };break;
	  case 3:
	          {
	            
				 play16(0,4,1,els);
                 play16(0,6,1,els+32);
                 for(i=0;i<3;i++)
                 {
                   play16(1,i<<1,1,(els+64+(i<<5)));
                 } 
				 play16_fb(0,4,2);
                 play16_fb(0,6,2);
                 play16_fb(1,0,2); 
	          };break;
	default:break;
	}
  }
  if(P3&0x04)
  first=1;
  if(flag5)
  {
    switch(count)
	{
	  case 1:flag5=0;tanchishe();count=0;flag5=0;k=0;break;
	  case 2:flag5=0;fangkuai();count=0;flag5=0; k=0;break;
	  case 3:flag5=0;wannianli();count=0;flag5=0;k=0;break;
	  default:count=0;k=3;flag5=0;break;
	}
	 choose12864(2);
     init12864();
     clear12864();
 ////////////////////
     play16(0,4,0,tan);
     play16(0,6,0,chi);
     play16(1,0,0,she);
 ///////////////////
     play16(0,4,1,els);
     play16(0,6,1,els+32);
     for(i=0;i<3;i++)
     {
       play16(1,i<<1,1,(els+64+(i<<5)));
     }
 //////////////////

     play16(0,4,2,wnl);
     play16(0,6,2,wnl+32);
     play16(1,0,2,wnl+64);
 //////////////////
  }
 }

}

⌨️ 快捷键说明

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