📄 sda.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 + -