#include"Trace.h"
#include"PID.h"
unsigned char i,j,pro_right,pro_left;
int flag,count=0;
int temp;
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit IN3=P1^3;
sbit IN4=P1^4;
sbit ENB=P1^5; //左边轮子的使能端
sbit ENA=P1^6; //右边轮子的使能端
extern int out;
void turn(int a,b)
{
if(a>0&&b>0){ //向前转
pro_right=a;
pro_left= b;
IN1=1; IN2=0; //左边的轮子向前
IN3=1; IN4=0; } //右边的轮子向前
if(a<0&&b>0) { a=-a;//向左转
pro_right=a;
pro_left= b;
IN1=0; IN2=1; //左边的轮子向后
IN3=1; IN4=0; } //右边的轮子向前
if(a>0&&b<0) { b=-b; //向右转 //
pro_right=a;
pro_left= b;
IN1=1; IN2=0; //左边的轮子向前
IN3=0; IN4=1; } //右边的轮子向后
}
void init(void) //定时器设置
{
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
IT0=1;
EX0=1;
EA=1;
ET0=1;
TR0=1;
}
void time0()interrupt 1 //定时器中断服务函数编写
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
count++;
i++;
j++;
if(i<=pro_right)
ENA=1;
else
ENA=0;
if(i==100)
{i=0;
}
if(j<=pro_left)
ENB=1;
else
ENB=0;
if(j==100)
{
j=0;
}
}
void xunji (void)
{
if(count ==200)
{
if(input==0x77)//0111 0 111 //小车在向前冲
flag=6;
else if(input==0x7b)//0111 0 011 //右边的红外对管检测到了黑线,小车向左
flag=7;
else if(input==0x7b)//0111 1 011
flag=8;
else if(input==0x75)//0111 1 001
flag=9;
else if(input==0x7d)//0111 1 101
flag=10;
else if(input==0x7c)//0111 1 100
flag=11;
else if(input==0x7e)//0111 1 110
flag=12;
else if(input==0x6d)//0110 0 111
flag=5;
else if(input==0x6f)//0110 1 111
flag=4;
else if(input==0x4f)//0100 1 111
flag=3;
else if(input==0x5f)//0101 1 111
flag=2;
else if(input==0x1f)//0001 1 111
flag=1;
else if(input==0x10)//0011 1 111
flag=0;
count=0;
}
PID (flag);
}
评论5