#include <reg52.h>
//--设定占空比--//
#define left_speed 27
#define right_speed 25
#define turn_left_speed 70
#define turn_right_speed 70
//--定义使用的IO口--//
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit IN3 = P1^2;
sbit IN4 = P1^3;
sbit ENA = P1^4;
sbit ENB = P1^5;
sbit R = P2^1;
sbit L = P2^2;
sbit F1 = P2^3;
sbit F2 = P2^4;
unsigned char Duty_left,Duty_right,i=0,j=0;
//------------------------------------------
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=n;i>0;i--)
for(j=114;j>0;j--);
}
//------------------------------------------
void init()//定时器初始化
{
L=1;//初始化
R=1;
F1=1;
F2=1;
TMOD|=0x01;
TH0=(65536-66)/256;
TL0=(65536-66)%256;
EA=1;
ET0=1;
TR0=1;
ENA=1;//使能端口,初始化
ENB=1;
}
//--------------------------------------------
void time0(void)interrupt 1//中断程序
{
i++;//调速在中断中执行
j++;
if(i<=Duty_left)
ENA=1;
else
ENA=0;
if(i>100)
{
ENA=1;
i=0;
}
if(j<=Duty_right)
ENB=1;
else
ENB=0;
if(j>100)
{
ENB=1;
j=0;
}
TH0=(65536-66)/256;
//取约150HZ,12M晶振,每次定时66us,分100次这样开头定义的变量正好直接表示占空比的数值
TL0=(65536-66)%256;
}
//-----------------------------------------------
void turn_left()//左转,赋值
{
Duty_left = turn_left_speed;
Duty_right = right_speed;
IN1=1;
IN2=0;
IN3=0;
IN4=1;
delay_ms(10);
}
//-----------------------------------------------
void turn_right()//右转,赋值
{
Duty_left = left_speed;
Duty_right = turn_right_speed;
IN1=0;
IN2=1;
IN3=1;
IN4=0;
delay_ms(10);
}
//-----------------------------------------------
void turn_right90()
{
Duty_left = left_speed;
Duty_right = right_speed;
IN1=1;
IN2=0;
IN3=0;
IN4=1;
delay_ms(100);
}
//-----------------------------------------------
/*
void turn_left90()
{
Duty_left = left_speed;
Duty_right = right_speed;
IN1=0;
IN2=1;
IN3=1;
IN4=0;
delay_ms(100);
}
*/
//-----------------------------------------------
void straight()//直走
{
Duty_left = left_speed;
Duty_right = right_speed;
IN1 =1;
IN2 =0;
IN3 =1;
IN4 =0;
}
//-----------------------------------------------
void xunji()//寻迹
{
if(L==1 && R==0)
turn_right();
else if(R==1 && L==0)
turn_left();
else if(F1==0 || F2==0)
turn_right90();
else
straight();
}
int main()
{
/*
IN1=0;
IN2=0;
IN3=1;
IN4=0;
ENA=1;
ENB=1;
*/
init();
while(1)
{
xunji();
}
}