|
楼主 |
发表于 2011-5-3 12:55:34
|
显示全部楼层
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define timexiuzheng 11.0592/12
#define s20ms 20000*timexiuzheng
sbit jp0=P1^0;
sbit jp1=P1^1;
sbit jp2=P1^2;
sbit jp3=P1^3;
sbit jp4=P1^4;
sbit jp5=P1^5;
sbit jp6=P1^6;
sbit jp7=P1^7;
sbit jp20=P2^0;
sbit jp24=P2^4;
bit bt0=0;
bit bt1=0;
bit bg=0,bx=0;
uint jptmid,jps;
uint jpth[8],jptl[8];
uint bumc[4];
char bxz=0;
uchar order=0,ti1=0,jiz=0,ftz=0,sdm=0,sdk=0,hti,sy=0;
uint dms,sd,bi,ji,feetz,feety,zuoyi,youyi,buh,bum;
void time0() interrupt 1 using 1
{
TH0=jpth[order];TL0=jptl[order];
switch (order++){
case 0:
jp0=1;
break;
case 1:
jp0=0;
break;
case 2:
jp1=1;
break;
case 3:
jp1=0;
break;
case 4:
jp2=1;
break;
case 5 :
jp2=0;
break;
case 6:
jp3=1;
break;
case 7:
jp3=0;
order=0;
break;
}
}
void time1() interrupt 3 using 2 //100us
{
if(!bx&&!bg){if(jp24){jp20=1; bx=1;}}
if (bt1){
if (ti1++==10){
if(!dms--)bt1=0; //dms ms
ti1=0;
}
}
}
void delay(unsigned int ms)
{
dms=ms;ti1=0; bt1=1;
while(bt1);
}
void jpc(uchar jn,uint jp)
{
jptmid=(jp*timexiuzheng);
jpth[jn*2]=-(jptmid/256);
jptl[jn*2]=-(jptmid%256);
jps=s20ms/4-7-jptmid;
jpth[jn*2+1]=-(jps/256);
jpth[jn*2+1]=-(jps%256);
}
void you(uint jd)
{
while(feetz>bumc[3]-jd){
feetz-=ftz; feety-=ftz;
jpc(3,feetz);jpc(2,feety);
delay(sd);
}
while(feetz<bumc[3]-jd){
feetz+=ftz; feety+=ftz;
jpc(3,feetz);jpc(2,feety);
delay(sd);
}
}
void zuo(uint jd)
{
while(feetz<bumc[3]+jd){
feetz+=ftz; feety+=ftz;
jpc(3,feetz);jpc(2,feety);
delay(sd);
}
while(feetz>bumc[3]+jd){
feetz-=ftz; feety-=ftz;
jpc(3,feetz);jpc(2,feety);
delay(sd);
}
}
void qian(uint jd)
{
if (!bx){
ji=bumc[0]+jd;bi=bumc[1]+jd;
jpc(0,ji);jpc(1,bi);
}
}
void hou(uint jd)
{
if(!bx){
ji=bumc[0]-jd;bi=bumc[1]-jd;
jpc(0,ji);jpc(1,bi);
}
}
void guiwei()
{
while(ji>bumc[0]){
bi-=jiz;jpc(1,bi);
ji-=jiz;jpc(0,ji);
delay(sd);
}
while(ji<bumc[0]){
bi+=jiz;jpc(1,bi);
ji+=jiz;jpc(0,ji);
delay(sd);
}
}
void stop()
{
guiwei();
sd=20;
if(feetz<bumc[3])zuo(0);
else if(feetz>bumc[3])you (0);
delay(50);
}
main() {
TMOD=0x21;
TH0=-(1500/256); TL0=-(1500%256); //1.5ms
TR0=1;ET0=1;
TH1=0xa4; TL1=0xa4;
TR1=1;ET1=1;
EA=1;
bumc[0]=1500-30;
bumc[1]=1500-40;
bumc[2]=1500;
bumc[3]=1500+50;
for(ji=0;ji<=3;ji++){
jpc(ji,bumc[ji]);
}
order=0;
jp20=1;
delay(5000);
jp24=1;bx=1;
while(jp24); while(!jp24); while(jp24);
jp20=0;
buh=100;
youyi=130; zuoyi=130;
feety=bumc[2];
feetz=bumc[3];
ji=bumc[0];
bi=bumc[1];
jiz=10;ftz=5;
bt0=1;bxz=0;
bx=0;bg=1;
sd=30;
you(youyi);
//qian(400);
while(ji<bumc[0]+300){
ji+=jiz;jpc(0,ji);
bi+=jiz;jpc(1,bi);
delay(sd);
}
delay(1000);
you(youyi-30);
//hou(0);
while(ji>bumc[0]){
bi-=jiz;jpc(1,bi);
ji-=jiz;jpc(0,ji);
delay(sd);
}
delay(100);
you(youyi);
//hou(200);
while(ji>bumc[0]-300){
bi-=jiz;jpc(1,bi);
ji-=jiz;jpc(0,ji);
delay(sd);
}
delay(1000);
//qian(0);
while(ji<bumc[0]){
ji+=jiz;jpc(0,ji);
bi+=jiz;jpc(1,bi);
delay(sd);
}
{zuo(0); delay(3000);}
zuo(zuoyi);
qian(150);delay(1000);
ji=bumc[0]-200;jpc(0,ji);
bi=bumc[1]-300;jpc(1,bi);
//zuo(zuoyi-30);
delay(500);
zuo(zuoyi-30);
guiwei();bi=bumc[1];jpc(1,bi);
you(0);
bx=0;bg=0;
delay(3000);
while(1){
if(bx){ET1=0;while(jp24);while(!jp24) ;while(jp24);jp24=0;jp20=0; bx=0;bxz=0;ET1=1;}
buh=80; youyi=120; zuoyi=120;
sdm=4;sdk=2;
switch (bxz)
{
case 0:
jiz=4;ftz=2;
break;
case 5:
jiz=6;ftz=3;
delay(3000);
break;
case 20:
bxz=0;
jiz=4;ftz=2;
delay(3000);
break;
}
sd=sdm;if(!bx)you(youyi);delay(10);
sd=sdk;qian(buh);//else qian(buh);
sd=sdm;if(!bx)zuo(30); delay(10);
guiwei();//delay(10);
sd=sdm;if(!bx)zuo(zuoyi); delay(10);
sd=sdk;hou(buh);
sd=sdm;if(!bx)you(30);delay(10);
guiwei();
if(bx)stop();
bxz=bxz+1;
if (bxz==20&&!bx)
{
delay(3000);
youyi=100; zuoyi=80;
sdm=6;sdk=3;
jiz=10;ftz=5;
for(hti=0;hti<15;hti++)
{
if(bx)break;
sd=sdm;if(!bx)you(youyi);
sd=sdk;hou(70);
sd=sdm;if(!bx)zuo(20);delay(20);
guiwei();
sd=sdm;if(!bx)zuo(zuoyi);
sd=sdk;qian(70);
sd=sdm;if(!bx) you(20);delay(20);
guiwei();
}
if(bx)stop();
}
}
} |
|