#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define center 1425
uint width,c,d,init,stop;
sfr CCON=0x88;
sfr CMOD=0x89;
sbit hw1=P0^0;
sbit hw2=P0^1;
sbit hw3=P0^2;
sbit hw4=P0^3;
sbit b0=P0^4;
sbit lw4=P0^5;
sbit lw3=P0^6;
sbit lw2=P0^7;
sbit lw1=P2^0;
sbit in=P2^7;
sbit p12=P1^1;
sbit p13=P1^0;
//sbit b2=P2^3;
void delay(uchar ms)
{ uchar x,y,z;
for(x=ms;x>0;x--)
for(y=200;y>0;y--)
for(z=250;z>0;z--)
;}
void timer0(void) interrupt 1 using 1 /*设置定时器中断产生舵机控制pwm控制变量为 width*/
{ p12=~p12;
if(p12==1)
c=65536-width;
else
c=65536-(10000-width);//周期为10ms,占空比:M=10000/width
TH0=(c/256);}
void timer1() interrupt 3 using 1 //控制电机的占空比的波形
{
p13=~p13;
if(p13==1)
d=65536-init;
else
d=65536-(20000-init);
TH1=d/256;
TL1=d%256; }
void main()
{
TMOD=0x11;
p12=1;
p13=0;
if(in==1)
{init=0x12;}
else
{init=0x18;}
stop=0;
TH0=(65536-width)/256;
TL0=(65536-width)%256;
TH1=(65536-init)/256;
TL1=(65536-init)%256;
EA=1;
EX0=1;
ET0=1;
TR0=1;
EX1=1;
ET1=1;
TR1=1;
while(1)
// p13=0;
{
void carmain();
}
}
void carmain(void)
{
if((hw1||hw2||hw3||hw4)&&(lw1||lw2||lw3||lw4)==1) //停车程序.....
{
{ stop=stop+1;
delay(20);
}
if(stop==2)
init=0;
width=center;
delay(2000);
EA=0;
while(1){;}
}
while(1)
{
if(b0==1)
{ width=center; //舵机角度不变
init=18000;
}
else if(lw4==1)
{ width=center+55;
init=18000;
}
else if(hw4==1)
{ width=center-56;
init=18000;
}
else if(lw3==1)
{ width=center+112;
init=16000;
} //占空比80%
else if(hw3==1)
{ width=center-113;
init=16000;
}
else if(lw2==1)
{ width=center+167;
init=16000;
}
else if(hw2==1)
{ width=center-168;
init=16000;
}
else if(lw1==1)
{ width=center+223;
init=11000;
}
else if(hw1==1)
{ width=center-224;
init=11000;
}
}}
|