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

📄 sda.c

📁 本人学习单片机一年多时间厚参加全国电子设计大赛的程序以及赛前练习的程序。
💻 C
字号:
#include<reg51.h>
#include<math.h>

sbit P2_0=P2^0;
sbit P3_2=P3^2;
sbit P3_3=P3^3;
sbit P3_4=P3^4;


unsigned int R=20,NOWL=1,NOWR=1,dirl,dirr,step1,step2,xx;
unsigned int CODE[9]={0x00,0x88,0xCC,0x44,0x66,0x22,0x33,0x11,0x99};
unsigned char mov=0x88,linshi;
float PI=3.141592653;
double x=0.0,y=-20.0,l1,l2,l3,l4,step11,step22,zancun,xiaoshul,xiaoshur,wuchal,wuchar;


move(unsigned int a,unsigned int b,unsigned int c,unsigned int d);
void movestart(void);
void moveend(void);
unsigned int getkey(void);
delay(unsigned int t);

main()
{
unsigned int c,j;
unsigned char key=0;
l1=sqrt(55*55+(65+R)*(65+R));
l2=l1;

P1=0x00;
P2_0=0;
P3_2=0;
P3_3=0;
P3_4=0;
for(;;)
{
key=getkey();
if(key==1)
{
movestart();
for(j=0;j<255;j++)
 delay(255);
for(c=1;c<=120;c++)
 {x=R*sin(c*PI/60);
  y=R*cos(c*PI/60);
  l3=sqrt((55+x)*(55+x)+(65+y)*(65+y));
  l4=sqrt((55-x)*(55-x)+(65+y)*(65+y));
  if(l3<l1)
   {dirl=3;
    step11=(l1-l3)/0.075229;
    step1=step11;
    xiaoshul=step11-step1;
	wuchal=xiaoshul+wuchal;
    }
  else
   {dirl=1;
    step11=(l3-l1)/0.075229;
    step1=step11;
    xiaoshul=step11-step1;
	wuchal=xiaoshul-wuchal;
	}

  if(l4<l2)
   {dirr=3;
    step22=(l2-l4)/0.075229;
    step2=step22;
    xiaoshur=step22-step2;
	wuchar=xiaoshur+wuchar;
    }
  else
   {dirr=1;
    step22=(l4-l2)/0.075229;
    step2=step22;
    xiaoshur=step22-step2;
	wuchar=xiaoshur-wuchar;
	}
  if(wuchal>1.0)
    {mov=mov&0xF0;
     NOWL=NOWL+1; 
     linshi=CODE[NOWL]&0x0F;
	 mov=mov|linshi;
	 P1=mov;
	 wuchal=wuchal-1.0;
	 }
  if(wuchal<-1.0)
    {mov=mov&0xF0;
     NOWL=NOWL-1; 
     linshi=CODE[NOWL]&0x0F;
	 mov=mov|linshi;
	 P1=mov;
	 wuchal=wuchal+1.0;
	 }
  if(wuchal>1.0)
    {mov=mov&0x0F;
     NOWR=NOWR+1; 
     linshi=CODE[NOWR]&0xF0;
	 mov=mov|linshi;
	 P1=mov;
	 wuchal=wuchal-1.0;
	 }
  if(wuchar<-1.0)
    {mov=mov&0x0F;
     NOWR=NOWR+1; 
     linshi=CODE[NOWR]&0xF0;
	 mov=mov|linshi;
	 P1=mov;
	 wuchar=wuchar+1.0;
	 }
  step1=step11;
  step2=step22;
  move(step1,step2,dirl,dirr);
  l1=l3;
  l2=l4;
  }
moveend();
break;
}
}          /*end for*/
for(;;);
}

delay(unsigned int t)
{int i;
 for(i=0;i<t;i++)
 ;
 }

move(unsigned int a,unsigned int b,unsigned int c,unsigned int d)
{unsigned int max,i,j,k,l;
 k=a;
 l=b;
 max=(a>b)?a:b;
 for(i=0;;i++)
 {if(k>0)
   {mov=mov&0xF0;
	 if(c>2)
     {NOWL=NOWL+1;
      if(NOWL>8)
       NOWL=1;
		}
	 else
     {NOWL=NOWL-1;
      if(NOWL<1)
       NOWL=8;
		}
    linshi=CODE[NOWL]&0x0F;
    mov=mov|linshi;
    k--;
	 }
  if(l>0)
   {mov=mov&0x0F;
	 if(d>2)
     {NOWR=NOWR+1;
      if(NOWR>8)
       NOWR=1;
		}
	 else
     {NOWR=NOWR-1;
      if(NOWR<1)
       NOWR=8;
		}
    linshi=CODE[NOWR]&0xF0;
    mov=mov|linshi;
    l--;
	 }
   P1=mov;
   for(j=0;j<50;j++)
    delay(120);
   max--;
   if(max==1) break;
   }
}

unsigned int getkey()
{
unsigned char f;
f=0;
	if (P3_2==1) f=1;
	if (P3_3==1) f=2;
	if (P3_4==1) f=3;
	if (P2_0==1) f=4;
	delay(255);
	return f;
}

void movestart(void)
{ unsigned int i=1;
  l3=sqrt(55*55+65*65);
  l4=l3;
  step1=(l1-l3)/0.075229;
  step2=(l2-l4)/0.075229;
  move(step1,step2,i,i);
}

void moveend(void)
{
unsigned int i=3;
l1=sqrt(55*55+(65+R)*(65+R));
l2=l1;
l3=sqrt(55*55+65*65);
l4=l3;
step1=(l1-l3)/0.075229;
step2=(l2-l4)/0.075229;
move(step1,step2,i,i);
}

⌨️ 快捷键说明

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